python pyqtgraph绘图库

news2024/12/29 12:49:09

pyqtgraph官网

PyQtGraph被大量应用于Qt GUI平台(通过PyQt或PySide),因为它的高性能图形和numpy可用于大量数据处理。 特别注意的是,pyqtgraph使用了Qt的GraphicsView框架,它本身是一个功能强大的图形系统; 我们将最优化和简化的语句应用到这个框架中,以最小的工作量实现数据可视化。

pyqtgraph的核心特征是:
基本的2D交互视图中框绘制
线和散点图
数据可平移/缩放鼠标
实时数据的显示和交互的快速绘制
图像显示与互动的查找表和电平控制
显示所有数据类型(int或float;任何比特深度;RGB,RGBA,或亮度)
切片的多维图像任意角度的函数
快速更新的视频显示和实时交互
三维图形系统(需要Python OpenGL绑定)
体积数据的渲染
三维表面和散点图
网格的等值面生成渲染
交互式视口旋转/缩放鼠标
更容易编程的基本的3D场景图
数据选择/标记和感兴趣的控制区
交互标记垂直/水平的地块的位置和区域
从图像中选择任意区域的部件和自动切片数据匹配
二维图形:

在pyqtgraph中,大多数2D可视化遵循以下鼠标交互:

左键:与场景中的项目交互(选择/移动对象等)。 如果鼠标光标下没有可移动的物体,那么用左边的按钮拖动就会平移场景。
右键拖动:缩放场景。 水平拖动左/右缩放; 向上/向下拖动垂直缩放(尽管某些场景将其x / y缩放比例锁定在一起)。 如果在场景中有x / y轴可以闪动,那么右键拖动轴会影响该轴。
右键单击:在大多数情况下单击右键将根据鼠标光标下的对象显示具有各种选项的上下文菜单。
中间按钮(或滚轮)拖动:按下滚轮拖动鼠标将始终平移场景(在场景中其他对象阻止左侧平移的情况下,此功能非常有用)。
轮旋转:放大和缩小场景。
上下文菜单:

右键单击大多数场景将显示一个上下文菜单,其中包含用于更改场景行为的各种选项。 这个菜单中的一些选项是:

数据范围变化时启用/禁用自动缩放
将多个视图的轴链接在一起
启用禁用每个轴的鼠标交互
显式设置可见范围值
三维图形:

3D可视化使用以下鼠标交互:

左键拖动:围绕中心点旋转场景
中间按钮拖动:通过移动x-y平面内的中央“查看”点来平移场景
中间按钮拖动+ CTRL:通过沿z轴移动中央“查看”点来平移场景
滚轮旋转:放大/缩小
车轮+ CTRL:改变视场角
键盘控制:

箭头键围绕中心点旋转,就像拖动鼠标左键一样

安装pyqtgraph
$ pip install pyqtgraph

安装openGL
$ pip install pyOpenGL -i https://pypi.douban.com/simple

示例代码

"""
This example demonstrates many of the 2D plotting capabilities
in pyqtgraph. All of the plots may be panned/scaled by dragging with 
the left/right mouse buttons. Right click on any plot to show a context menu.
"""

import numpy as np

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore

app = pg.mkQApp("Plotting Example")
#mw = QtWidgets.QMainWindow()
#mw.resize(800,800)

win = pg.GraphicsLayoutWidget(show=True, title="Basic plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')

# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)

p1 = win.addPlot(title="Basic array plotting", y=np.random.normal(size=100))

p2 = win.addPlot(title="Multiple curves")
p2.plot(np.random.normal(size=100), pen=(255,0,0), name="Red curve")
p2.plot(np.random.normal(size=110)+5, pen=(0,255,0), name="Green curve")
p2.plot(np.random.normal(size=120)+10, pen=(0,0,255), name="Blue curve")

p3 = win.addPlot(title="Drawing with points")
p3.plot(np.random.normal(size=100), pen=(200,200,200), symbolBrush=(255,0,0), symbolPen='w')


win.nextRow()

p4 = win.addPlot(title="Parametric, grid enabled")
x = np.cos(np.linspace(0, 2*np.pi, 1000))
y = np.sin(np.linspace(0, 4*np.pi, 1000))
p4.plot(x, y)
p4.showGrid(x=True, y=True)

p5 = win.addPlot(title="Scatter plot, axis labels, log scale")
x = np.random.normal(size=1000) * 1e-5
y = x*1000 + 0.005 * np.random.normal(size=1000)
y -= y.min()-1.0
mask = x > 1e-15
x = x[mask]
y = y[mask]
p5.plot(x, y, pen=None, symbol='t', symbolPen=None, symbolSize=10, symbolBrush=(100, 100, 255, 50))
p5.setLabel('left', "Y Axis", units='A')
p5.setLabel('bottom', "Y Axis", units='s')
p5.setLogMode(x=True, y=False)

p6 = win.addPlot(title="Updating plot")
curve = p6.plot(pen='y')
data = np.random.normal(size=(10,1000))
ptr = 0
def update():
    global curve, data, ptr, p6
    curve.setData(data[ptr%10])
    if ptr == 0:
        p6.enableAutoRange('xy', False)  ## stop auto-scaling after the first data set is plotted
    ptr += 1
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)


