basemap bluemarble plot 对面纵剖面

basemap bluemarble plot the opposite longitudinal section

我正在尝试使用底图的 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 参数似乎没有任何作用。

请帮忙。

您需要绘制 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()