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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
简单分析Python中用fork()函数生成的子进程
May 04 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
python实现汽车管理系统
Nov 30 Python
python3去掉string中的标点符号方法
Jan 22 Python
python协程之动态添加任务的方法
Feb 19 Python
python3 xpath和requests应用详解
Mar 06 Python
python实现梯度法 python最速下降法
Mar 24 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 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的大小写敏感问题整理
2011/12/29 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
PHP连接access数据库
2015/03/27 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
跟老齐学Python之网站的结构
2014/10/24 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
Python常见异常分类与处理方法
2017/06/04 Python
Numpy掩码式数组详解
2018/04/17 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
学生社团文化节开幕式主持词
2014/03/28 职场文书
心理健康活动总结
2014/04/30 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
2014会计年终工作总结
2014/12/20 职场文书
不同意离婚上诉状
2015/05/23 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python