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计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
Python中list初始化方法示例
Sep 18 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
Python pygorithm模块用法示例【常见算法测试】
Aug 16 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
Python多图片合并PDF的方法
Jan 03 Python
python解析多层json操作示例
Dec 30 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
Python绘图实现台风路径可视化代码实例
Oct 23 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
python中mongodb包操作数据库
Apr 19 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做推送服务端实现ios消息推送
2013/07/01 PHP
php读取mysql的简单实例
2014/01/15 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
Django实现内容缓存实例方法
2020/06/30 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
程序员经常用到的UNIX命令
2015/04/13 面试题
行政经理岗位职责
2013/11/09 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
教师病假条范文
2015/08/17 职场文书