win.nextRow()

p7 = win.addPlot(title="Filled plot, axis disabled")
y = np.sin(np.linspace(0, 10, 1000)) + np.random.normal(size=1000, scale=0.1)
p7.plot(y, fillLevel=-0.3, brush=(50,50,200,100))
p7.showAxis('bottom', False)


x2 = np.linspace(-100, 100, 1000)
data2 = np.sin(x2) / x2
p8 = win.addPlot(title="Region Selection")
p8.plot(data2, pen=(255,255,255,200))
lr = pg.LinearRegionItem([400,700])
lr.setZValue(-10)
p8.addItem(lr)

p9 = win.addPlot(title="Zoom on selected region")
p9.plot(data2)
def updatePlot():
    p9.setXRange(*lr.getRegion(), padding=0)
def updateRegion():
    lr.setRegion(p9.getViewBox().viewRange()[0])
lr.sigRegionChanged.connect(updatePlot)
p9.sigXRangeChanged.connect(updateRegion)
updatePlot()

if __name__ == '__main__':
    pg.exec()

运行效果
在这里插入图片描述

PyQtGraph示例模块:
python -m pyqtgraph.examples
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识付费海哥:这样做课,不赚钱都难

现在不少人开始了开发网课,卖网课赚钱, 但是在网课开发时,很多人开始的时候,关注的点就错了! 自己喜欢钓鱼,就开发钓鱼的课, 自己喜欢演讲,就开发演讲的课, 自己喜欢…

Dubbo入门(二)——IDEA下Dubbo+Zookeeper搭建

目录一、Zookeeper1.1 下载1.2 安装1.3 修改配置文件1.4 启动二、Dubbo插件搭建三、手动创建3.1 创建项目3.1.1 pom依赖3.2 api模块3.2.1 pom依赖3.2.2 实体类3.2.3 service接口3.3 provider3.3.1 pom依赖3.3.2 配置文件3.3.3 mapper3.3.4 service实现类3.3.5 启动类3.4 consum…

冶金工艺流程(钢铁全流程)

工艺图 工艺讲解 生产流程从矿石原料采集开始,对于低品位的矿石,必须在冶炼前经选矿工序先选出铁精矿,然后进一步制成烧结矿或球团矿。 ————————————————————————————— 高炉冶炼是一个连续的、大规模的高温生产过程。铁矿石…

为什么Aruba始终走在网络世界的前列?

编辑 | 阿冒 设计 | 沐由关于网络的价值,梅特卡夫定律(Metcalfes law)曾经在多年前就明白无误地告诉我们:VKN。其中,V代表一个网络的价值,N代表这个网络的节点数,K代表价值系数。如果梅特卡夫…

47. 批量规范化 代码从零开始实现 + 简洁实现

1. 从零实现 下面,我们从头开始实现一个具有张量的批量规范化层。 import torch from torch import nn from d2l import torch as d2l# X是输入,gamma, beta是两个可以学习的参数,moving_mean, moving_var是整个数据集的均值和方差&#xf…

ssh登录——scp传文件

一、ssh登录 1.基本用法 远程登录服务器: ssh userhostname# user: 用户名 # hostname: IP地址或域名 第一次登录时会提示: The authenticity of host 123.57.47.211 (123.57.47.211) cant be established. ECDSA key fingerprint is SHA256:iy237y…

十分钟掌握 “UML ” 的基本使用

十分钟掌握 “UML ” 的基本使用 每博一文案 很喜欢这样一段话:内可以不跟别人计较,但一定要学会维护自己,你可以不跟别人争抢,但应该懂得远离小人。 人生在世,我们会遇到形形色色的人,人心隔肚皮&#xf…

Pytorch深度学习实战——第3章课后习题

