如何在Matplotlib中追加轴但不继承轴类型(具体为Cartopy类型)

hgqdbh6s  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(156)

我使用Basemap来绘图,它没有引入自己的坐标轴类型,而是使用一些极端的数学方法来进行地理绘图。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(); #use instead of fig because it inits an axis too
divider = make_axes_locatable(ax); #prep to add an axis
cax = divider.append_axes('right', size='2.0%', pad=0.15); #make a color bar axis

我更喜欢这样做,因为它将新轴保持在原始轴的边界内,这使得排列其他子图(通过使用相同的divider.append_axes(...)调用)变得容易,并确保新的颜色条轴不会很容易地从图中剪切掉。
但由于底图是贬值,我试图移动到Cartopy。不幸的是与Cartopy类似的代码:

import matplotlib.pyplot as plt
import cartopy as cartopy
fig, ax = plt.subplots(); #use instead of fig because it inits an axis too
ax = plt.axes(projection=cartopy.crs.PlateCarree()); #redefine the axis to be a geographical axis
divider = make_axes_locatable(ax); #prep to add an axis
cax = divider.append_axes('right', size='2.0%', pad=0.15); #make a color bar axis

给出错误:

KeyError: 'map_projection'

由于在Cartopy下ax轴被更改为Cartopy轴,附加的cax轴也是Cartopy轴。如果我提供map_projection=cartopy.crs.PlateCarree(),代码运行,但我不希望它是Cartopy轴,我希望它是一个颜色条(如果我将其用作颜色条,Cartopy轴会出错)。

如何append_axes但不继承Cartopy轴类型?

此外,我发现使用以下方法也不是很好:

import matplotlib.pyplot as plt
import cartopy as cartopy
fig, ax = plt.subplots(); #use instead of fig because it inits an axis too
ax = plt.axes(projection=cartopy.crs.PlateCarree()); #redefine the axis to be a geographical axis
cax = ax.inset_axes((1.02, 0, 0.02, 1)); #make a color bar axis

但是那个cax不是原始轴边界的一部分,这使得它对排列其他使用divider.append_axes()方法的子图毫无用处,并且颜色条可以裁剪掉图的边缘,因为它浮动在“白色”中。

5kgi1eie

5kgi1eie1#

我在这篇帖子里找到了答案:https://stackoverflow.com/a/52447676/21257881

import matplotlib.axes as maxes
cax = divider.append_axes("top", size="5%", axes_class=maxes.Axes)

相关问题