• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    matplotlib交互式数据光标mpldatacursor的实现

    简介

    mpldatacursor包可以为matplotlib提供交互式的数据光标(弹出式注释框)。
    它的典型功能是:

     

    安装

    如果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包的结构如下:

    mpldatacursor
       convenience.py
       datacursor.py
       pick_info.py
       __init__.py

    datacursor函数定义在convenience.py中,datacursor函数的返回值是DataCursor类实例。
    DataCursor类定义在datacursor.py中。
    pick_info.py定义了一系列和弹出文本框相关的函数,供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):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。不再一一分析,仅简单说明功能。

    总结

    mpldatacursor历史悠久,但是迟迟没有发布支持matplotlib3.3的稳定版,建议源码安装开发版,或者使用mplcursors包https://github.com/anntzer/mplcursors。
    mpldatacursor功能上还是挺丰富的,可以作为深入学习matplotlib交互的案例。

    到此这篇关于matplotlib交互式数据光标mpldatacursor的实现 的文章就介绍到这了,更多相关matplotlib交互式数据光标内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • matplotlib交互式数据光标实现(mplcursors)
    上一篇:使用Python制作一个数据预处理小工具(多种操作一键完成)
    下一篇:python可视化分析的实现(matplotlib、seaborn、ggplot2)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    matplotlib交互式数据光标mpldatacursor的实现 matplotlib,交互式,数据,光标,