简介

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 mplreturn formatter.pprint_val(x)
except AttributeError:# 3.3.0 or laterreturn 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包基本应用方式比较简单:

  1. mpldatacursor包中导入datacursor函数。
  2. 应用datacursor函数。

包结构

查看源码可知,mpldatacursor包的结构如下:

mpldatacursorconvenience.pydatacursor.pypick_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 specifiedaxes. 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 willbe 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, optionalThe artists to make selectable and display information for. If this isnot specified, then all manually plotted artists in `axes` will beused.axes : a matplotlib axes of sequence of axes, optionalThe axes to selected artists from if a sequence of artists is notspecified.  If `axes` is not specified, then all available axes in allfigures will be used.tolerance : number, optionalThe radius (in points) that the mouse click must be within to selectthe artist. Default: 5 points.formatter : callable, optionalA function that accepts arbitrary kwargs and returns a string that willbe displayed with annotate. Often, it is convienent to pass in theformat method of a template string, e.g.``formatter="{label}".format``.Keyword arguments passed in to the `formatter` function:`x`, `y` : floatsThe x and y data coordinates of the clicked point`event` : a matplotlib ``PickEvent``The pick event that was fired (note that the selectedartist can be accessed through ``event.artist``).`label` : string or NoneThe legend label of the selected artist.`ind` : list of ints or NoneIf the artist has "subitems" (e.g. points in a scatter orline plot), this will be a list of the item(s) that wereclicked on.  If the artist does not have "subitems", thiswill be None. Note that this is always a list, even whena single item is selected.Some selected artists may supply additional keyword arguments thatare not always present, for example:`z` : numberThe "z" (usually color or array) value, if present. For an``AxesImage`` (as created by ``imshow``), this will be theuninterpolated 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` : intsThe row, column indicies of the selected point for an``AxesImage`` (as created by ``imshow``)`s` : numberThe size of the selected item in a ``PathCollection`` if a sizearray is specified.`c` : numberThe array value displayed as color for a ``PathCollection``if a "c" array is specified (identical to "z").`point_label` : listIf `point_labels` is given when the data cursor is initializedand the artist has "subitems", this will be a list of the itemsof `point_labels` that correspond to the selected artists.Note that this is always a list, even when a single artist isselected.`width`, `height`, `top`, `bottom` : numbersThe parameters for ``Rectangle`` artists (e.g. bar plots).point_labels : sequence or dict, optionalFor artists with "subitems" (e.g. Line2D's), the item(s) of`point_labels` corresponding to the selected "subitems" of the artistwill 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 givento match an artist to the correct series of point labels.display : {"one-per-axes", "single", "multiple"}, optionalControls whether more than one annotation box will be shown.Default: "one-per-axes"draggable : boolean, optionalControls whether or not the annotation box will be interactivelydraggable to a new location after being displayed. Defaults to False.hover : boolean, optionalIf True, the datacursor will "pop up" when the mouse hovers over anartist.  Defaults to False.  Enabling hover also sets`display="single"` and `draggable=False`.props_override : function, optionalIf specified, this function customizes the parameters passed into theformatter function and the x, y location that the datacursor "pop up""points" to.  This is often useful to make the annotation "point" to aspecific side or corner of an artist, regardless of the positionclicked. 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, optionalBy default, the keys "d" and "t" will be bound to deleting/hiding allannotation boxes and toggling interactivity for datacursors,respectively.  If keybindings is False, the ability to hide/toggledatacursors interactively will be disabled. Alternatively, a dict ofthe form {'hide':'somekey', 'toggle':'somekey'} may specified tocustomize the keyboard shortcuts.date_format : string, optionalThe strftime-style formatting string for dates. Used only if the x or yaxes have been set to display dates. Defaults to "%x %X".display_button: int, optionalThe 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, optionalThe 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, optionalWhether or not to adjust the x,y offset to keep the text box inside thefigure. This option has no effect on draggable datacursors. Defaults toTrue. Note: Currently disabled on OSX and NbAgg/notebook backends.**kwargs : additional keyword arguments, optionalAdditional 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 datacursordata = 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):line1line2datacursor(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的稳定版,建议源码安装开发版,或者使用mplcursorshttps://github.com/anntzer/mplcursors
mpldatacursor功能上还是挺丰富的,可以作为深入学习matplotlib交互的案例。

matplotlib交互式数据光标实现——mpldatacursor相关推荐

  1. matplotlib交互式数据光标实现——mplcursors

    简介 mplcursors包也可以为matplotlib提供交互式的数据光标(弹出式注释框),它的灵感来源于mpldatacursor包,可以认为是基于mpldatacursor包的二次开发. 相对于 ...

  2. python动态交互图表_Python 调用 matplotlib 实现交互式数据可视化图表案例

    交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...

  3. python bokeh_使用Bokeh在Python中进行交互式数据可视化

    python bokeh Bokeh prides itself on being a library for interactive data visualization. Bokeh以成为交互式数 ...

  4. python基于web可视化_独家 | 基于Python实现交互式数据可视化的工具(用于Web)

    转自:数据派ID:datapi 作者:Alark Joshi 翻译:陈雨琳 校对:吴金笛 本文2200字,建议阅读8分钟. 本文将介绍实现数据可视化的软件包. 这学期(2018学年春季学期)我教授了一 ...

  5. python交互式数据可视化_基于Python实现交互式数据可视化的工具,你用过几种?...

    作者:Alark Joshi 翻译:陈雨琳 来源:数据派THU(ID:DatapiTHU) 我教授了一门关于数据可视化的数据科学硕士课程.我们的数据科学硕士项目是一个为期15个月的强化项目,这个项目已 ...

  6. python实现数据可视化软件_基于Python实现交互式数据可视化的工具

    作者:Alark Joshi 翻译:陈雨琳 校对:吴金笛 本文2200字,建议阅读8分钟. 本文将介绍实现数据可视化的软件包. 这学期(2018学年春季学期)我教授了一门关于数据可视化的数据科学硕士课 ...

  7. pythonweb数据可视化_独家 | 基于Python实现交互式数据可视化的工具(用于Web)

    翻译:陈雨琳 校对:吴金笛 本文2200字,建议阅读8分钟. 本文将介绍实现数据可视化的软件包. 这学期(2018学年春季学期)我教授了一门关于数据可视化的数据科学硕士课程.我们的数据科学硕士项目是一 ...

  8. Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况)

    Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况) #仿真数据 import pandas as pd import numpy a ...

  9. 打造自己的树莓派监控系统2--内存监控-matplotlib显示数据

    系列文章: 文章1:打造自己的树莓派监控系统1–CPU监控-matplotlib显示数据 文章2:打造自己的树莓派监控系统2–内存监控-matplotlib显示数据 文章3:打造自己的树莓派监控系统3 ...

最新文章

  1. mxnet基础到提高(36)-单层神经网络
  2. 约瑟夫环问题(vector模拟过程)
  3. 给 OpenPOP.Net 加一个小功能,可用于收取邮件时监测数据流量!
  4. Python模块: ConfigParser
  5. android代理生命周期,了解 Activity 生命周期
  6. TX Text Control文字处理教程(11)使用文本框
  7. DP1363F与CLRC663的兼容性对比区别
  8. mysql导出数据库设计说明书
  9. Unity-汽车仿真-1.车库UI菜单滑动功能(利用iTween)
  10. 项目管理-4-运筹帷幄
  11. 小白神器 - Django - 起步
  12. 行无疆靠谱讲述拼多多推广方法有哪些?
  13. 什么是库尼乌斯(the Cuneus)
  14. 短视频优质作者必备|配音神器分享|那些你刷视频时肯定听过的声音
  15. VPS防火墙是什么 操作步骤须知
  16. 目标检测yolo系列
  17. 2020年Java语言发展现状
  18. 【Leetcode刷题】:Python:494. 目标和
  19. clamav 远程杀毒服务安装
  20. 智慧养老:“一键呼/一键通”助力老人智能健康养老

热门文章

  1. L2TP更改网络运营商后导致连接不了
  2. 设计分享|基于51单片机的万年历(汇编)
  3. ping命令的多种玩法,以前竟然只用它来测试网速!
  4. 赢富博易告诉你成功交易者的基本素质
  5. ContextCapture Master 倾斜摄影测量实景三维建模技术
  6. C语言函数的简单书写规范和调用
  7. Y470N 显卡超频了GT550m 完美2.10 bios
  8. C语言 多种方法求最大公因数和最小公倍数
  9. SmartGit功能介绍
  10. 我爱天文 - 月亮从哪边升出来?