2017-06-26 1 views
0

Ich versuche, eine Karte Hintergrund plotten die basemap mit bluemarble() Funktion, auf die folgende Weise:basemap Bluemarble Grundstück der gegenüberliegenden Längsschnitt

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

Ich denke, es liegt daran, dass die Domäne die Datumsgrenze überquert, gibt es eine Karte mit ihrer X-Achse umgedreht.

Wenn ich tauschen die llcrnrlon und 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) 

die Karte korrekte Orientierung zeigt, aber die falsche Domäne. Ich wollte den Indischen Ozean, Euro-Asien und Westpazifik zeigen, aber die Karte zeigt die restlichen Längengrade, die den Zentralost-Pazifik, Amerika-Kontinente und den Atlantik abdecken. Das Argument lon_0 scheint nichts zu tun.

Bitte helfen.

Antwort

0

Sie müssen 2 Karten bei Datumsgrenze Beitritt plotten:

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

+0

Danke, Sie meinen Tag gerettet. Das ist eine clevere Idee. Besser noch, add 'ax1.axis (' off '); ax2.axis ('off') 'entfernt diese vertikale Linie am Datum. – Jason

Verwandte Themen