forked from huangxin/ailai
65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
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())
|
|
|