6
ベースマッププロットでポップアップボックスを作成する方法を知りたい。マウスをある場所に置くと、ポップアップボックスが表示されます。Matplotlib basemap:ポップアップボックス
これは可能ですか?
ベースマッププロットでポップアップボックスを作成する方法を知りたい。マウスをある場所に置くと、ポップアップボックスが表示されます。Matplotlib basemap:ポップアップボックス
これは可能ですか?
はい、matplotlibのイベント処理フレームワークのおかげで可能です。私はあなたが特に興味を持っているように既に書かれた例を見つけることができませんでしたので、私はそれを書きました(私はmatplotlibソースに含めることを前提にしています)。
私はhttp://matplotlib.sourceforge.net/users/event_handling.htmlをよく読んで、何が起こっているのかをよく理解しています。完璧なソリューション "pick_event"のように聞こえるが、マウスオーバーイベントではなく、この場合は動作しないことに注意してください。
1が望むべきで非常にうまくオブジェクト化することができ私のコードは、次のようになります。うまくいけば、すべてがかなり読めるべきである
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes()
points_with_annotation = []
for i in range(10):
point, = plt.plot(i, i, 'o', markersize=10)
annotation = ax.annotate("Mouseover point %s" % i,
xy=(i, i), xycoords='data',
xytext=(i + 1, i), textcoords='data',
horizontalalignment="left",
arrowprops=dict(arrowstyle="simple",
connectionstyle="arc3,rad=-0.2"),
bbox=dict(boxstyle="round", facecolor="w",
edgecolor="0.5", alpha=0.9)
)
# by default, disable the annotation visibility
annotation.set_visible(False)
points_with_annotation.append([point, annotation])
def on_move(event):
visibility_changed = False
for point, annotation in points_with_annotation:
should_be_visible = (point.contains(event)[0] == True)
if should_be_visible != annotation.get_visible():
visibility_changed = True
annotation.set_visible(should_be_visible)
if visibility_changed:
plt.draw()
on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
plt.show()
。コードのハイレベルな概要は行く:
ああ素敵(メソッドがdocumented hereで含まれている)、コードと説明のためにあなたを@pelson感謝。つまり、プロット上のある場所にホバーするための直接イベントハンドラはありません。間接的に行う必要があります。 –
いいえon_move関数でマウスイベントのx座標とy座標にアクセスできます。それで何かをすることができます。私の場合、私はすべてのアーティストを見て、マウスの位置が含まれているかどうかを確認しましたが、xとyを指定すると、単一の注釈インスタンスの位置を均等に更新できます。 – pelson
ええ、そういう意味ですが、特定のアーティストにコールバックを登録するようなものを探していました。「hover_event」のようなイベントがあります。それは私が直接イベントで意味するものです –