Matplotlib中給圖片添加一個對話窗口

除了生成靜態圖片用在文章中外,在演示的時候,我們需要實時修改參數來顯示曲線的變化,那麼添加一個對話框就十分必要了。通過實時修改數據,及時對比,可以讓人獲得更加深刻的印象。無論在演示還是教學中,這一方法都十分必要。

Matplotlib中有多種實現簡單對話窗口的方式,很多都依賴於圖形界面的後端。還好Matplotlib還提供一種不依賴於後端,雖然簡陋,但是非常實用的工具介面,叫做widgets。利用其中的一些對象,可以滿足基本的需求。這一部分就來介紹如何利用一個叫做TextBox的對話框來實現交互。

在widgets中,所有的交互按鈕,對話框等,都是利用axes來實現的。也就是在圖形上畫一個按鈕,對話框,或者一個滑動條,都是建立一個axes,然後將axes對象傳遞給相應的類例如TextBox,再加以包裝,就可以實現。下面就一個對話框為例說明如何一步步實現。

首先要從widgets中導入相應函數,代碼如下。

import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.widgets import TextBoxfig, ax = plt.subplots()

注意TextBox似乎只出現在高於2.0的版本中,具體沒有考證過。

然後我們定義一個函數,這個函數主要是從對話框中獲得一串數字,然後顯示在主標題的位置。

def submit(text): plt.suptitle(text) plt.draw()

下面代碼中axbox相當於一個新的坐標系,傳遞給TextBox後,就生成了一個對話框,然後調用對話框的on_submit函數,用來接收字元。

axbox = plt.axes([0.1, 0.05, 0.6, 0.1])text_box = TextBox(axbox, rtitle=Hello)text_box.on_submit(submit)plt.show()

將以上代碼結合在一起就是如下的結果。


推薦閱讀:

用腳本構建的程序是怎麼保持後期重構的健壯性的?
Python 的迭代器和生成器
為什麼Python類成員的調用和聲明必須有"this"?
Python初學者好玩案例(一):最短的抓取網頁圖片代碼,只有10行
Python實現PCA降維

TAG:Matplotlib | Python | 數據可視化 |