如果我定义一组具有给定高度和宽度的(geo)轴,我如何确保该图将填充这些轴?
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
ax = plt.axes([0.3, 0.1, 0.4, 0.8], projection=ccrs.PlateCarree())
ax.coastlines()
ax.set_global()
plt.show()
Run Code Online (Sandbox Code Playgroud)
这会为地图生成一个具有合理纵横比的绘图,但我希望它能够填充轴,从而导致绘图高于宽度.这只是一个例子,但有一些真实情况,这样做很重要.
编辑
只是为了进行校对,我实际上希望结果被扭曲,所以在我的例子中我真的想要一个全局范围高于宽度的地图.使用ax.set_aspect('auto')似乎适用于PlateCarree和NorthPolarStereographic投影,但可能并不适用于所有人(OSGB例如).
好问题.我已经有几个月了(https://github.com/SciTools/cartopy/issues/9).
我最近了解了matplotlib的ax.set_adjustable方法(事实上这里).使用此功能,您可以通过更改数据限制来告知具有固定(数据)宽高比的轴填充空间.
例如:
import matplotlib.pyplot as plt
ax = plt.axes([0.25, 0.05, 0.5, 0.9])
ax.set_aspect(1)
ax.plot(range(10))
ax.set_adjustable('datalim')
plt.show()
Run Code Online (Sandbox Code Playgroud)
生成非方形图(在x和y维度上具有相等的长度比例).
在我看来,这也可以应用于cartopy地图:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
ax = plt.axes([0.25, 0.05, 0.5, 0.9], projection=ccrs.PlateCarree())
ax.coastlines()
ax.set_adjustable('datalim')
ax.set_ylim([-90, 90])
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想知道这是否适合您的需求?