1.从list(range(9))list(range(9))list(range(9))中创建一个张量aaa并预测检查其大小、偏移量、步长。 import torch atorch.tensor(list(range(9))) print(a.storage_offset())#偏移量 print(a.stride())#步长 print(a.size())#大小a)使用ba.view(3,3)ba.view(3,3)ba.view(3,…

Aspose.PDF for Java系列3-创建复杂的PDF

创建复杂PDF 上篇文章展示了使用Java和Aspose.PDF简单步骤。本文中,我们将使用Java和Aspose.PDF创建更复杂的文档结构。此示例中,我们将创建包含图片、两个文本片段(标题和段落)和表格。 创建文档参考以下步骤: 实例…

被房地产坑惨的老板电器,终于要“回血”了!

近期,随着房地产行业重新被定义为“国民经济的支柱产业”,叠加疫情防控转向,笼罩在家电行业上空的阴霾逐渐消散,家电股预期改善,纷纷迎来估值修复。尤其是曾遭房地产暴击的老板电器,有望抓住房地产回暖的窗…

Synchronized

Synchronized前言1.synchronized修饰符和线程控制1.1synchronized修饰符和Object Monitor模式1.2 synchronized修饰符可标注的位置2. 方法2.1 waitwait多态表达式notify()方法和notifyAII()方法interrupt中断信号判断是否收到interrupt中断信号的方法前言 悲观锁在Java中有两种…

Jenkins环境搭建

Jenkins环境搭建 一、Jenkins下载:Jenkins 点击Download,进入新的页面后点击下载Jenkins的war包,如下图: 注意:Jenkins是java语言开发,需要安装JDK并进行环境变量配置,Jenkins可以在Tomcat容器…

java注解(Annotation)和反射(Reflection)

文章目录重要的点一 注解(Annotation)(Annotation)(Annotation)1.1 注解初识1.2 内置注解1.3 内置注解代码演示1.4 元注解(meta−annotation)(meta-annotation)(meta−annotation)1.5 元注解代码演示1.6 自定义注解1.7 自定义注解代码演示二 反射(Reflection)(Reflection)(Refl…

gitlab-ci.yml关键字(三)before_script 、script 、after_script

before_script before_script 用于定义在每个作业执行之前所运行的一系列脚本命令。这里需要注意的是,before_script 运行的时机,是在制品(artifacts)恢复后,也就意味着,在这个时机中是可以操作制品的。 …

Unity 解决QFramework WebGL报错

Unity 解决QFramework WebGL报错🥝错误描述☕原因🍤 解决方案🥝错误描述 在新建工程中只导入了QFramework,Build WebGL(空场景) 会看到如下错误: Exception: Non-Public Constructor() not found! in QFramework.Saf…

点云 3D 目标检测 - SECOND(Sensors 2018)

点云 3D 目标检测 - SECOND(Sensors 2018)摘要1. 引言2. 相关工作2.1 基于前视图和图像的方法2.2 基于鸟瞰图的方法2.3 基于3D的方法2.4 基于融合的方法3. SECOND检测器3.1 网络架构3.1.1 点云分组3.1.2 Voxelwise特征提取器3.1.3 稀疏卷积中间提取器3.1…

代码模板3---基础算法(双指针算法/位运算/离散化/区间合并)

①双指针算法 一般做题:先用暴力做法,然后去看是否存在某种性质(如单调性,维护这个区间的单调性即可) AcWing 799. 最长连续不重复子序列 - AcWing AcWing 800. 数组元素的目标和 - AcWing AcWing 2816. 判断子序列 - …

期货交易软件哪个好?为什么选择期货MT4平台软件?

越来越多人选择期货投资,因为期货投资具有高投资高回报的特征。在做期货交易时,很多投资者会发现市场上有各种各样的期货交易软件。如果第一次接触期货交易,难免会不知道选择哪个期货交易软件更好。下面为大家讲讲期货交易软件哪个好&#xf…

centos7安装rabbitmq集群

公司号口项目让运维安装rabbitmq,结果rabbitmq页面state都显示down了,问运维居然说都正常,麻蛋欺负我无知,自己搞一遍试试。 前言 RabbitMQ是一个开源的强大的企业消息系统,支持主流的操作系统,支持多种开…

OpenHarmony#深入浅出学习eTs#(七)判断密码是否正确

本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) 一、基本界面 本项目基于#深入浅出学习eTs#(四)登陆界面UI,继续进行,实现一个判断的功能 二、控件介绍 TextInput 可以输入单行文本并支持…