gpt4 book ai didi

python - 如何更改现有轴的 matplotlib 子图投影?

转载 作者:IT老高 更新时间:2023-10-28 22:22:15 28 4
gpt4 key购买 nike

我正在尝试构建一个简单的函数,该函数采用子图实例 (matplotlib.axes._subplots.AxesSubplot) 并将其投影转换为另一个投影,例如,转换为 cartopy.crs.CRS 投影。

这个想法看起来像这样

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

def make_ax_map(ax, projection=ccrs.PlateCarree()):
# set ax projection to the specified projection
...
# other fancy formatting
ax2.coastlines()
...

# Create a grid of plots
fig, (ax1, ax2) = plt.subplots(ncols=2)
# the first subplot remains unchanged
ax1.plot(np.random.rand(10))
# the second one gets another projection
make_ax_map(ax2)

当然,我可以只使用 fig.add_subplot() 函数:

fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(121)
ax1.plot(np.random.rand(10))

ax2 = fig.add_subplot(122,projection=ccrs.PlateCarree())
ax2.coastlines()

但我想知道是否有适当的 matplotlib 方法来更改子图轴投影定义之后。不幸的是,阅读 matplotlib API 并没有帮助。

最佳答案

您不能更改现有轴的投影,原因如下。但是,解决您的潜在问题只需使用 matplotlib 文档 here 中描述的 plt.subplots()subplot_kw 参数。 .例如,如果您希望所有子图都具有 cartopy.crs.PlateCarree 投影,您可以这样做

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# Create a grid of plots
fig, (ax1, ax2) = plt.subplots(ncols=2, subplot_kw={'projection': ccrs.PlateCarree()})

关于实际问题,在创建轴集时指定投影决定了您获得的轴类,每种投影类型都不同。例如

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

ax1 = plt.subplot(311)
ax2 = plt.subplot(312, projection='polar')
ax3 = plt.subplot(313, projection=ccrs.PlateCarree())

print(type(ax1))
print(type(ax2))
print(type(ax3))

此代码将打印以下内容

<class 'matplotlib.axes._subplots.AxesSubplot'>
<class 'matplotlib.axes._subplots.PolarAxesSubplot'>
<class 'cartopy.mpl.geoaxes.GeoAxesSubplot'>

注意每个轴实际上是不同类的实例。

关于python - 如何更改现有轴的 matplotlib 子图投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942233/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com