web-dev-qa-db-ja.com

matplotlibのマップにスケールバーを挿入する方法

長さスケールを示すmatplotlibのマップにスケールバーを挿入するにはどうすればよいですか?私が付けたようなもの。

あるいは、距離を自動的に測定して表示することについてのアイデアはありますか?

ありがとう:) enter image description here

16
Behnam

Matplotlibには、スケールバー用の既存のクラス AnchoredSizeBar があります。以下の例では、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]) 

範囲は、水平値と垂直値の画像の最大値と最小値を定義します。

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の最初の4つの引数は、座標系の変換オブジェクト、スケールバーの長さ、ラベル、位置です。さらにオプションの引数でレイアウトを変更します。これらはdocstringでよく説明されています。

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

これは 画像のスケールバー/ランダムな100x100メートルの領域のマップ を与えます

12
idahj

matplotlib-scalebar パッケージ。 (例のようなものc。)

imshowまたは類似のマップイメージをプロットしていて、ピクセル幅/セルサイズ(マップイメージ上の1ピクセルの実際の相当サイズ)がわかっている場合、スケールバーを自動的に作成できます。 :

この例は PyPi matplotlib-scalebarパッケージページ から抜粋したものですが、ここでは完全を期すためです。

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

6
decvalts