背景
在Python程式語言中,matplotlib是一種常用的用於數據可視化的繪圖庫,它提供了一套和matlab相似的命令API,開發者可以僅需幾行代碼,便可生成如直方圖,功率譜,條形圖,錯誤圖,散點圖等圖形,適用於交互式繪圖,而且也可以方便地將它作為繪圖控制項嵌入到GUI應用程式中,並能夠生成出版質量級別的圖形,為程序開發者提供了便利。應該說,matplotlib庫在靜態圖形的表現方面非常強大,但其缺點也比較明顯,如在動態圖形的繪製上,其刷新速度不盡人意。如在實時數據採集場合,要求高速實時繪圖,這時候很難滿足我們的要求,當然,可以通過其它方式如調用其提供的底層API自己編程優化,可以提高其繪圖速度,但難度相對較大。
這兒介紹另一種功能強大的2D/3D繪圖庫——pyqtgraph,它是一種建立在PyQt4/PySide和numpy庫基礎之上的純Python圖形GUI庫,在數學、科學和工程領域都有著廣泛的應用。儘管該庫完全用python編寫,但內部由於使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此,它在大數據量的數字處理和快速顯示方面有著巨大的優勢,它適合於需要快速繪圖更新、視頻或實時交互性的操作場合。另外,它不僅為各種數據提供了快速可交互式的圖形顯示,同時也提供了用於快速開發應用程式的各種小工具,如屬性樹、流程圖等小部件。
下面通過例子說明該庫的使用方法。
最簡單的編程例子
先看一個最簡單的例子,代碼如下圖所示:
代碼中,導入了numpy庫用於產生要畫的波形數據,繪圖部分只有第16行一行代碼,使用了pyqtgraph的plot()函數就簡單的繪製了一個圖形。另外,第13行使用pyqtgraph庫中的函數mkQApp()創建一個應用程式實例,第17行app.exec_()函數運行實例,進入消息循環。運行結果如下所示:
實時刷新波形的例子
下面舉一個複雜一點的例子,這個例子在一個波形圖上實時連續刷新兩條曲線,分別為正弦曲線和餘弦曲線,運行結果的動態圖如下:
主要實現代碼如下:
代碼分析如下:
1、第13行,創建應用程式實例app
2、第15-17行,創建一個圖形顯示窗口win,設置窗口屬性,如窗口標題、窗口大小等
3、第19-24行,在win上添加一個畫圖對象p,設置各種屬性,如網格,X、Y軸標題、圖形標題、添加圖例等
4、第26-27行,在p上創建兩條曲線curve1、curve2,可通過參數設置曲線顏色、名稱等屬性
5、第29-33行,設置正弦、餘弦兩條曲線的參數信息
6、第35-39行,定時器超時函數plotData,內部使用setData函數更新curve1、curve2的數據並刷新繪圖
7、第41-43行,定義一個定時器timer,並連接超時函數plotData,每隔50ms刷新一次波形
8、第45行,使用app.exec_()函數運行實例,進入消息循環
備註
上面的例子給出了使用pyqtgraph庫繪製圖形的一般步驟,相對來說比較簡單。另外,使用pyqtgraph創建的圖形顯示窗口也可以方便嵌入到其它應用程式界面中,以便實現更複雜的圖形顯示類的界面程序。
歡迎加關注,共同交流。