python中matplotlib实现随鼠标滑动自动标注代码

作者:qq_38778838 时间:2023-09-02 10:49:47 

Python+matplotlib进行鼠标交互,实现动态标注,数据可视化显示,鼠标划过时画一条竖线并使用标签来显示当前值。

Python3.6.5,代码示例:


import matplotlib.pyplot as plt
import numpy as np

def Show(y):
#参数为一个list

len_y = len(y)
x = range(len_y)
_y = [y[-1]]*len_y

fig = plt.figure(figsize=(960/72,360/72))
ax1 = fig.add_subplot(1,1,1)

ax1.plot(x, y, color='blue')
line_x = ax1.plot(x, _y, color='skyblue')[0]
line_y = ax1.axvline(x=len_y-1, color='skyblue')

ax1.set_title('aaa')
#标签
text0 = plt.text(len_y-1,y[-1],str(y[-1]),fontsize = 10)

def scroll(event):
axtemp=event.inaxes
x_min, x_max = axtemp.get_xlim()
fanwei_x = (x_max - x_min) / 10
if event.button == 'up':
axtemp.set(xlim=(x_min + fanwei_x, x_max - fanwei_x))
elif event.button == 'down':
axtemp.set(xlim=(x_min - fanwei_x, x_max + fanwei_x))
fig.canvas.draw_idle()
#这个函数实时更新图片的显示内容
def motion(event):
try:
temp = y[int(np.round(event.xdata))]
for i in range(len_y):
_y[i] = temp
line_x.set_ydata(_y)
line_y.set_xdata(event.xdata)
######
text0.set_position((event.xdata, temp))
text0.set_text(str(temp))

fig.canvas.draw_idle() # 绘图动作实时反映在图像上
except:
pass

fig.canvas.mpl_connect('scroll_event', scroll)
fig.canvas.mpl_connect('motion_notify_event', motion)

plt.show()

效果演示:

python中matplotlib实现随鼠标滑动自动标注代码

补充知识:matplotlib获取鼠标所在位置的axes

手头的项目遇到一个问题,如何获取鼠标所在位置的axes对应的obspy.core.trace。在绘制axes时,我设置了一个数组用来保存每一个trace所对应的axes,这样比较方便绘制标签。但我的项目需要对绘制的图像做放大缩小以及拖拽,这需要我单独对一个axes来进行相应的操作。那么如何通过axes来获得对应的trace呢?我想了这几个办法:

1.设置一个hash表,记录每一个axes与trace的对应情况,通过鼠标操作传入的event,可以得到当前axes的引用地址,以这个引用地址作为关键字查找hash表,获取对应trace。

2.通过axes引用地址定位到mpl的axes数组,通过axes数组的下标来访问绘制时设置的数组获得trace。

3.获取axes.label的内容,作为关键字去遍历obspy.core.stream,获取trace。

4.通过event获取鼠标位置,在结合画布大小通过计算得到数组下标,在访问绘制时设置的数组可以得到trace

前三种方法都不能保证一定能获取到trace,并且有出错的风险,但是如果可以实现,可靠性是大于最后一种,但是最后一种实现起来是最简单的,明天我再思考如何通过matplotlib的鼠标事件来获取对应的trace

后来发现,可以采用第三种方法。访问event.inaxes来获得

来源:https://blog.csdn.net/qq_38778838/article/details/89040722

标签:python,matplotlib,鼠标,标注
0
投稿

猜你喜欢

  • 模拟兼容性的 addDOMLoadEvent 事件

    2009-07-31 12:37:00
  • 轻量级的Web框架Flask 中模块化应用的实现

    2021-04-07 13:08:16
  • redis数据库及与python交互用法简单示例

    2024-01-18 03:05:06
  • 讲解Python中for循环下的索引变量的作用域

    2022-11-27 18:41:05
  • 利用pyuic5将ui文件转换为py文件的方法

    2023-03-20 05:01:43
  • 一个asp分页源代码例子

    2007-09-19 12:25:00
  • 简单谈谈python中的语句和语法

    2023-03-03 12:03:13
  • CSS的优先级与特殊性

    2008-06-24 11:36:00
  • python制作图片缩略图

    2023-08-23 18:49:32
  • 简单的ASP生成HTML并分页程序

    2009-07-20 12:32:00
  • 这可能是最好玩的python GUI入门实例(推荐)

    2021-02-01 15:33:42
  • python之django路由和视图案例教程

    2021-06-24 09:48:09
  • 上手简单,功能强大的Python爬虫框架——feapder

    2023-11-28 15:50:39
  • 利用Python2下载单张图片与爬取网页图片实例代码

    2023-06-25 00:57:22
  • 详解小程序循环require之坑

    2024-02-24 03:38:29
  • 使用Python操作MySQL的一些基本方法

    2024-01-18 19:16:55
  • Python格式化文本段落之textwrap库

    2023-11-23 00:40:56
  • 界面设计10条可用性方面的启发

    2010-04-06 17:22:00
  • go GCM gin中间件的加密解密文件流处理

    2024-04-26 17:32:36
  • python 使用tkinter+you-get实现视频下载器

    2023-08-15 18:40:25
  • asp之家 网络编程 m.aspxhome.com