matplotlib交互式數據光標實現(mplcursors)
簡介
mplcursors
包也可以為matplotlib
提供交互式的數據光標(彈出式註釋框),它的靈感來源於mpldatacursor
包,可以認為是基於mpldatacursor
包的二次開發。
相對於mpldatacursor
包,mplcursors
包最大的特點就是提供瞭一些相對底層的API,這樣功能實現更加靈活。
安裝
pip install mplcursors
基本應用
mplcursors
包的基本應用方法與mpldatacursor
包類似,直接應用cursor
函數即可。
基本操作方法
- 鼠標左鍵單擊圖表數據元素時會彈出文本框顯示最近的數據元素的坐標值。
- 鼠標右鍵單擊文本框取消顯示數據光標。
- 按d鍵時切換顯示\關閉數據光標。
案例源碼
import matplotlib.pyplot as plt import numpy as np import mplcursors data = np.outer(range(10), range(1, 5)) fig, ax = plt.subplots() lines = ax.plot(data) ax.set_title("Click somewhere on a line.\nRight-click to deselect.\n" "Annotations can be dragged.") mplcursors.cursor(lines) # or just mplcursors.cursor() plt.show()
mplcursors自定義應用
mpldatacursor
包中自定義功能主要通過向datacursor
函數傳遞實參實現。
mplcursors
包中的cursor
函數對標mpldatacursor
包中的datacursor
函數,但是在參數上發生瞭變化,保留瞭artists
、hover
、bindings
、multiple
、highlight
等類似參數。
mplcursors
包增加Selection
對象(底層為namedtuple
)表示選擇的數據元素的屬性。
當選中某個數據點時,可以通過添加(add
)或刪除(remove
)事件觸發、註冊回調函數實現功能,回調函數隻有一個參數,及選擇的數據點。
在註冊回調函數時,mplcursors
包支持使用裝飾器。
mpldatacursor與mplcursors API對比
下面以修改顯示文本信息為例對比下mpldatacursor
與mplcursors
的不同實現方式。
mpldatacursor實現方式
import matplotlib.pyplot as plt import numpy as np from mpldatacursor import datacursor ax=plt.gca() labels = ["a", "b", "c"] for i in range(3): ax.plot(i, i,'o', label=labels[i]) datacursor(formatter='{label}'.format) plt.show()
mplcursors
實現方式一
import matplotlib.pyplot as plt import numpy as np import mplcursors ax=plt.gca() lines = ax.plot(range(3), range(3), "o") labels = ["a", "b", "c"] cursor = mplcursors.cursor(lines) cursor.connect( "add", lambda sel: sel.annotation.set_text(labels[sel.target.index])) plt.show()
mplcursors
實現方式二
import matplotlib.pyplot as plt import numpy as np import mplcursors ax=plt.gca() lines = ax.plot(range(3), range(3), "o") labels = ["a", "b", "c"] cursor = mplcursors.cursor(lines) @cursor.connect("add") def on_add(sel): sel.annotation.set_text(labels[sel.target.index]) plt.show()
結論
mplcursors
包實現的功能與mpldatacursor
包非常相似。相對而言mplcursors
包的API更加靈活,通過connect
函數或者裝飾器自定義屬性耦合性更弱,便於實現繪圖與數據光標實現的分離。
參考
https://mplcursors.readthedocs.io/en/stable/
https://github.com/anntzer/mplcursors
到此這篇關於matplotlib交互式數據光標實現(mplcursors)的文章就介紹到這瞭,更多相關matplotlib交互式光標內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- matplotlib交互式數據光標mpldatacursor的實現
- Python數據分析應用之Matplotlib數據可視化詳情
- Python Matplotlib數據可視化模塊使用詳解
- python數學建模之Matplotlib 實現圖片繪制
- Python 可視化matplotlib模塊基礎知識