虽然可以在 PySide6 中嵌入 matplotlib 图,但这种体验并不完全是原生的。对于简单且高度交互的绘图,您可能需要考虑改用 PyQtGraph。PyQtGraph 建立在 PySide6 原生 QGraphicsScene 之上,提供更好的绘图性能,特别是对于实时数据,并提供交互性和使用 Qt 图形小部件轻松自定义绘图的能力。在本章中,我们将介绍使用 PyQtGraph 创建绘图微件的第一步,然后演示使用线条颜色、线型、轴标签、背景颜色和绘制多条线来自定义绘图。
为了能够将 PyQtGraph 与 PySide6 一起使用,您首先需要将包安装到您的 Python 环境中。您可以使用 pip 来执行此操作,pip install pyqtgraph 安装即可。
创建 PyQtGraph 小部件 在 PyQtGraph 中,所有绘图都是使用 PlotWidget 小部件创建的。此小组件提供了一个包含的画布,可以在该画布上添加和配置任何类型的绘图。在引擎盖下,这个绘图小部件使用Qt原生QGraphicsScene,这意味着它可以快速高效,但很容易与应用程序的其余部分集成。可以像创建任何其他小部件一样创建 PlotWidget。
import sys
from PySide6 import QtWidgets
import pyqtgraph as pg # import PyQtGraph after Qtclass MainWindow(QtWidgets.QMainWindow):def __init__(self):super().__init__()self.resize(1000,800)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 valuesself.graphWidget.plot(hour, temperature)app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
app.exec()
PyQtGraph 的默认绘图样式非常裸露 - 黑色背景和细线(几乎看不见)白线。下面的例子中,我们将看看 PyQtGraph 中有哪些选项可以改善绘图的外观和可用性。样式图
样式绘制 PyQtGraph 使用 Qt 的 QGraphicsScene 来渲染图形。这使我们能够访问所有用于绘图的标准Qt线条和形状样式选项。但是,PyQtGraph 提供了一个 API,用于使用它们来绘制绘图和管理绘图画布。下面我们将介绍创建和自定义自己的绘图所需的最常见的样式功能。背景颜色 从上面的应用骨架开始,我们可以通过在 PlotWidget 实例(在 self.graphWidget 中)调用 .setBackground 来更改背景颜色。下面的代码通过传入字符串设置背景颜色
self.graphWidget.setBackground('w')
根据 matplotlib 中使用的标准颜色,可以使用单个字母提供许多简单颜色。它们并不奇怪,除了“k”用于黑色。表 13.常见颜色代码 颜色 字母代码 蓝色 b 绿色 g 红色 r 青色 (亮蓝绿色) c 品红色 (亮粉色) m 黄色 y 黑色 k 白色 w 除了这些单字母代码外,您还可以使用十六进制符号设置颜色,例如。#672922 作为字符串。self.graphWidget.setBackground('#bbccaa') # 十六进制 RGB 和 RGBA 值可以分别作为 3 元组或 4 元组传入,values 为0-255
self.graphWidget.setBackground((100,50,255)) # RGB each 0-255
self.graphWidget.setBackground((100,50,255,25)) # RGBA (A = alpha)
最后,您还可以直接使用Qt的QColor类型指定颜色。565 self.graphWidget.setBackground(QtGui.QColor(100,50,254,25)) 如果您在应用程序的其他位置使用特定的 QColor 对象,或者将打印背景设置为默认的 GUI 背景颜色,这将非常有用。color = self.palette().color(QtGui.QPalette.Window) # 获取默认窗口背景,self.graphWidget.setBackground(color) 线条颜色、宽度和样式 PyQtGraph 中的线条是使用标准 Qt QPen 类型绘制的。
color = self.palette().color(QtGui.QPalette.Window) # Get the default
window background,
self.graphWidget.setBackground(color)
线条颜色、宽度和样式 PyQtGraph 中的线条是使用标准 Qt QPen 类型绘制的。这使您可以像在任何其他QGraphicsScene绘图中一样完全控制线条绘制。要使用笔绘制一条线,您只需创建一个新的 QPen 实例并将其传递到 plot 方法中即可。下面我们创建一个 QPen 对象,传入一个 3 元组的 int 值,指定一个 RGB 值(全红色)。我们也可以通过传递“r”或QColor对象来定义它。然后我们用 pen 参数将其传递到绘图中。pen = pg.mkPen(color=(255, 0, 0)) self.graphWidget.plot(小时,温度,pen=pen)
示例如下:
import sys
from PySide6 import QtWidgets
import pyqtgraph as pg # import PyQtGraph after Qt
class MainWindow(QtWidgets.QMainWindow):def __init__(self):super().__init__()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)
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
app.exec()
通过更改 QPen 对象,我们可以更改线条的外观,包括使用标准 Qt 线条样式的线宽(像素和虚线、虚线等)。例如,以下示例创建一条 15px 宽的蓝色虚线。
pen = pg.mkPen(color=(0, 255, 0), width=15, style=QtCore.Qt.DashLine)
可以使用标准的Qt线条样式,包括Qt.SolidLine、Qt.DashLine、Qt.DotLine、Qt.DashDotLine和Qt.DashDotDotLine。下图显示了这些行的示例,您可以在Qt文档中内容。
未完待续。。。。。。。