我正在尝试熟悉 matplotlib 和 Basemap。首先,我正在尝试生成与我拥有数据的特定网格相匹配的格陵兰图像。
下面令人毛骨悚然的细节描述了我的问题:我无法创建与所需投影/区域匹配的正确尺寸的图像。
我想匹配的投影和网格: Projection as Proj4 string:"+proj=stere +lat_0=90 +lon_0=-45 +lat_ts=70 +ellps=WGS84 +datum=WGS84 +units=m"
由网格定义的区域是一个 800x1400 2000m 分辨率的网格,其中:LowerLeft Corner 的外边缘(m):-700,000.,-3,400,000。右上角的外边缘 (m):900,000.,-600,000。=> (-700,000 + 2000 * 800, -3,400,000 + 2000 * 1400)
底图不允许我为立体投影指定以米 xy 为单位的角,因此我必须将它们转换为纬度/经度。
> gdaltransform -s_srs "+proj=stere +lat_0=90 +lon_0=-45 +lat_ts=70 +ellps=WGS84 +datum=WGS84 +units=m" -t_srs "+proj=latlong"`
-700000 -3400000
-56.6336339989404 58.7244253840871 0
900000 -600000
11.3099324740202 80.0389929796586 0
现在我应该拥有创建 800x1400 图像的所有信息。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
def create_map():
fig = plt.figure(1, figsize=(8, 14), frameon=False, dpi=100)
fig.add_axes([0, 0, 1, 1])
m = Basemap(resolution="i",
projection='stere', lat_ts=70, lat_0=90., lon_0=-45.,
llcrnrlon=-56.6336339989404, llcrnrlat=58.7244253840871,
urcrnrlon=11.3099324740202, urcrnrlat=80.0389929796586,
rsphere=(6378137.0, 6356752.3142))
m.drawcoastlines()
m.fillcontinents(color='#c1c1c1')
m.drawmapboundary(fill_color='#6587ad', linewidth=0.0)
plt.savefig('greenland.png', pad_inches=0.0, bbox_inches='tight')
if __name__ == '__main__':
create_map()
我面临的问题是,当我这样做时,我得到一个 800x1399 的图像。如果我没有bbox_inches='tight'
在plt.savefig
命令中包含 ,我会得到一个 800x1400 的图像,沿着(编辑)底部边缘(编辑)有一条不可见的像素。
任何人都可以帮助我,以便我可以确定我正在正确设置我的底图吗?我觉得我可能只是错过了一个简单的技巧,但没有得到我期望的大小的图像很奇怪。
与往常一样,提前致谢。