設為首頁收藏本站

艾歐踢論壇

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

搜索
熱搜: 活動 交友 discuz
查看: 220|回復: 0
打印 上一主題 下一主題

pyQtGraph

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2023-4-10 03:43:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. import numpy as np
  2. from PyQt5 import QtWidgets, QtCore
  3. import pyqtgraph as pg
  4. from pyqtgraph.Qt import QtGui  # 這個宣告會引用 PyQt 的 QtGui, QtCore

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

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

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

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

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

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

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

  30.     # app = QtGui.QApplication.instance()
  31.     app = QtWidgets.QApplication.instance()
  32.     sys.exit(app.exec())
複製代碼

範例 1:繪製函數


注意事項:

  • 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():添加一个新的图形到一个图形层中;




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 轉播轉播 分享分享 分享淘帖
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|Archiver|手機版|艾歐踢創新工坊    

GMT+8, 2024-5-17 02:10 , Processed in 0.222062 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表