python中matplotlib实现随鼠标滑动自动标注代码

 更新时间:2020年04月23日 11:23:31   作者:qq_38778838  
这篇文章主要介绍了python中matplotlib实现随鼠标滑动自动标注代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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()

效果演示:

补充知识: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采集爬取微信公众号历史数据

    这篇文章主要介绍了基于Python采集爬取微信公众号历史数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • pycharm2021激活码使用教程(永久激活亲测可用)

    pycharm2021激活码使用教程(永久激活亲测可用)

    pycharm2021激活码是一个可以轻松帮助用户免费激活pycharm2021.1软件的文件,虽然说pycharm现在只是推出了2021.1的EAP版,但是如果你想先率先体验一波,那么就可以利用小编提供的这个激活码来进行使用啦,并这个激活码是永久有效的
    2021-03-03
  • Django自定义认证方式用法示例

    Django自定义认证方式用法示例

    这篇文章主要介绍了Django自定义认证方式用法,结合实例形式分析了Django自定义认证的创建、设置及功能实现技巧,需要的朋友可以参考下
    2017-06-06
  • python 3.6.4 安装配置方法图文教程

    python 3.6.4 安装配置方法图文教程

    这篇文章主要为大家详细介绍了python 3.6.4 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 使用Python进行数独求解详解(二)

    使用Python进行数独求解详解(二)

    对于利用Python求解数独,我们可以采用回溯算法实现一个简单的版本。本文将此基础上,通过改进来提升数独问题求解算法的性能。需要的可以参考一下
    2022-02-02
  • python中图像通道分离与合并实例

    python中图像通道分离与合并实例

    今天小编就为大家分享一篇python中图像通道分离与合并实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 详解Django框架中用context来解析模板的方法

    详解Django框架中用context来解析模板的方法

    这篇文章主要介绍了详解Django框架中用context来解析模板的方法,Django是重多高人气Python框架中最为著名的一个,需要的朋友可以参考下
    2015-07-07
  • 使用Python+selenium实现第一个自动化测试脚本

    使用Python+selenium实现第一个自动化测试脚本

    这篇文章主要介绍了使用Python+selenium实现第一个自动化测试脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 利用 Python 开发一个 Python 解释器

    利用 Python 开发一个 Python 解释器

    这篇文章主要介绍了利用 Python 开发一个 Python 解释器,在本文中,我们将设计一个可以执行算术运算的解释器。下面我们大家一起来看看吧</P><P>
    2022-01-01
  • Zabbix实现微信报警功能

    Zabbix实现微信报警功能

    这篇文章主要介绍了Zabbix实现微信报警的相关资料,本文图文并茂介绍的非常详细,需要的朋友可以参考下
    2016-10-10

最新评论