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

Aslında, ölçek çubuğunu göstermek için gereken lat, lon, lat0 ve lon0 parametrelerini nasıl sağlayacağımı bilmiyordum. Onlara nasıl verilir? aşağıdaki gibimatplotlib basemap'ta scalebar kullanılarak

http://matplotlib.org/basemap/api/basemap_api.html de

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

öğretici tarif: Birisi bana yardımcı olur musun

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) 

takdir ederim. (Ve muhtemelen diğerleri, ben sadece projection='cyl' kontrol ettikten ve projection='moll')

+2

Doğru değerleri sağlamanız durumunda: 'ValueError: projeksiyon = 'cyl' için harita ölçeği çizemezsiniz. Bir harita için kilometre cinsinden bir ölçek yapamazsınız, kilometrelerin uzunluğu her yerde farklıdır. –

+0

@ Rutger Kassies tamam o zaman birim olarak derece kullanarak scaleb çizim bir örnek gösterebilir? – 2964502

+1

Kılavuz çizgilerini "drawmeridians" ve "drawparallels" ile eklemek, derece için bir ölçek çubuğundan daha yararlı olacaktır. –

cevap

5

O drawmapscaleprojection='cyl' ile Basemap örneğini desteklemez anlaşılıyor:

Bu aşağıdaki hatası
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) 

:

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

Ancak drawmapscale diğer yansımalar için çalışıyor görünmektedir. örneğin, Mollweide kullanarak:

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

Maalesef Basemap API tüm projeksiyonlar için çalışmıyor bahsetti görünmüyor. Ancak here, olası bir geçici çözüm gibi görünüyor.