2013-03-18 55 views
3

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

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

这产生具有合理的长宽比为地图的曲线图,但我想它来填充轴代替,导致高度大于宽的曲线图。这只是一个例子,但是现实世界中的情况很重要。

编辑

只是为了calrify,其实我想要的结果是扭曲的,所以在我的例子中,我真心希望与全球的程度越高大于宽度的地图。使用ax.set_aspect('auto')似乎适用于PlateCarreeNorthPolarStereographic预测,但可能并不适用于所有人(例如,OSGB)。

回答

4

好问题。我已经在我的雷达几个月(​​)。

我最近了解到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维度)。

在我看来,这可以被应用到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() 

我不知道这是否这里适合您的需要?

+0

不完全。事实证明,我只需要做'ax.set_aspect('auto')'使其按照我的预期工作。 – ajdawson 2013-03-19 12:30:59

+0

谢谢你让我知道。你介意加入这个答案并接受它(或者如果你喜欢,接受我自己的答案)。干杯 – pelson 2013-03-21 16:05:02