5

如果我定义一组具有给定高度和宽度的(地理)轴,我如何确保绘图将填充这些轴?

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')似乎适用于PlateCarreeNorthPolarStereographic预测,但可能不适用于所有人(OSGB例如)。

4

1 回答 1

9

好问题。我已经关注这个问题好几个月了(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()

生成非方形图(在 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()

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

于 2013-03-18T17:07:53.460 回答