2016-09-30 165 views
8

關於如何在matplotlib中的地圖中插入比例尺以顯示長度比例的任何想法?像我附加的東西。如何在matplotlib中的地圖中插入比例尺

或者也許有自動測量和顯示距離的任何想法(不繪製箭頭和手動寫入距離!)?

謝謝:) enter image description here

+0

看到這個問題還有:[?是否有一個規模指標添加到matplotlib陰謀的便捷方式(https://stackoverflow.com/questions/43258638/IS-有-A-方便路到附加了大規模指示器到一個積合matplotlib) – ImportanceOfBeingErnest

回答

4

我會嘗試matplotlib-scalebar包。 (類似於您的示例c)

假設您繪製的地圖圖像爲imshow或類似圖像,並且您知道像素寬度/像元大小(地圖圖像上一個像素的實際等效大小) ,可以自動創建比例尺:

這個例子是直客PyPi matplotlib-scalebar package page,但在這裏是爲了完整性:

import matplotlib.pyplot as plt 
import matplotlib.cbook as cbook 
from matplotlib_scalebar.scalebar import ScaleBar 

plt.figure() 
image = plt.imread(cbook.get_sample_data('grace_hopper.png')) 
plt.imshow(image) 
scalebar = ScaleBar(0.2) # 1 pixel = 0.2 meter 
plt.gca().add_artist(scalebar) 
plt.show() 

enter image description here

4

有一個已經離在matplotlib中稱爲AnchoredSizeBar的scalebars類。在下面的示例中,AnchoredSizeBar用於向圖像添加比例尺(或者在100x100米的隨機區域上繪製地圖)。

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar 
import matplotlib.font_manager as fm 
fontprops = fm.FontProperties(size=18) 
fig, ax = plt.subplots() 
ax.imshow(np.random.random((10,10)),extent=[0,100,0,100]) 

Extent定義了圖像的水平和垂直值的最大值和最小值。

scalebar = AnchoredSizeBar(ax.transData, 
          20, '20 m', 'lower center', 
          pad=0.1, 
          color='white', 
          frameon=False, 
          size_vertical=1, 
          fontproperties=fontprops) 

ax.add_artist(scalebar) 

AnchoredSizeBar的四個第一個參數是座標系,縮放條長度,標籤和位置的變換對象。其他可選參數更改佈局。這些在文檔中很好解釋。

ax.set_yticks([]) 
ax.set_xticks([]) 

這給 Scalebar on an image/a map over a 100x100 meter area of random