2013-12-12 4 views
8
from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
import numpy as np 

m = Basemap(projection='cyl',resolution='c',area_thresh=10,llcrnrlon=-180,urcrnrlon=180,\ 
    llcrnrlat=-90,urcrnrlat=90) 
m.etopo() 

In realtà, non sapevo come fornire i parametri lat, lon, lat0 e lon0 necessari per mostrare la scala. Come fornirli?utilizzando la barra di scala nella basemap matplotlib

map.drawmapscale(????,barstyle='simple',units='km',fontsize=9,labelstyle='simple',fontcolor='k') 

Il tutorial in

http://matplotlib.org/basemap/api/basemap_api.html lo descrivono come segue:

drawmapscale(lon, lat, lon0, lat0, length, barstyle='simple', units='km', fontsize=9, yoffset=None, labelstyle='simple', fontcolor='k', fillcolor1='w', fillcolor2='k', ax=None, format='%d', zorder=None) 

saremmo grati se qualcuno mi potrebbe aiutare.

+2

Se si forniscono i valori corretti in cui ci si imbatterà in: 'ValueError: impossibile disegnare la scala della mappa per proiezione = 'cyl''. Non puoi fare una scala in chilometri per una mappa in gradi, la lunghezza di un km è diversa in ogni posizione. –

+0

@ Rutger Kassies ok allora puoi mostrarmi un esempio di disegno della barra di scala usando il grado come unità? – 2964502

+1

L'aggiunta di griglie tramite 'drawmeridian' e' drawparallels' sarà probabilmente più utile di una barra di scala per gradi. –

risposta

5

Sembra che drawmapscale non supporta Basemap casi con projection='cyl' (e possibilmente altri, ho controllato solo projection='cyl' e projection='moll'):

In [7]: m = Basemap(projection='cyl',resolution='c',area_thresh=10,llcrnrlon=-180,\ 
        urcrnrlon=180, llcrnrlat=-90,urcrnrlat=90) 

In [8]: m.etopo() 
Out[8]: <matplotlib.image.AxesImage at 0x10a899e90> 

In [10]: m.drawmapscale(50, -75, 0, 0, 400) 

Il risultato è il seguente errore:

ValueError: cannot draw map scale for projection='cyl' 

Ma sembra che drawmapscale funzioni per altre proiezioni. Utilizzando Mollweide, ad esempio:

In [11]: m = Basemap(projection='moll', lon_0=0) 
In [12]: m.etopo() 
Out[12]: <matplotlib.image.AxesImage at 0x10c299450> 

In [13]: m.drawmapscale(50, -75, 0, 0, 400) 
Out[13]: 
[<matplotlib.lines.Line2D at 0x11d2e41d0>, 
<matplotlib.lines.Line2D at 0x109cd4d90>, 
<matplotlib.lines.Line2D at 0x11d2e4750>, 
<matplotlib.text.Text at 0x11d2e4d90>, 
<matplotlib.text.Text at 0x11d2e5610>] 

enter image description here

Purtroppo la Basemap API non sembra parlare di nulla che non funziona per tutte le proiezioni. Ma here sembra essere una soluzione potenziale.

Problemi correlati