简介
mpldatacursor
包可以为matplotlib
提供交互式的数据光标(弹出式注释框)。
它的典型功能是:
鼠标左键单击
图表数据元素时会弹出文本框显示最近的数据元素的坐标值。鼠标右键单击
文本框取消显示数据光标。- 按
d
键时切换显示\关闭数据光标。
安装
如果matplotlib版本低于3.3可以直接使用pip安装
pip install mpldatacursor
如果matplotlib版本高于3.3,虽然pip安装成功,但是运行案例时会出现AttributeError: 'ScalarFormatter' object has no attribute 'pprint_val'
错误。
通过查看源码可知:
try: # Again, older versions of mpl return formatter.pprint_val(x) except AttributeError: # 3.3.0 or later return formatter.format_data_short(x)
通过分析,预计是因为使用了国内pip源,mpldatacursor
包还未修复该问题(pip 安装的 mpldatacursor
包版本号是0.7.1)。
因此,建议到https://github.com/joferkington/mpldatacursor
下载源码,进行源码安装(源码安装的 mpldatacursor
包版本号是0.7.dev0)。
python setup.py install
基本应用(官方实例)解析
应用流程
mpldatacursor
包基本应用方式比较简单:
- 从
mpldatacursor
包中导入datacursor
函数。 - 应用
datacursor
函数。
包结构
查看源码可知,mpldatacursor
包的结构如下:
mpldatacursor convenience.py datacursor.py pick_info.py __init__.py
datacursor
函数定义在convenience.py
中,datacursor
函数的返回值是DataCursor
类实例。
DataCursor
类定义在datacursor.py
中。
pick_info.py
定义了一系列和弹出文本框相关的函数,供DataCursor
类调用。
datacursor函数定义
由 datacursor
函数定义可知:
datacursor
函数可以不提供参数,这样图像内所有数据元素都会应用交互式数据光标。datacursor
函数可以指定哪些数据元素应用交互式数据光标。
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 """
官方实例源码
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()
限定仅某数据元素使用交互式光标
本实例中,有两个数据元素(artist
):line1
和line2
,datacursor(line1)
函数提供了参数line1
,因此只有line1
可以使用交互式数据光标,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()
其他官方实例功能概述
mpldatacursor
提供了大量实际案例,详见https://github.com/joferkington/mpldatacursor/tree/master/examples。不再一一分析,仅简单说明功能。
basic_single_annotation.py
:在多子图情况下,默认每个子图的数据光标是独立的,即每个子图都可以显示数据光标,相互不影响。使用datacursor(display='single')
参数后,仅在当前子图显示数据光标,其余子图显示的数据光标自动关闭。change_popup_color.py
:提供了两个案例,一个取消了提示框的边框,一个将提示框的背景色改为白色。hover_example.py
:将数据光标的触发方式由鼠标左键单击改为鼠标悬浮。show_artist_labels.py
:将数据光标默认显示的坐标值改为数据元素的label
。highlighting_example.py
:点击数据元素时,数据元素会高亮(黄色)显示。draggable_example.py
:在一个子图中,同时显示多个数据光标。customize_keyboard_shortcuts.py
:重新绑定数据光标快捷键。labeled_points_example.py
:自定义数据点标签。date_example.py
:日期数据显示。bar_example.py
:在柱状图中,在每个柱上方鼠标悬浮触发数据光标。
总结
mpldatacursor
历史悠久,但是迟迟没有发布支持matplotlib3.3
的稳定版,建议源码安装开发版,或者使用mplcursors
包https://github.com/anntzer/mplcursors。
mpldatacursor
功能上还是挺丰富的,可以作为深入学习matplotlib
交互的案例。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 好薇2024《兵哥哥》1:124K黄金母盘[WAV+CUE]
- 胡歌.2006-珍惜(EP)【步升大风】【FLAC分轨】
- 洪荣宏.2014-拼乎自己看【华特】【WAV+CUE】
- 伊能静.1999-从脆弱到勇敢1987-1996精选2CD【华纳】【WAV+CUE】
- 刘亮鹭《汽车DJ玩主》[WAV+CUE][1.1G]
- 张杰《最接近天堂的地方》天娱传媒[WAV+CUE][1.1G]
- 群星《2022年度发烧天碟》无损黑胶碟 2CD[WAV+CUE][1.4G]
- 罗文1983-罗文甄妮-射雕英雄传(纯银AMCD)[WAV+CUE]
- 群星《亚洲故事香港纯弦》雨果UPMAGCD2024[低速原抓WAV+CUE]
- 群星《经典咏流传》限量1:1母盘直刻[低速原抓WAV+CUE]
- 庾澄庆1993《老实情歌》福茂唱片[WAV+CUE][1G]
- 许巍《在别处》美卡首版[WAV+CUE][1G]
- 林子祥《单手拍掌》华纳香港版[WAV+CUE][1G]
- 郑秀文.1997-我们的主题曲【华纳】【WAV+CUE】
- 群星.2001-生命因爱动听电影原创音乐AVCD【MEDIA】【WAV+CUE】