matplotlib交互式數(shù)據(jù)光標(biāo)mpldatacursor的實(shí)現(xiàn)
簡介
mpldatacursor
包可以為matplotlib
提供交互式的數(shù)據(jù)光標(biāo)(彈出式注釋框)。
它的典型功能是:
鼠標(biāo)左鍵單擊
圖表數(shù)據(jù)元素時(shí)會(huì)彈出文本框顯示最近的數(shù)據(jù)元素的坐標(biāo)值。鼠標(biāo)右鍵單擊
文本框取消顯示數(shù)據(jù)光標(biāo)。- 按
d
鍵時(shí)切換顯示\關(guān)閉數(shù)據(jù)光標(biāo)。
安裝
如果matplotlib版本低于3.3可以直接使用pip安裝
pip install mpldatacursor
如果matplotlib版本高于3.3,雖然pip安裝成功,但是運(yùn)行案例時(shí)會(huì)出現(xiàn)AttributeError: 'ScalarFormatter' object has no attribute 'pprint_val'
錯(cuò)誤。
通過查看源碼可知:
try: # Again, older versions of mpl return formatter.pprint_val(x) except AttributeError: # 3.3.0 or later return formatter.format_data_short(x)
通過分析,預(yù)計(jì)是因?yàn)槭褂昧藝鴥?nèi)pip源,mpldatacursor
包還未修復(fù)該問題(pip 安裝的 mpldatacursor
包版本號(hào)是0.7.1)。
因此,建議到https://github.com/joferkington/mpldatacursor
下載源碼,進(jìn)行源碼安裝(源碼安裝的 mpldatacursor
包版本號(hào)是0.7.dev0)。
python setup.py install
基本應(yīng)用(官方實(shí)例)解析
應(yīng)用流程
mpldatacursor
包基本應(yīng)用方式比較簡單:
- 從
mpldatacursor
包中導(dǎo)入datacursor
函數(shù)。 - 應(yīng)用
datacursor
函數(shù)。
包結(jié)構(gòu)
查看源碼可知,mpldatacursor
包的結(jié)構(gòu)如下:
mpldatacursor convenience.py datacursor.py pick_info.py __init__.py
datacursor
函數(shù)定義在convenience.py
中,datacursor
函數(shù)的返回值是DataCursor
類實(shí)例。
DataCursor
類定義在datacursor.py
中。
pick_info.py
定義了一系列和彈出文本框相關(guān)的函數(shù),供DataCursor
類調(diào)用。
datacursor函數(shù)定義
由 datacursor
函數(shù)定義可知:
datacursor
函數(shù)可以不提供參數(shù),這樣圖像內(nèi)所有數(shù)據(jù)元素都會(huì)應(yīng)用交互式數(shù)據(jù)光標(biāo)。datacursor
函數(shù)可以指定哪些數(shù)據(jù)元素應(yīng)用交互式數(shù)據(jù)光標(biāo)。
def datacursor(artists=None, axes=None, **kwargs): """ Create an interactive data cursor for the specified artists or specified axes. The data cursor displays information about a selected artist in a "popup" annotation box. If a specific sequence of artists is given, only the specified artists will be interactively selectable. Otherwise, all manually-plotted artists in *axes* will be used (*axes* defaults to all axes in all figures). Parameters ----------- artists : a matplotlib artist or sequence of artists, optional The artists to make selectable and display information for. If this is not specified, then all manually plotted artists in `axes` will be used. axes : a matplotlib axes of sequence of axes, optional The axes to selected artists from if a sequence of artists is not specified. If `axes` is not specified, then all available axes in all figures will be used. tolerance : number, optional The radius (in points) that the mouse click must be within to select the artist. Default: 5 points. formatter : callable, optional A function that accepts arbitrary kwargs and returns a string that will be displayed with annotate. Often, it is convienent to pass in the format method of a template string, e.g. ``formatter="{label}".format``. Keyword arguments passed in to the `formatter` function: `x`, `y` : floats The x and y data coordinates of the clicked point `event` : a matplotlib ``PickEvent`` The pick event that was fired (note that the selected artist can be accessed through ``event.artist``). `label` : string or None The legend label of the selected artist. `ind` : list of ints or None If the artist has "subitems" (e.g. points in a scatter or line plot), this will be a list of the item(s) that were clicked on. If the artist does not have "subitems", this will be None. Note that this is always a list, even when a single item is selected. Some selected artists may supply additional keyword arguments that are not always present, for example: `z` : number The "z" (usually color or array) value, if present. For an ``AxesImage`` (as created by ``imshow``), this will be the uninterpolated array value at the point clicked. For a ``PathCollection`` (as created by ``scatter``) this will be the "c" value if an array was passed to "c". `i`, `j` : ints The row, column indicies of the selected point for an ``AxesImage`` (as created by ``imshow``) `s` : number The size of the selected item in a ``PathCollection`` if a size array is specified. `c` : number The array value displayed as color for a ``PathCollection`` if a "c" array is specified (identical to "z"). `point_label` : list If `point_labels` is given when the data cursor is initialized and the artist has "subitems", this will be a list of the items of `point_labels` that correspond to the selected artists. Note that this is always a list, even when a single artist is selected. `width`, `height`, `top`, `bottom` : numbers The parameters for ``Rectangle`` artists (e.g. bar plots). point_labels : sequence or dict, optional For artists with "subitems" (e.g. Line2D's), the item(s) of `point_labels` corresponding to the selected "subitems" of the artist will be passed into the formatter function as the "point_label" kwarg. If a single sequence is given, it will be used for all artists with "subitems". Alternatively, a dict of artist:sequence pairs may be given to match an artist to the correct series of point labels. display : {"one-per-axes", "single", "multiple"}, optional Controls whether more than one annotation box will be shown. Default: "one-per-axes" draggable : boolean, optional Controls whether or not the annotation box will be interactively draggable to a new location after being displayed. Defaults to False. hover : boolean, optional If True, the datacursor will "pop up" when the mouse hovers over an artist. Defaults to False. Enabling hover also sets `display="single"` and `draggable=False`. props_override : function, optional If specified, this function customizes the parameters passed into the formatter function and the x, y location that the datacursor "pop up" "points" to. This is often useful to make the annotation "point" to a specific side or corner of an artist, regardless of the position clicked. The function is passed the same kwargs as the `formatter` function and is expected to return a dict with at least the keys "x" and "y" (and probably several others). Expected call signature: `props_dict = props_override(**kwargs)` keybindings : boolean or dict, optional By default, the keys "d" and "t" will be bound to deleting/hiding all annotation boxes and toggling interactivity for datacursors, respectively. If keybindings is False, the ability to hide/toggle datacursors interactively will be disabled. Alternatively, a dict of the form {'hide':'somekey', 'toggle':'somekey'} may specified to customize the keyboard shortcuts. date_format : string, optional The strftime-style formatting string for dates. Used only if the x or y axes have been set to display dates. Defaults to "%x %X". display_button: int, optional The mouse button that will triggers displaying an annotation box. Defaults to 1, for left-clicking. (Common options are 1:left-click, 2:middle-click, 3:right-click) hide_button: int or None, optional The mouse button that triggers hiding the selected annotation box. Defaults to 3, for right-clicking. (Common options are 1:left-click, 2:middle-click, 3:right-click, None:hiding disabled) keep_inside : boolean, optional Whether or not to adjust the x,y offset to keep the text box inside the figure. This option has no effect on draggable datacursors. Defaults to True. Note: Currently disabled on OSX and NbAgg/notebook backends. **kwargs : additional keyword arguments, optional Additional keyword arguments are passed on to annotate. Returns ------- dc : A ``mpldatacursor.DataCursor`` instance """
官方實(shí)例源碼
import matplotlib.pyplot as plt import numpy as np from mpldatacursor import datacursor data = np.outer(range(10), range(1, 5)) fig, ax = plt.subplots() lines = ax.plot(data) ax.set_title('Click somewhere on a line') datacursor() plt.show()
限定僅某數(shù)據(jù)元素使用交互式光標(biāo)
本實(shí)例中,有兩個(gè)數(shù)據(jù)元素(artist
):line1
和line2
,datacursor(line1)
函數(shù)提供了參數(shù)line1
,因此只有line1
可以使用交互式數(shù)據(jù)光標(biāo),line2
則沒有效果。
import matplotlib.pyplot as plt import numpy as np from mpldatacursor import datacursor fig, ax = plt.subplots() line1 = ax.plot([1,3]) line2 = ax.plot([1,2]) ax.set_title('Click somewhere on a line') datacursor(line1) plt.show()
其他官方實(shí)例功能概述
mpldatacursor
提供了大量實(shí)際案例,詳見https://github.com/joferkington/mpldatacursor/tree/master/examples。不再一一分析,僅簡單說明功能。
basic_single_annotation.py
:在多子圖情況下,默認(rèn)每個(gè)子圖的數(shù)據(jù)光標(biāo)是獨(dú)立的,即每個(gè)子圖都可以顯示數(shù)據(jù)光標(biāo),相互不影響。使用datacursor(display='single')
參數(shù)后,僅在當(dāng)前子圖顯示數(shù)據(jù)光標(biāo),其余子圖顯示的數(shù)據(jù)光標(biāo)自動(dòng)關(guān)閉。change_popup_color.py
:提供了兩個(gè)案例,一個(gè)取消了提示框的邊框,一個(gè)將提示框的背景色改為白色。hover_example.py
:將數(shù)據(jù)光標(biāo)的觸發(fā)方式由鼠標(biāo)左鍵單擊改為鼠標(biāo)懸浮。show_artist_labels.py
:將數(shù)據(jù)光標(biāo)默認(rèn)顯示的坐標(biāo)值改為數(shù)據(jù)元素的label
。highlighting_example.py
:點(diǎn)擊數(shù)據(jù)元素時(shí),數(shù)據(jù)元素會(huì)高亮(黃色)顯示。draggable_example.py
:在一個(gè)子圖中,同時(shí)顯示多個(gè)數(shù)據(jù)光標(biāo)。customize_keyboard_shortcuts.py
:重新綁定數(shù)據(jù)光標(biāo)快捷鍵。labeled_points_example.py
:自定義數(shù)據(jù)點(diǎn)標(biāo)簽。date_example.py
:日期數(shù)據(jù)顯示。bar_example.py
:在柱狀圖中,在每個(gè)柱上方鼠標(biāo)懸浮觸發(fā)數(shù)據(jù)光標(biāo)。
總結(jié)
mpldatacursor
歷史悠久,但是遲遲沒有發(fā)布支持matplotlib3.3
的穩(wěn)定版,建議源碼安裝開發(fā)版,或者使用mplcursors
包https://github.com/anntzer/mplcursors。
mpldatacursor
功能上還是挺豐富的,可以作為深入學(xué)習(xí)matplotlib
交互的案例。
到此這篇關(guān)于matplotlib交互式數(shù)據(jù)光標(biāo)mpldatacursor的實(shí)現(xiàn) 的文章就介紹到這了,更多相關(guān)matplotlib交互式數(shù)據(jù)光標(biāo)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django執(zhí)行數(shù)據(jù)庫查詢之后實(shí)現(xiàn)返回的結(jié)果集轉(zhuǎn)json
這篇文章主要介紹了django執(zhí)行數(shù)據(jù)庫查詢之后實(shí)現(xiàn)返回的結(jié)果集轉(zhuǎn)json,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Python getopt模塊處理命令行選項(xiàng)實(shí)例
這篇文章主要介紹了Python getopt模塊處理命令行選項(xiàng)實(shí)例,本文講解相對(duì)簡單,需要的朋友可以參考下2014-05-05Python中對(duì)數(shù)組集進(jìn)行按行打亂shuffle的方法
今天小編就為大家分享一篇Python中對(duì)數(shù)組集進(jìn)行按行打亂shuffle的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11Linux安裝Pytorch1.8GPU(CUDA11.1)的實(shí)現(xiàn)
這篇文章主要介紹了Linux安裝Pytorch1.8GPU(CUDA11.1)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python3.3使用tkinter開發(fā)猜數(shù)字游戲示例
這篇文章主要介紹了python3.3使用tkinter開發(fā)猜數(shù)字游戲示例,需要的朋友可以參考下2014-03-03Python學(xué)習(xí)筆記之Zip和Enumerate用法實(shí)例分析
這篇文章主要介紹了Python學(xué)習(xí)筆記之Zip和Enumerate用法,結(jié)合實(shí)例形式分析了Zip和Enumerate的功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-08-08macbook如何徹底刪除python的實(shí)現(xiàn)方法
本文主要介紹了macbook如何徹底刪除python的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07