1. 程式人生 > 其它 >pyqtgraph資料視覺化2:使用PyQtGraph繪製圖形的6種方法(轉載)

pyqtgraph資料視覺化2:使用PyQtGraph繪製圖形的6種方法(轉載)

對於一個圖形的繪製,在PyQtGraph中有很多中方法可以實現。比如可以直接使用PyQtGraph的plot()方法繪製,或者是建立一個網格視窗,再其中新增繪製圖形等。下面我們就一一瞭解一下PyQtGraph的繪製圖形方法。

首先利用numpy模組建立兩個隨機陣列,用來作為圖形繪製的資料:

import pyqtgraph as pg
import numpy as np

x = np.random.random(50)
a = np.random.random(8)

最簡單直接的plot()

在引入pyqtgraph模組之後,直接使用其plot()方法就可以快速的繪製一個圖形,程式碼如下所示。

def pg_plot():
    app = pg.QtGui.QApplication([])
    pg.plot(x,title='州的先生zmister.com PyQtGraph教程 - plot()方法')
    app.exec()

我們在pyqtgraph模組的plot()方法中傳入了陣列x,並設定了其title引數,執行這個函式,得到的圖形如下所示:

使用plot()方法在視窗中繪製多個線條

如果我們有多個數組,需要將所有的陣列資料繪製在圖形中,同樣可以直接使用plot()方法,但是卻不是像上一個例子中一樣使用兩次plot()方法,因為這樣會生成兩個圖形視窗,程式碼如下所示:

def pg_plot():
    app = pg.QtGui.QApplication([])
    pg.plot(x,title='州的先生zmister.com PyQtGraph教程 - plot()方法 x陣列')
    pg.plot(a, title='州的先生zmister.com PyQtGraph教程 - plot()方法 a陣列')
    app.exec()

執行上面的函式,我們將會得到兩個圖形視窗,結果如下圖所示:

如果需要使用plot()方法在同一個圖形中繪製多個數據,需要先將pyqtgraph的plot()方法例項化,然後再使用例項化後的plot的plot()方法進行圖形繪製,程式碼如下所示:

def pg_plot_add():
    plot = pg.plot(title='州的先生zmister.com PyQtGraph教程 - plot()方法繪製兩條線')
    plot.plot(x)
    plot.plot(a,pen='r')
    pg.QtGui.QGuiApplication.exec()

執行上述函式,最後得到的圖形視窗如下圖所示:

通過GraphicsWindow方法繪製圖形

通過pyqtgraph模組的GraphicsWindow方法,我們可以建立一個空的圖形視窗,然後使用其addplot()方法新增圖形。程式碼如下所示:

def pg_windows_addplot():
    win = pg.GraphicsWindow(title="州的先生zmister.com PyQtGraph教程")
    plot = win.addPlot(title='視窗繪製圖形')
    plot.plot(x)
    pg.QtGui.QApplication.exec()

執行上述函式,得到的會是一個有圖形視窗名和圖形名稱的圖形,結果如下圖所示:

在GraphicsWindow方法中新增子圖

如同在GraphicsWindow中建立一個圖形,繼續使用addplot()方法,可以在圖形視窗中繼續新增一個子圖,程式碼如下所示:

def pg_windows_addplot():
    win = pg.GraphicsWindow(title="州的先生zmister.com PyQtGraph教程")
    plot = win.addPlot(title='視窗繪製圖形')
    plot.plot(x)
    plot2 = win.addPlot(title='繪製子圖')
    plot2.plot(a)
    pg.QtGui.QApplication.exec()

執行上述函式,會得到一個包含兩個子圖的圖形視窗,結果如下所示:

通過GraphicsLayout圖形層方法繪製圖形

通過GraphicsLayout圖形層方法繪製圖形的過程相較於前述的方法,稍顯複雜。
首先通過例項化pyqtgraph的GraphicsView()方法,建立一個圖形檢視;
然後通過例項化pyqtgraph的GraphicsLayout()方法,建立一個圖形層;
再設定圖形檢視的中心層為剛剛建立的圖形層,並設定顯示圖形檢視。
最後使用圖形層的addplot()方法新增一個圖形,再將使用圖形的plot()方法將圖形繪製出來。
程式碼如下所示:

