强制映射的宽高比

时间:2013-03-18 15:07:48

标签: cartopy

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

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)。

1 个答案:

答案 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()

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