我想在第一个轴的右上角添加第二个轴。谷歌搜索后,我发现了两种方法来做这样的事情:fig.add_axes()
和mpl_toolkits.axes_grid.inset_locator.inset_axes
. 但fig.add_axes()
不接受transform
arg。所以下面的代码会报错。所以位置不能在父坐标轴坐标下,而是在图形坐标下。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig, ax = plt.subplots(1, 1, subplot_kw={'projection': ccrs.PlateCarree()})
ax2 = fig.add_axes([0.8, 0, 0.2, 0.2], transform=ax.transAxes, projection=ccrs.PlateCarree())
并且inset_axes()
不接受projection
arg,所以我不能添加ax2
为 cartopy geo-axes。
from mpl_toolkits.axes_grid.inset_locator import inset_axes
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig, ax = plt.subplots(1, 1, subplot_kw={'projection': ccrs.PlateCarree()})
# The following line doesn't work
ax2 = inset_axes(ax, width='20%', height='20%', axes_kwargs={'projection': ccrs.PlateCarree()})
# Doesn't work neither:
ax2 = inset_axes(ax, width='20%', height='20%', projection=ccrs.PlateCarree())
我在matplotlib issue上问过这个问题。只要它不是 cartopy 轴,以下代码似乎就可以很好地工作。
import matplotlib as mpl
fig, ax = plt.subplots(1, 1)
box = mpl.transforms.Bbox.from_bounds(0.8, 0.8, 0.2, 0.2)
ax2 = fig.add_axes(fig.transFigure.inverted().transform_bbox(ax.transAxes.transform_bbox(box)))
问题:
如何在 matplotlib 和 cartopy 中轻松添加具有适当位置和大小的子轴?
据我了解,在 之后ax.set_extend()
,轴的大小会发生变化。那么也许有一种方法可以将子轴的某个点(例如:的右上角ax2
)锚定在父轴的一个固定位置(例如:的右上角ax1
)?