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中reload(module)的用法示例详解
Sep 15 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
python字典操作实例详解
Nov 16 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
使用C++扩展Python的功能详解
Jan 12 Python
python字典快速保存于读取的方法
Mar 23 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
Django用户认证系统如何实现自定义
Nov 12 Python
解决pytorch读取自制数据集出现过的问题
May 31 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
PHP 调试工具Debug Tools
2011/04/30 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
python实现ip代理池功能示例
2019/07/05 Python
OpenCV 模板匹配
2019/07/10 Python
django 单表操作实例详解
2019/07/30 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
编写python代码实现简单抽奖器
2020/10/20 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
信息管理与信息系统专业求职信
2014/06/21 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
活动简报范文
2015/07/22 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
详解Python常用的魔法方法
2021/06/03 Python