2016-07-12 23 views
0

Ich versuche, Daten von einem Netcdf mit Basemap zu plotten, aber ich denke, da die Breitenindizes invertiert sind, bekomme ich eine Karte, die auf dem Kopf steht. Wie soll ich das beheben? Vielen Dank!Rotierendes Map-Plot mit Grundkarte in Python

fnc = Dataset(ncfile, 'r') 
lat = fnc.variables['latitude'][:] 
lon = fnc.variables['longitude'][:] 
level = fnc.variables['level'] 
mydata = fnc.variables['Data'][:] 
imgplot = plt.imshow(mydata[0, 0, :, :]) 
imgplot.set_cmap('RdYlGn') 
plt.colorbar() 
plt.show 

enter image description here

m = Basemap(llcrnrlon = -180, llcrnrlat = -90, urcrnrlon = 180, urcrnrlat= +90, resolution = 'l', epsg=4326) 
x, y = m(lon, lat) 
im = m.imshow(mydata[0, 0, :, :]) 
m.drawcoastlines() 
plt.show() 

enter image description here

Antwort

1

Beachten Sie zunächst, dass Sie sich gerade in einer Dimension von Data gerade liest:

mydata = fnc.variables['Data'][:] 

aber später Sie versuchen zu extrahieren Scheiben davon, als wäre es 4D:

imgplot = plt.imshow(mydata[0, 0, :, :]) 

Also, Sie lesen in mögen alle vier Dimensionen von Data (vielleicht ist solche Zeit, Stufe, Lat, Lon?):

mydata = fnc.variables['Data'][:,:,:,:] 

und dann Breite umkehren ::-1 mit syntax:

imgplot.plotimshow(mydata[0, 0, ::-1, :]) 
+0

Danke für die schnelle Antwort. Ich habe auch eine Follow-up-Frage und würde mich freuen, wenn Sie mir auch dort helfen könnten http://stackoverflow.com/questions/38338177/how-to-remove-grey-boudary-lines-in-a-map- when-plotten-a-netcdf-using-imshow-in – user26750

0

Ich glaube, das Plotten Befehl muss die Kartenkoordinaten x, y kennen. Versuchen Sie, die

im = m.imshow(mydata[0, 0, :, :]) 

mit

m.pcolormesh(x,y,mydata[0,0,:,:]) 

zu ersetzen, und es sollte funktionieren.