中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中matplotlib實現隨鼠標滑動自動標注的方法

發布時間:2020-08-01 09:49:12 來源:億速云 閱讀:568 作者:小豬 欄目:開發技術

這篇文章主要講解了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()

效果演示:

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實現隨鼠標滑動自動標注的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南华县| 沙河市| 灌阳县| 镇沅| 凉城县| 南开区| 吴旗县| 东阿县| 沂南县| 九龙城区| 宣汉县| 莱西市| 安新县| 南宁市| 工布江达县| 邓州市| 西乡县| 娱乐| 偃师市| 凤庆县| 平遥县| 庆元县| 永顺县| 海晏县| 凉城县| 宾阳县| 武穴市| 石城县| 古浪县| 太仆寺旗| 夏邑县| 中山市| 綦江县| 内乡县| 静安区| 综艺| 和平县| 五河县| 天镇县| 涞源县| 安化县|