Pyqt6—使用 PyQtGraph 简单绘制入门 (一)
一、简单介绍
Python的主要优势之一是探索性数据科学和可视化,使用Pandas,numpy,sklearn等工具进行数据分析和matplotlib绘图。使用 PyQt 构建 GUI 应用程序可让您直接从应用程序中访问所有这些 Python 工具,从而允许您构建复杂的数据驱动应用程序和交互式仪表板。
虽然可以在 PyQt 中嵌入绘图,但体验并不完全原生。对于简单且高度交互的绘图,您可能需要考虑改用 PyQtGraph。PyQtGraph建立在Qt的原生之上,提供更好的绘图性能,特别是对于实时数据,并提供交互性和使用Qt图形小部件轻松自定义绘图的能力。
二、环境搭建
-
Pycharm(https://www.jetbrains.com/pycharm)
-
pyqtgraph 软件包
pip install pyqtgraph
-
Pycharm中如下所示:
三、QT designer设计布局
1.新建 MainWindow 窗体
2.添加占位符部件
由于 PyQtGraph 绘图小部件没有合适的基类,我们将使用 basic 作为我们的占位符。选择 小部件 从左侧边栏中并将其放在窗口中央。QWidget
。给小部件起个名字,“graphWidget”就可以了。这只是一个在代码中引用元素的标记。
接下来选择’提升为‘:
名称命名:
3.加载 UI. 文件
四、正式开始
1.基本应用模板
from PyQt6 import QtWidgets, uic
from pyqtgraph import PlotWidget
import pyqtgraph as pg
import sys
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
#Load the UI Page
uic.loadUi('mainwindow.ui', self)
def main():
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
显示如下:
2.折线图
from PyQt6 import QtWidgets
from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg
import sys # We need sys so that we can pass argv to QApplication
import os
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.graphWidget = pg.PlotWidget()
self.setCentralWidget(self.graphWidget)
hour = [1,2,3,4,5,6,7,8,9,10]
temperature = [30,32,34,32,33,31,29,32,35,45]
# plot data: x, y values
self.graphWidget.plot(hour, temperature)
def main():
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
结果如下:
3.更改样式——背景颜色
self.graphWidget.setBackground('w') #更改背景图颜色
self.graphWidget.setBackground('#bbccaa') # hex
self.graphWidget.setBackground((100,50,255)) # RGB each 0-255
self.graphWidget.setBackground((100,50,255,25)) # RGBA (A = alpha opacity)
self.graphWidget.setBackground((100,50,255)) # RGB each 0-255
self.graphWidget.setBackground((100,50,255,25)) # RGBA (A = alpha opacity)
4.更改样式——线条颜色、宽度和样式
from PyQt6 import QtWidgets
from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg
import sys # We need sys so that we can pass argv to QApplication
import os
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.graphWidget = pg.PlotWidget()
self.setCentralWidget(self.graphWidget)
hour = [1,2,3,4,5,6,7,8,9,10]
temperature = [30,32,34,32,33,31,29,32,35,45]
self.graphWidget.setBackground('w')
pen = pg.mkPen(color=(255, 0, 0))
self.graphWidget.plot(hour, temperature, pen=pen)
def main():
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
效果如下:
#QPen 类相关函数
pen = pg.mkPen(color=(255, 0, 0)) #线条颜色
pen = pg.mkPen(color=(255, 0, 0), width=15, style=Qt.PenStyle.SolidLine) #线条样式
self.graphWidget.plot(hour, temperature, pen=pen, symbol='+', symbolSize=30, symbolBrush=('b')) #线条标记