如果我定义一组具有给定高度和宽度的(地理)轴,我如何确保该图将填充这些轴?
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()
这会为地图生成一个具有合理宽高比的绘图,但我希望它能够填充轴,导致绘图高于宽度。这只是一个例子,但是有一些真实情况,这样做很重要。
修改
为了进行校对,我实际上希望结果被扭曲,所以在我的例子中,我真的想要一张全局范围高于宽度的地图。使用ax.set_aspect('auto')
似乎适用于PlateCarree
和NorthPolarStereographic
投影,但可能不适用于所有投放(例如OSGB
)。
答案 0 :(得分:6)
好问题。我已经在我的雷达上看了几个月(https://github.com/SciTools/cartopy/issues/9)。
我最近了解了matplotlib的ax.set_adjustable
方法(here in fact)。
使用此功能,您可以通过更改数据限制来告知具有固定(数据)宽高比的轴,以填充空间。
例如:
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()
生成非正方形图(在x和y维度上具有相等的长度比例)。
在我看来,这也可以应用于图解地图:
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()
我想知道这是否适合您的需求?