强制映射的宽高比

ajd*_*son 5 cartopy

如果我定义一组具有给定高度和宽度的(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')似乎适用于PlateCarreeNorthPolarStereographic投影,但可能并不适用于所有人(OSGB例如).

pel*_*son 7

好问题.我已经有几个月了(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)

我想知道这是否适合您的需求?

  • 不完全是。事实证明,我只需要执行`ax.set_aspect('auto')`即可使这项工作达到我的预期。 (2认同)