首頁 > 後端開發 > Python教學 > 如何在 Matplotlib 散點圖添加懸停註解?

如何在 Matplotlib 散點圖添加懸停註解?

Barbara Streisand
發布: 2024-12-23 05:41:18
原創
950 人瀏覽過

How to Add Hovering Annotations to Matplotlib Scatter Plots?

如何在圖中建立懸停註解

分析具有大量資料點的散佈圖時,識別特定的興趣點可能具有挑戰性。一種方便的解決方案是實現懸停註釋,在遊標移動時顯示附加資訊。

matplotlib 函式庫提供了在繪圖中新增註解的多功能功能。要建立懸停註釋,我們可以利用 annotate 和 update_annot 函數。 annotate 函數將註解定位在指定座標處,而 update_annot 根據懸停資料點的索引修改其文字和外觀。

要實現懸停註釋,請依照下列步驟操作:

  1. 匯入所需的資料庫並產生資料。
  2. 建立散佈圖和不可見註解物件。
  3. 定義 update_annot 函數,根據懸停點的索引更新註解的文字和外觀。
  4. 實作懸停函數,根據遊標移動控制註解的可見性。
  5. 將motion_notify_event連接到hover函數。

透過實作這個方法,您可以輕鬆地在散點圖上新增懸停註釋,提供對特定資料點的有價值的見解,而不會使繪圖變得混亂。

範例:

提供的程式碼片段示範散佈圖上懸停註解的實作:

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()
登入後複製

以上是如何在 Matplotlib 散點圖添加懸停註解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板