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

其實,我不知道如何提供顯示比例尺所需的lat,lon,lat0和lon0參數。如何提供他們?在matplotlib底圖中使用比例尺

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

本教程在

http://matplotlib.org/basemap/api/basemap_api.html形容如下:

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) 

將不勝感激,如果有人可以幫助我。

+2

如果您要提供正確的值,您將遇到:'ValueError:無法繪製投影='cyl''的地圖比例。你不能以度爲單位制作地圖的公里數,每個地點的公里長度都不相同。 –

+0

@ Rutger Kassies好的,那麼你能告訴我一個使用度作爲單位繪製比例尺的例子嗎? – 2964502

+1

通過'drawmeridians'和'drawparallels'添加網格線可能比衡量酒吧更有幫助。 –

回答

5

看來drawmapscale不支持Basemap實例與projection='cyl'(可能還有其他人,我只檢查projection='cyl'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) 

這將導致以下錯誤:

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

drawmapscale確實似乎適用於其他預測。使用Mollweide,例如:

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

不幸的是,Basemap API似乎並沒有提及關於它不工作的所有投影什麼。但here似乎是一種潛在的解決方法。