matplotlib部件之矩形選區(qū)(RectangleSelector)的實(shí)現(xiàn)
矩形選區(qū)概述
矩形選區(qū)是一種常見(jiàn)的對(duì)象選擇方式,這個(gè)名詞最常見(jiàn)于Photoshop中,用于在一個(gè)子圖選擇鼠標(biāo)拖動(dòng)的矩形區(qū)域中的元素,在matplotlib中的矩形選區(qū)屬于部件(widgets),matplotlib中的部件都是中性(neutral )的,即與具體后端實(shí)現(xiàn)無(wú)關(guān)。
矩形選區(qū)具體實(shí)現(xiàn)定義為matplotlib.widgets.RectangleSelector類,繼承關(guān)系為:Widget->AxesWidget->_SelectorWidget->RectangleSelector。
RectangleSelector類的簽名為class matplotlib.widgets.RectangleSelector(ax, onselect, drawtype='box', minspanx=0, minspany=0, useblit=False, lineprops=None, rectprops=None, spancoords='data', button=None, maxdist=10, marker_props=None, interactive=False, state_modifier_keys=None)
RectangleSelector類構(gòu)造函數(shù)的參數(shù)為:
- ax:矩形選區(qū)生效的子圖,類型為matplotlib.axes.Axes的實(shí)例。
- onselect:矩形選區(qū)完成后執(zhí)行的回調(diào)函數(shù),函數(shù)簽名為def onselect(eclick: MouseEvent, erelease: MouseEvent),eclick和erelease分別為開始和結(jié)束選區(qū)時(shí)的鼠標(biāo)事件。
- drawtype:矩形選區(qū)的外觀,取值范圍為{"box", "line", "none"},"box"為矩形框,"line"為矩形選區(qū)對(duì)角線,"none"無(wú)外觀,類型為字符串,默認(rèn)值為"box"。
- lineprops:當(dāng)drawtype == "line"時(shí)線條的屬性,默認(rèn)值為dict(color="black", linestyle="-", linewidth=2, alpha=0.5)。
- rectprops:當(dāng)drawtype == "box"時(shí)矩形框的屬性,默認(rèn)值為dict(facecolor="red", edgecolor="black", alpha=0.2, fill=True)。
- button:設(shè)置可用于觸發(fā)矩形選區(qū)的鼠標(biāo)鍵,MouseButton列表,默認(rèn)為所有鼠標(biāo)鍵。
- interactive:是否允許交互,布爾值,默認(rèn)為False,即選擇完成后選區(qū)即消失,值為True時(shí),選區(qū)選擇完成后不消失,除非按快捷鍵解除。
- state_modifier_keys:快捷鍵設(shè)置,類型為字典。
- “move”: 移動(dòng)已存在的選區(qū),默認(rèn)沒(méi)有修飾鍵。
- “clear”:清除現(xiàn)有選區(qū),默認(rèn)為 "escape",即esc鍵。
- “square”:正方形選區(qū),默認(rèn)為"shift"。
- “center”:以當(dāng)前點(diǎn)作為選區(qū)的中心點(diǎn),默認(rèn)為 "ctrl"。
- “square” 和 “center” 可以組合使用。
案例
官方案例,https://matplotlib.org/gallery/widgets/rectangle_selector.html
案例說(shuō)明
拖動(dòng)鼠標(biāo)畫出矩形選區(qū),默認(rèn)為交互模式,顯示選區(qū)框,按esc鍵取消選區(qū),控制臺(tái)顯示選區(qū)的坐標(biāo)和使用的鼠標(biāo)鍵。按t鍵切換矩形選區(qū)功能的激活狀態(tài),非激活狀態(tài)矩形選區(qū)功能不生效。
控制臺(tái)輸出:
(0.74, -0.38) --> (8.90, 0.75)
The buttons you used were: 1 1
代碼分析
from matplotlib.widgets import RectangleSelector import numpy as np import matplotlib.pyplot as plt # 矩形選區(qū)選擇時(shí)的回調(diào)函數(shù) def line_select_callback(eclick, erelease): """ Callback for line selection. *eclick* and *erelease* are the press and release events. """ x1, y1 = eclick.xdata, eclick.ydata x2, y2 = erelease.xdata, erelease.ydata print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})") print(f" The buttons you used were: {eclick.button} {erelease.button}") # 激活狀態(tài)快捷鍵回調(diào)函數(shù),active屬性和set_active方法繼承自_SelectorWidget類 def toggle_selector(event): print(' Key pressed.') if event.key == 't': if RS.active: print(' RectangleSelector deactivated.') RS.set_active(False) else: print(' RectangleSelector activated.') RS.set_active(True) # 繪圖 fig, ax = plt.subplots() N = 100000 # If N is large one can see improvement by using blitting. x = np.linspace(0, 10, N) ax.plot(x, np.sin(2*np.pi*x)) # plot something ax.set_title( "Click and drag to draw a rectangle.\n" "Press 't' to toggle the selector on and off.") # 構(gòu)造矩形選區(qū)實(shí)例,選取外觀為矩形框,鼠標(biāo)鍵為左鍵右鍵有效,允許保留選區(qū) # drawtype is 'box' or 'line' or 'none' RS = RectangleSelector(ax, line_select_callback, drawtype='box', useblit=True, button=[1, 3], # disable middle button minspanx=5, minspany=5, spancoords='pixels', interactive=True) # 綁定鍵盤事件,實(shí)現(xiàn)切換矩形選區(qū)激活狀態(tài)功能 fig.canvas.mpl_connect('key_press_event', toggle_selector) plt.show()
到此這篇關(guān)于matplotlib部件之矩形選區(qū)(RectangleSelector)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)matplotlib 矩形選區(qū)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python數(shù)據(jù)分析之時(shí)間序列分析詳情
這篇文章主要介紹了python數(shù)據(jù)分析之時(shí)間序列分析詳情,時(shí)間序列分析是基于隨機(jī)過(guò)程理論和數(shù)理統(tǒng)計(jì)學(xué)方法,具體詳細(xì)內(nèi)容介紹,需要的小伙伴可以參考一下2022-08-08用python生成mysql數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔
大家好,本篇文章主要講的是用python生成mysql數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01Python3.7基于hashlib和Crypto實(shí)現(xiàn)加簽驗(yàn)簽功能(實(shí)例代碼)
這篇文章主要介紹了Python3.7基于hashlib和Crypto實(shí)現(xiàn)加簽驗(yàn)簽功能,環(huán)境是基于python3.7,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12如何解決cmd運(yùn)行python提示不是內(nèi)部命令
在本篇文章里小編給大家整理了關(guān)于如何解決cmd運(yùn)行python提示不是內(nèi)部命令的相關(guān)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2020-07-07Python實(shí)現(xiàn)繪制自定義形狀的詞云示例
這篇文章主要介紹了Python實(shí)現(xiàn)繪制自定義形狀的詞云示例,通過(guò)將一段文本中出現(xiàn)頻率高的單詞按其出現(xiàn)頻率大小以及顏色深淺排列成一個(gè)詞云圖形,從而更好地展示文本中的信息,需要的朋友可以參考下2022-10-10健身房被搭訕?用python寫了個(gè)小米計(jì)時(shí)器助人為樂(lè)
今天教大家Python圖形界面開發(fā)的相關(guān)知識(shí),文章圍繞著如何實(shí)現(xiàn)一個(gè)小米手機(jī)上的秒表計(jì)時(shí)器功能展開,文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下2021-06-06python打印當(dāng)前文件的絕對(duì)路徑并解決打印為空的問(wèn)題
這篇文章主要介紹了python打印當(dāng)前文件的絕對(duì)路徑并解決打印為空的問(wèn)題,文中補(bǔ)充介紹了python中對(duì)文件路徑的獲取方法,需要的朋友可以參考下2023-03-03使用Python進(jìn)行數(shù)獨(dú)求解詳解(二)
對(duì)于利用Python求解數(shù)獨(dú),我們可以采用回溯算法實(shí)現(xiàn)一個(gè)簡(jiǎn)單的版本。本文將此基礎(chǔ)上,通過(guò)改進(jìn)來(lái)提升數(shù)獨(dú)問(wèn)題求解算法的性能。需要的可以參考一下2022-02-02