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


Posted in Python onApril 23, 2020

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来获得

以上这篇python中matplotlib实现随鼠标滑动自动标注代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现下载pop3邮件保存到本地
Jun 19 Python
用于业余项目的8个优秀Python库
Sep 21 Python
python使用epoll实现服务端的方法
Oct 16 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
Jun 13 Python
python匿名函数用法实例分析
Aug 03 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
python属于软件吗
Jun 18 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
Python学习之时间包使用教程详解
Mar 21 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 #Python
Flask模板引擎Jinja2使用实例
Apr 23 #Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 #Python
在matplotlib中改变figure的布局和大小实例
Apr 23 #Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 #Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 #Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 #Python
You might like
PHP写MySQL数据 实现代码
2009/06/15 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
php生成gif动画的方法
2015/11/05 PHP
php单链表实现代码分享
2016/07/04 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
js实现无缝滚动图
2017/02/22 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
wxPython实现分隔窗口
2019/11/19 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
学生打架检讨书大全
2014/01/23 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
大学生入党群众意见书
2015/06/02 职场文书
元宵节晚会主持词
2015/07/01 职场文书
2019新员工心得体会
2019/06/25 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
Python破解极验滑动验证码详细步骤
2021/05/21 Python
Pytorch 如何实现常用正则化
2021/05/27 Python
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
Pillow图像处理库安装及使用
2022/04/12 Python