basemap bluemarble绘制相反的纵向剖面

时间:2017-06-26 12:35:00

标签: python matplotlib-basemap

我尝试使用底图' 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轴翻转的地图。

如果我更换llcrnrlonurcrnrlon

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论证似乎没有做任何事情。

请帮忙。

1 个答案:

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

enter image description here