from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget from PySide6.QtDataVisualization import Q3DScatter, QScatter3DSeries, Q3DTheme,Q3DCamera,QScatterDataItem from PySide6.QtGui import QVector3D, Qt import sys class Scatter3DWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("3D 轨迹点图") # 创建 3D Scatter 图 self.graph = Q3DScatter() self.graph.activeTheme().setType(Q3DTheme.Theme.ThemeEbony) # 设置主题 self.graph.scene().activeCamera().setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront) # 修正属性名 # 创建容器 container = QWidget.createWindowContainer(self.graph) container.setMinimumSize(800, 600) # 设置布局 widget = QWidget() layout = QVBoxLayout(widget) layout.addWidget(container) self.setCentralWidget(widget) # 添加数据 self.add_data() def add_data(self): # 创建轨迹点数据 series = QScatter3DSeries() series.setItemSize(0.2) # 点的大小 data = [] data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5))) data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4))) data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2))) series.dataProxy().addItems(data) # 添加到图表 self.graph.addSeries(series) if __name__ == "__main__": app = QApplication(sys.argv) scatter = Q3DScatter() scatter.setFlags(scatter.flags()) series = QScatter3DSeries() data = [] data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5))) data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4))) data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2))) series.dataProxy().addItems(data) scatter.addSeries(series) # 调整相机位置,更好的角度来观察散点 camera = scatter.scene().activeCamera() camera.setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront) scatter.setTitle('实战 Qt for Python: 3D散点图演示') scatter.resize(480, 360) scatter.show() sys.exit(app.exec())