【pyqtgraph繪圖】在pyqtgraph中繪圖


解讀pyqtgraph官方API-在pyqtgraph中繪圖

參考:

http://www.pyqtgraph.org/documentation/plotting.html

在pyqtgraph中繪圖

在pyqtgraph中繪制數據有以下幾種基本方法:

所有這些都將接受控制繪圖數據如何解釋和顯示的相同基本參數:

  • x - 可選的X數據; 如果未指定,則將自動生成一系列整數。
  • y - Y數據。
  • pen - 繪制繪圖線時使用的筆,當 None 時線不可用 。
  • symbol - 描述用於每個點的符號形狀的字符串。可選地,這也可以是每個點具有不同符號的字符串序列。
  • symbolPen - 繪制符號輪廓時使用的筆(或筆的序列)。
  • symbolBrush - 填充符號時使用的畫筆(或畫筆序列)。
  • fillLevel - 將繪圖曲線下的區域填充到此Y值。
  • brush - 在曲線下填充時使用的畫筆。

有關這些參數的演示,請參閱“繪圖” 示例

所有上述函數還返回創建的對象的句柄,允許進一步修改繪圖和數據。 

繪圖類的組織

在顯示繪圖數據時有幾個類被激活。這些類中的大多數都是自動實例化的,但了解它們的組織方式和相互關聯是很有用的。PyQtGraph主要基於Qt的GraphicsView框架 - 如果您還不熟悉它,那么值得一讀(但不是必需的)。最重要的是:

1)Qt GUI由QWidgets組成,

2)一個名為QGraphicsView的特殊小部件用於顯示復雜的圖形,

3)QGraphicsItems定義在QGraphicsView中顯示的對象。

  • 數據類(QGraphicsItem的所有子類)
    • PlotCurveItem - 顯示給定x,y數據的繪圖線
    • ScatterPlotItem - 顯示給定x,y數據的點
    • PlotDataItem - 組合PlotCurveItem和ScatterPlotItem。上面討論的繪圖函數創建了這種類型的對象。
  • 容器類(QGraphicsItem的子類;包含其他QGraphicsItem對象,必須在GraphicsView中查看)
    • PlotItem - 包含用於顯示數據的ViewBox以及用於顯示軸和標題的AxisItems和標簽。這是一個QGraphicsItem子類,因此只能在GraphicsView中使用
    • GraphicsLayout - QGraphicsItem子類,顯示項目網格。這用於一起顯示多個PlotItem。
    • ViewBox - 用於顯示數據的QGraphicsItem子類。用戶可以使用鼠標縮放/平移ViewBox的內容。通常,所有PlotData / PlotCurve / ScatterPlotItem都在ViewBox中顯示。
    • AxisItem - 顯示軸值,刻度和標簽。最常用於PlotItem。
  • 容器類(QWidget的子類;可以嵌入在PyQt GUI中)
    • PlotWidget - GraphicsView的子類,顯示單個PlotItem。PlotItem提供的大多數方法也可以通過PlotWidget獲得。
    • GraphicsLayoutWidget - QWidget子類顯示單個GraphicsLayoutItem。GraphicsLayoutItem提供的大多數方法也可以通過GraphicsLayoutWidget獲得。
_images / plottingClasses.png

例子效果:

完整代碼:

from PyQt5.QtWidgets import QPushButton,QWidget,QApplication,QGridLayout,QListWidget,QLineEdit
import pyqtgraph as pg
import sys
import numpy as np


class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
        self.linePlot()
        self.scatterPlot()
        self.three_curves()

    def initUI(self):
        self.setGeometry(400,400,800,620)
        self.setWindowTitle("pyqtgraph快速入門")

        ## 創建一些小部件放在頂級窗口中
        btn = QPushButton('press me')
        text = QLineEdit('enter text')
        listw = QListWidget()
        listw.addItems(["aa", "bb", "cc"])

        self.gridLayout = QGridLayout(self)
        ## 將部件添加到布局中的適當位置
        self.gridLayout.addWidget(btn, 0, 0)
        self.gridLayout.addWidget(text, 1, 0)
        self.gridLayout.addWidget(listw, 2, 0)

        self.setLayout(self.gridLayout)

    def linePlot(self):
        plt1 = pg.PlotWidget()
        plt1.plot([i for i in range(10)], [i * i for i in range(10)])
        self.gridLayout.addWidget(plt1, 0, 1, 1, 1)

    def scatterPlot(self):
        plt2 = pg.PlotWidget()
        x = np.random.normal(size=1000)
        y = np.random.normal(size=1000)
        plt2.plot(x, y, pen=None, symbol="o")
        self.gridLayout.addWidget(plt2, 1, 1, 1, 1)

    def three_curves(self):
        plt3 = pg.PlotWidget(title="Three plot curves")
        x = np.arange(1000)
        y = np.random.normal(size=(3, 1000))
        for i in range(3):
            plt3.plot(x, y[i], pen=(i, 3))  ## setting pen=(i,3) 自動創建3個不同顏色的筆
        self.gridLayout.addWidget(plt3, 2, 1, 1, 1)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

 

 

 

【微語】堅持下去,並非我們真的堅強,而是我們別無選擇  ---丘吉爾


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM