admin 發表於 2023-4-10 03:43:07

pyQtGraph

import numpy as np
from PyQt5 import QtWidgets, QtCore
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui# 這個宣告會引用 PyQt 的 QtGui, QtCore

# define the data
title = "中文Basic pyqtgraph plot"

x = np.linspace(-3 * np.pi, 3 * np.pi, 1000)
y1 = np.sin(x)
y2 = np.cos(x)
y = y1 + y2

# create plot window object
plt = pg.plot()

# some regular settings
plt.showGrid(x=True, y=True)
plt.addLegend(offset=(150, 5), labelTextSize="16pt")
plt.setLabel('left', 'y')# <font>μ</font>
plt.setLabel('bottom', 'x')# <math>sin(x)
# plt.setXRange(0, 10)
plt.setYRange(-2.5, 2.5)
plt.setWindowTitle(title)

plt.plot(x, y1, pen='g', name='sin(x)')
plt.plot(x, y2, pen='r', name='cos(x)')

pen = pg.mkPen(color='y', width=3, style=QtCore.Qt.PenStyle.DashLine)# style = QtCore.Qt.DotLine
plt.plot(x, y, pen=pen, name='sin(x)+cos(x)')

# main method
if __name__ == '__main__':
    # Create the main application instance
    # QtGui.QApplication.instance().exec()
    import sys

    # app = QtGui.QApplication.instance()
    app = QtWidgets.QApplication.instance()
    sys.exit(app.exec())
範例 1:繪製函數 https://s0.wp.com/latex.php?latex=f%28x%29+%3D+sin%28x%29%2Bcos%28x%29&bg=ffffff&fg=333333&s=0&c=20201002


注意事項:
[*]pyqtgraph 的繪圖方式與最常見的 matplotlib 套件非常不同。首先,pyqtgraph 必須附著於一個應用視窗(Application)上。在下列的示範程式中,最後 app = QtGui.QApplication.instance() 開啟一個視窗程序,並透過 app.exec() 開啟並將視窗留在螢幕上。一般使用 sys.exit(app.exec()) 除了開啟視窗外,也讓系統負責視窗結束後的善後工作。事實上,動用了 QtGui 來開啟視窗,已經牽涉到 PyQt 內的類別了(Class)。也就是要安裝過 PyQt6(或較早版本的 PyQt5 或 PySide6, PySide4 等),不單是 pyqtgraph 的事情了。
[*]pyqtgraph 與 numpy 合作無間,效率高。
[*]示範程式故意用 plt = pg.plot() 建立一個繪圖視窗的物件並以 plt 為名,延續 matplotlib 的使用習慣。利用變數 plt 可以為視窗加上線條與其他座標圖上的標示,包括 legend。
[*]plot 是繪製線條標準的指令,而為線條物件加入修飾的方式與 matplotlib 的方式大不同,此處示範 pen 屬性的用法,包括直接給于顏色,或透過 mkPen 來指定各項屬性,譬如顏色(color)、粗細(width)、虛線(linestyle)…等。
[*]在下列程式碼製作畫筆的 mkPen() 指令,style=QtCore.Qt.PenStyle.DashLine 指定了線條為虛線。若使用 PyQt5 則是 PyQt5.QtCore.Qt.DashLine。
[*]pyqtgraph 擅長互動的特性。讀者可以用滑鼠拖曳圖形往不同方式移動、可以放大或縮小圖形、按滑鼠右鍵還用各種功能。這個特點是 matplotlib 沒有的。
在PyQt的应用程序中集成图绘功能,有很多种方案,比如:

OpenGL:一个功能强大的二维三维专业图形绘制工具;
Matplotlib:Python中很经典的图形绘制模块;
PyQtGraph:基于Qt平台,提供交互的数据显示图形绘制。
各种图形绘制方案都有自己的优点,但是论与PyQt程序的融合度,还是当属PyQtGraph。PyQtGraph用于图形绘制有很多的优势:

拥有丰富的图形种类;
能够快速地实时更新绘图数据;
能够进行交互式的操作;
多种标记功能;
……在PyQtGraph中,有几种绘制图形的方法:

pyqtgraph.plot():创建一个新的绘图窗口来显示数据;
PlotWidget.plot():将一组新的数据添加到现有的绘图小部件;
PlotItem.plot():将一组新的数据添加到现有的绘图小部件;
GraphicsLayout.addPlot():添加一个新的图形到一个图形层中;



頁: [1]
查看完整版本: pyQtGraph