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下载文件时显示下载进度的方法
Apr 02 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
Python多线程原理与用法实例剖析
Jan 22 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
python实现中文文本分句的例子
Jul 15 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
Pytorch 图像变换函数集合小结
Feb 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
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
javascript如何实现create方法
2019/11/04 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
使用Python对Access读写操作
2017/03/30 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python进程和线程用法知识点总结
2019/05/28 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
keras 读取多标签图像数据方式
2020/06/12 Python
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
《花的勇气》教后反思
2014/02/12 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
个人授权委托书样本
2014/09/13 职场文书