2013-03-18 92 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