网络编程
位置:首页>> 网络编程>> 网络编程>> matplotlib绘制多子图共享鼠标光标的方法示例

matplotlib绘制多子图共享鼠标光标的方法示例

作者:mighty13  发布时间:2023-06-15 13:45:19 

标签:matplotlib,多子图,鼠标光标

matplotlib官方除了提供了鼠标十字光标的示例,还提供了同一图像内多子图共享光标的示例,其功能主要由widgets模块中的MultiCursor类提供支持。

MultiCursor类与Cursor类参数类似,差异主要在:

  • Cursor类参数只有一个ax,即需要显示光标的子图;MultiCursor类参数为canvasaxes,其中axes为需要共享光标的子图列表。

  • Cursor类中,光标默认是十字线;MultiCursor类中,光标默认为竖线。

官方示例


import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import MultiCursor

t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.sin(4*np.pi*t)

fig, (ax1, ax2) = plt.subplots(2, sharex=True)
ax1.plot(t, s1)
ax2.plot(t, s2)

multi = MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1)
plt.show()

matplotlib绘制多子图共享鼠标光标的方法示例

简易修改版


multi = MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1, horizOn=True, vertOn=True)

matplotlib绘制多子图共享鼠标光标的方法示例

MultiCursor类源码


class MultiCursor(Widget):
 """
 Provide a vertical (default) and/or horizontal line cursor shared between
 multiple axes.

For the cursor to remain responsive you must keep a reference to it.

Example usage::

from matplotlib.widgets import MultiCursor
   import matplotlib.pyplot as plt
   import numpy as np

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
   t = np.arange(0.0, 2.0, 0.01)
   ax1.plot(t, np.sin(2*np.pi*t))
   ax2.plot(t, np.sin(4*np.pi*t))

multi = MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1,
             horizOn=False, vertOn=True)
   plt.show()

"""
 def __init__(self, canvas, axes, useblit=True, horizOn=False, vertOn=True,
        **lineprops):

self.canvas = canvas
   self.axes = axes
   self.horizOn = horizOn
   self.vertOn = vertOn

xmin, xmax = axes[-1].get_xlim()
   ymin, ymax = axes[-1].get_ylim()
   xmid = 0.5 * (xmin + xmax)
   ymid = 0.5 * (ymin + ymax)

self.visible = True
   self.useblit = useblit and self.canvas.supports_blit
   self.background = None
   self.needclear = False

if self.useblit:
     lineprops['animated'] = True

if vertOn:
     self.vlines = [ax.axvline(xmid, visible=False, **lineprops)
             for ax in axes]
   else:
     self.vlines = []

if horizOn:
     self.hlines = [ax.axhline(ymid, visible=False, **lineprops)
             for ax in axes]
   else:
     self.hlines = []

self.connect()

def connect(self):
   """Connect events."""
   self._cidmotion = self.canvas.mpl_connect('motion_notify_event',
                        self.onmove)
   self._ciddraw = self.canvas.mpl_connect('draw_event', self.clear)

def disconnect(self):
   """Disconnect events."""
   self.canvas.mpl_disconnect(self._cidmotion)
   self.canvas.mpl_disconnect(self._ciddraw)

def clear(self, event):
   """Clear the cursor."""
   if self.ignore(event):
     return
   if self.useblit:
     self.background = (
       self.canvas.copy_from_bbox(self.canvas.figure.bbox))
   for line in self.vlines + self.hlines:
     line.set_visible(False)

def onmove(self, event):
   if self.ignore(event):
     return
   if event.inaxes is None:
     return
   if not self.canvas.widgetlock.available(self):
     return
   self.needclear = True
   if not self.visible:
     return
   if self.vertOn:
     for line in self.vlines:
       line.set_xdata((event.xdata, event.xdata))
       line.set_visible(self.visible)
   if self.horizOn:
     for line in self.hlines:
       line.set_ydata((event.ydata, event.ydata))
       line.set_visible(self.visible)
   self._update()

def _update(self):
   if self.useblit:
     if self.background is not None:
       self.canvas.restore_region(self.background)
     if self.vertOn:
       for ax, line in zip(self.axes, self.vlines):
         ax.draw_artist(line)
     if self.horizOn:
       for ax, line in zip(self.axes, self.hlines):
         ax.draw_artist(line)
     self.canvas.blit()
   else:
     self.canvas.draw_idle()

来源:https://blog.csdn.net/mighty13/article/details/112145863

0
投稿

猜你喜欢

  • 目录最终版本过程借鉴代码思考urllib.request和requestsBeautifulSoup优化处理总结代码复制可直接使用,记得pi
  • 如何创建列表,或生成列表。这里介绍在python的基础知识里创建或转变或生成列表的一些方法。零个,一个或一系列数据用逗号隔开,放在方括号[
  • 1、善用css缩写可以减少页面文件大小,提高下载速度,同时使代码简洁可读。代码:div{     b
  • 前面已经提到,CSS之所以如此强大,是因为它采用HTML文档结构来决定其样式的应用。但这仅仅只是一方面,因为它只暗示了CSS之所以使用文档结
  • 直接使用word文档已经难不倒大家了,有没有想过用python构建一个word文档写点文章呢?当然这个文章的框架需要我们用代码一点点的建立,
  • 前言发现本站没有一个靠谱的tp6记录行为日志的教程,于是就整理了一下自己在项目中已经投入使用的行为日志中间件的详细配置步骤供大家参考提示:先
  • 目录一、代码分析二、完整代码写在最后想必写毕设的时候,大家都会遇到一个问题,那就是得在明评版的论文里面插入一个独创性声明。就因为这个事情,我
  • 最近一段时间一直比较忙,已经有好几个月没有打理博客了。现将一个最近在项目中制作的一个菜单实例整理出来,共享一下。在后台或OA系统中最常用到的
  • golang.org/x包放到了https://github.com/golang/text中,下载时需要先在本地建立golang.org/
  • 在最近的一个项目需要实现在MySQL单表多关键字模糊查询,但这数个关键字并不一定都存在于某个字段。例如现有table表,其中有title,t
  • 这篇文字讲述如何使用Python把一张完整的大图切割成9份小图片,制作朋友圈九宫格图文分享。原图如下: 我们想要利用这张图制作高逼
  • 下表列出了所有Python语言支持的比较操作符。假设变量a持有10和变量b持有20,则: 例如:试试下面的例子就明白了所有的Pyt
  • 在Django中对于基于函数的视图我们可以 @csrf_exempt 注解来标识一个视图可以被跨域访问。那么对于基于类的视图,我们应该怎么办
  • 据国外媒体报道,相较于IE8浏览器,微软最新一代浏览器IE9的最大改进就是硬件加速HTML5。微软承诺,通过利用IE9中的硬件加速功能,开发
  • 开发网站,往往需要用数据库保存数据。我们该如何创建数据库与创建数据表呢?方法其实很简单,下面就由小编教你如何用Navicat for MyS
  • 今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家
  • 最近,带领我的学生进行一个URTP项目设计,需要进行人脸识别。由于现在的OpenCV已经到了2.X版本,因此就不想用原来的1.X版本的代码,
  • 本文实例为大家分享了python实现flappy bird的简单代码,供大家参考,具体内容如下import pygamefrom pygam
  • 方法1:使用Python中自带的print输出带有颜色或者背景的字符串书写语法print(\033[显示方式;前景色;背景色m输出内容\03
  • 变量(Variable)可以看成一个小箱子,专门用来“盛装”程序中的数据。每个变量都拥有独一无二的名字,通过变量的名字就能找到变量中的数据。
手机版 网络编程 asp之家 www.aspxhome.com