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
投稿

猜你喜欢

  • ASP和MYSQL开发网站的注意事项

    2009-08-21 13:23:00
  • 如何利用python实现列表嵌套字典取值

    2023-07-08 02:16:50
  • ASP编程代码:隐藏图片的真实地址

    2008-10-19 17:14:00
  • MySQL十条特殊技巧

    2007-09-17 12:33:00
  • python中as用法实例分析

    2023-08-11 01:12:26
  • 关于 MediaPlayer 播放器参数详解

    2008-08-10 18:33:00
  • 如何确定Oracle数据库表重复的记录

    2010-07-26 13:23:00
  • js控制table合并具体实现

    2023-08-05 11:20:12
  • ASP+JAVAScript:复杂表单的动态生成与验证

    2007-10-06 21:51:00
  • JavaScript+canvas实现七色板效果实例

    2023-08-09 09:48:10
  • 如何让对方在线查看我的程序代码?

    2010-05-13 16:34:00
  • MySQL 数据库语句优化的原则

    2010-01-20 10:11:00
  • 详解Django将秒转换为xx天xx时xx分

    2023-06-14 22:52:12
  • 详解Go语言中关于包导入必学的 8 个知识点

    2023-07-09 05:38:11
  • sql如何在Access中选择指定日期前的记录?

    2010-06-17 12:47:00
  • 你是真正的用户体验设计者吗? Ⅴ

    2008-04-19 18:32:00
  • IE8的一些CSS hack

    2008-03-17 13:08:00
  • ASP XMLDom在服务器端操作XML文件的主要方法和实现

    2011-03-09 11:09:00
  • 配置SQL Server以允许远程连接

    2010-03-08 13:12:00
  • prototype-1.4.0注释版源代码下载

    2007-09-30 14:06:00
  • asp之家 网络编程 m.aspxhome.com