def pg_graphicsLayout_plot():
    app = pg.QtGui.QApplication([])
    view = pg.GraphicsView()
    l = pg.GraphicsLayout()
    view.setCentralItem(l)
    view.show()
    p1 = l.addPlot(title='州的先生zmister.com PyQtGraph教程 - 通過圖形層繪製圖形')
    p1.plot(x)
    app.exec()

執行上述函式,得到的圖形視窗如下所示:

使用PlotWidget繪製圖形

使用pyqtgraph的PlotWidget方法繪製圖形與直接使用plot()方法繪製圖形有些許類似,程式碼如下所示:

def pg_plotwidget_plot():
    app = pg.QtGui.QApplication([])
    pw = pg.PlotWidget(title='州的先生zmister.com PyQtGraph教程 - 通過圖形部件繪製圖形')
    pw.plot(x)
    pw.show()
    app.exec()

執行上述程式,得到的圖形視窗如下所示:

通過PlotItem方法繪製圖形

對PlotItem方法的使用與圖形層GraphicsLayout方法的使用基本一致,程式碼如下所示:

def pg_plotitem_plot():
    app = pg.QtGui.QApplication([])
    xx = pg.GraphicsView()
    plot = pg.PlotItem(title='州的先生zmister.com PyQtGraph教程 - 通過圖形部件繪製圖形')
    plot.plot(x)
    xx.setCentralWidget(plot)
    xx.show()
    app.exec()

執行上述函式,得到的圖形視窗如下所示:

最後

上面介紹了6種在pyqtgraph中繪製圖形的方法,不知道各位學會了沒有:)

文章版權所有:

# coding:utf-8
import pyqtgraph as pg
import numpy as np

x = np.random.random(50)
a = np.random.random(8)

def pg_plot():
    app = pg.QtGui.QApplication([])
    pg.plot(x,title='州的先生zmister.com PyQtGraph教程 - plot()方法')
    app.exec()

def pg_plot1():
    app = pg.QtGui.QApplication([])
    pg.plot(x,title='州的先生zmister.com PyQtGraph教程 - plot()方法 x陣列')
    pg.plot(a, title='州的先生zmister.com PyQtGraph教程 - plot()方法 a陣列')
    app.exec()

    
def pg_plot_add():
    plot = pg.plot(title='州的先生zmister.com PyQtGraph教程 - plot()方法繪製兩條線')
    plot.plot(x)
    plot.plot(a,pen='r')
    pg.QtGui.QGuiApplication.exec()

def pg_windows_addplot():
    win = pg.GraphicsWindow(title="州的先生zmister.com PyQtGraph教程")
    plot = win.addPlot(title='視窗繪製圖形')
    plot.plot(x)
    pg.QtGui.QApplication.exec()

def pg_windows_addplot1():
    win = pg.GraphicsWindow(title="州的先生zmister.com PyQtGraph教程")
    plot = win.addPlot(title='視窗繪製圖形')
    plot.plot(x)
    plot2 = win.addPlot(title='繪製子圖')
    plot2.plot(a)
    pg.QtGui.QApplication.exec()


def pg_graphicsLayout_plot():
    app = pg.QtGui.QApplication([])
    view = pg.GraphicsView()
    l = pg.GraphicsLayout()
    view.setCentralItem(l)
    view.show()
    p1 = l.addPlot(title='州的先生zmister.com PyQtGraph教程 - 通過圖形層繪製圖形')
    p1.plot(x)
    app.exec()

def pg_plotwidget_plot():
    app = pg.QtGui.QApplication([])
    pw = pg.PlotWidget(title='州的先生zmister.com PyQtGraph教程 - 通過圖形部件繪製圖形')
    pw.plot(x)
    pw.show()
    app.exec()

def pg_plotitem_plot():
    app = pg.QtGui.QApplication([])
    xx = pg.GraphicsView()
    plot = pg.PlotItem(title='州的先生zmister.com PyQtGraph教程 - 通過圖形部件繪製圖形')
    plot.plot(x)
    xx.setCentralWidget(plot)
    xx.show()
    app.exec_()

if __name__ == '__main__':
    pg_plotwidget_plot()