プロットにホバリング注釈を追加する方法
散布図上の点に注釈を付けることは、データを操作する際の一般的なタスクです。 2D プロットを作成するための Python ライブラリである Matplotlib は、annotate コマンドを使用して固定注釈をプロットに追加する簡単な方法を提供します。ただし、多数のデータ ポイントを扱う場合、プロットが乱雑になる可能性があるため、このアプローチは非実用的になる可能性があります。
幸いなことに、カーソルが特定のデータ ポイント上にある場合にのみ表示される動的注釈を作成するという解決策があります。このメソッドでは、カーソル イベントを処理するコールバック関数と併せて、注釈関数を少し変更する必要があります。
実装を示すサンプル コードを次に示します。
import matplotlib.pyplot as plt import numpy as np; np.random.seed(1) x = np.random.rand(15) y = np.random.rand(15) names = np.array(list("ABCDEFGHIJKLMNO")) c = np.random.randint(1, 5, size=15) norm = plt.Normalize(1, 4) cmap = plt.cm.RdYlGn fig, ax = plt.subplots() sc = plt.scatter(x, y, c=c, s=100, cmap=cmap, norm=norm) annot = ax.annotate("", xy=(0, 0), xytext=(20, 20), textcoords="offset points", bbox=dict(boxstyle="round", fc="w"), arrowprops=dict(arrowstyle="->")) annot.set_visible(False) def update_annot(ind): pos = sc.get_offsets()[ind["ind"][0]] annot.xy = pos text = "{}, {}".format(" ".join(list(map(str, ind["ind"]))), " ".join([names[n] for n in ind["ind"]])) annot.set_text(text) annot.get_bbox_patch().set_facecolor(cmap(norm(c[ind["ind"][0]]))) annot.get_bbox_patch().set_alpha(0.4) def hover(event): vis = annot.get_visible() if event.inaxes == ax: cont, ind = sc.contains(event) if cont: update_annot(ind) annot.set_visible(True) fig.canvas.draw_idle() else: if vis: annot.set_visible(False) fig.canvas.draw_idle() fig.canvas.mpl_connect("motion_notify_event", hover) plt.show()
このコードは、次のツールヒントを追加します。マウスをデータ ポイントの上に置くと が表示され、その座標と名前が表示されます。 update_annot 関数は、ホバーされたポイントに応じて注釈の位置と内容を動的に更新します。
このアプローチにより、各データ ポイントに関する情報に簡単にアクセスできる、すっきりとした視覚化が可能になり、対話型のデータ探索に適しています。
以上がMatplotlib で散布図のホバリング注釈を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。