(详细分析)基于pyqt5、pyqtgraph和GLViewWidget画3D散点图,并增加图例与坐标轴

本文详细分析了使用pyqt5和pyqtgraph创建3D散点图的过程,包括多线程显示多窗口的问题、窗口显示尺寸调整、动态更新点位置的方法以及GLViewWidget的扩展,如坐标轴和刻度的添加。通过实例和解决方案,帮助读者解决pyqt5开发中的关键问题。
摘要由CSDN通过智能技术生成

引言

本博客为项目开发过程中,3D散点图学习记录,对示例代码和开发过程做了详细的记录与分析。在留下时光脚印的同时,希望也能帮助到屏幕前的你。
具体的开发及软件打包可见:点击查看
项目开发遇到的坑总结帖见:点击查看

一、pyqtgraph官方3D散点图代码示例分析

代码如下,已添加了详细的注释。

# -*- coding: utf-8 -*-
"""
Demonstrates use of GLScatterPlotItem with rapidly-updating plots.
"""

# import initExample

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
import numpy as np
import time

app = QtGui.QApplication([])
w = gl.GLViewWidget()  # 定义窗口w为GLViewWidget部件
w.opts['distance'] = 20  # 初始视角高度
w.show()  # 显示窗口
w.setWindowTitle('pyqtgraph example: GLScatterPlotItem')  # 定义窗口标题

# g用来显示白色网格
g = gl.GLGridItem()
w.addItem(g)
# 注:网格的大小可以设置:
# g = gl.GLGridItem()
# size_axes = distance * 3
# g.setSize(x=size_axes, y=size_axes, z=size_axes)
# w.addItem(g)

# **************************************************************************************
#  一、例子:点集
#  First example is a set of points with pxMode=False
#  These demonstrate the ability to have points with real size down to a very small scale
#
pos = np.empty((53, 3))  # 存放点的位置,为53 * 3的向量,感觉说是矩阵更合适
size = np.empty((53))  # 存放点的大小
color = np.empty((53, 4))  # 存放点的颜色
pos[0] = (1, 0, 0)  # 第一个点的坐标
size[0] = 0.5  # 第一个点的大小
color[0] = (1.0, 0.0, 0.0, 1)  # 红色,最后一位为透明度
pos[1] = (0, 1, 0)
size[1] = 0.5
color[1] = (0.0, 0.0, 1.0, 1)  # 蓝色
pos[2] = (0, 0, 1)
size[2] = 1
color[2] = (0.0, 1.0, 0.0, 1)  # 绿色
pos[3] = (2, 0, 0)
size[3] = 0.5
color[3] = (1.0, 1.0, 0.0, 1)  # 黄色
pos[4] = (3, 0, 0)
size[4] = 0.5
color[4] = (1.0, 0.0, 1.0, 1)  # 紫红色
pos[5] = (4, 0, 0)
size[5] = 0.5
color[5] = (0.0, 1.0, 1.0, 1)  # 天蓝色
pos[6] = (5, 0, 0)
size[6] = 0.5
color[6] = (1.0, 1.0, 1.0, 1)  # 白色


z = 0.5
d = 6.0
# 对pos从第3个元素开始操作,生成最后一直往上叠的小绿点
for i in range(7, 53):
    pos[i] = (0, 0, z)
    size[i] = 2. / d
    color[i] = (0.0, 1.0, 0.0, 0.5)  # 绿色,第4个0为透明
    z *= 0.5
    d *= 2.0

sp1 = gl.GLScatterPlotItem(pos=pos, size=size, color=color, pxMode=False)  # 设置Item
sp1.translate(5, 5, 0)  # 平移sp1,即横轴坐标整体+5,纵轴坐标整体+5
w.addItem(sp1)  # 当w使用addItem()后,才会生效显示图像

# **************************************************************************************
#  二、立方体区域点集,并迅速更新颜色
#  Second example shows a volume of points with rapidly updating color
#  and pxMode=True
#

pos2 = np.random.random(size=(100000, 3))  # 生成随机数点集
pos2 *= [10, -10, 10]  # 区域的长宽高都为10,于第四卦限
pos2[0] = (0, 0, 0)  # 第一个点为原点
color2 = np.ones((pos2.shape[0], 4))  # pos2的行数(点数),4列的元素全为1的向量
d2 = (pos2 ** 2).sum(axis=1) ** 0.5
size = np.random.random(size=pos2.shape[0]) * 10  # 点的大小
sp2 = gl.GLScatterPlotItem(pos=pos2, color=(1, 1, 1, 1)
  • 18
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值