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标准库之itertools库的使用方法
Sep 07 Python
Python模拟三级菜单效果
Sep 11 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Python中property属性实例解析
Feb 10 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
Python进程池Pool应用实例分析
Nov 27 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
Python pip安装模块提示错误解决方案
May 22 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
python文件与路径操作神器 pathlib
Apr 01 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
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP连接MongoDB示例代码
2012/09/06 PHP
JavaScript类属性的访问方式详解
2014/02/11 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python 获取url中的参数列表实例
2018/12/18 Python
基于Python实现用户管理系统
2019/02/26 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
员工薪酬福利制度
2014/01/17 职场文书
迎新晚会邀请函
2014/02/01 职场文书
期末评语大全
2014/05/04 职场文书
跳蚤市场口号
2014/06/13 职场文书
收入证明范本
2015/06/12 职场文书
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电