我尝试使用底图' bluemarble()
函数绘制地图背景,方法如下:
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
lats=[-25,66]
lons=[60,187]
fig=plt.figure();ax=fig.add_subplot(111)
bmap=Basemap(projection='merc',\
llcrnrlat=lats[0],llcrnrlon=lons[0],\
urcrnrlat=lats[1],urcrnrlon=lons[1]-360.,\
lon_0=(lons[0]+lons[1])/2.,\
ax=ax)
bmap.bluemarble()
plt.show()
我认为这是因为域正在越过日期线,它会给出一个x轴翻转的地图。
如果我更换llcrnrlon
和urcrnrlon
:
bmap=Basemap(projection='merc',\
llcrnrlat=lats[0],llcrnrlon=lons[1]-360.,\
urcrnrlat=lats[1],urcrnrlon=lons[0],\
lon_0=(lons[0]+lons[1])/2.,\
ax=ax)
地图显示正确的方向,但错误的域名。我想展示印度洋,欧亚和西太平洋,但是地图显示了剩余的经度,包括中东太平洋,美洲大陆和大西洋。 lon_0
论证似乎没有做任何事情。
请帮忙。
答案 0 :(得分:0)
您需要在日期线上绘制2张地图:
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
lats1=[-25, 66]
lons1=[60, 179.95]
fig=plt.figure()
#fig.set_size_inches((7.5, 6))
fig.set_size_inches((10, 9))
ax1=fig.add_subplot(121)
ax2=fig.add_subplot(122)
bmap=Basemap(projection='merc',\
llcrnrlat=lats1[0], llcrnrlon=lons1[0],\
urcrnrlat=lats1[1], urcrnrlon=lons1[1],\
lon_0=(lons1[0]+lons1[1])/2.,\
ax=ax1)
bmap.bluemarble(ax = ax1)
ax1.set_position([0, 0, 0.8, 1])
lats2=[-25,66]
lons2=[-179.95, -150]
bmap=Basemap(projection='merc',\
llcrnrlat=lats2[0], llcrnrlon=lons2[0],\
urcrnrlat=lats2[1], urcrnrlon=lons2[1],\
lon_0=(lons2[0]+lons2[1])/2.,\
ax=ax2)
bmap.bluemarble(ax = ax2)
ax2.set_position([0.8, 0, 0.2, 1])
ax1.set_aspect('auto')
ax2.set_aspect('auto')
ax1.set_adjustable('datalim')
ax2.set_adjustable('datalim')
plt.show()