pyqtgraph入门简介,pyqtgraph和matplotlib、pyqwt5的比较

一、pyqtgraph和matplotlib、pyqwt5的比较

使用python做数据分析时,经常会根据数据出图更直观点,目前绘图最常用的几个库:pyqtgraph、Matplotlib、pyqwt5

matplotlib:对于绘图,pyqtgraph并不像matplotlib那样完整/成熟,但运行速度要快得多。Matplotlib更旨在制作具有出版质量的图形,而pyqtgraph则旨在用于数据采集和分析应用。矩阵对于矩阵实验室程序员来说更直观;对于python/qt程序员来说,pyqtgraph更直观。Matplotlib(据我所知)不包括pyqtgraph的许多功能,例如图像交互,体积渲染,参数树,流程图等。

pyqwt5:大约和pyqtgraph一样快,但对于绘图功能来说并不那么完整。pyqtgraph中的图像处理要完整得多(同样,qwt中没有ROI小部件)。此外,pyqtgraph是用纯python编写的,因此它比pyqwt更便携,pyqwt在开发中经常落后于pyqt(我最初使用pyqwt,但决定在我的项目中依赖它作为依赖项太麻烦了)。像matplotlib一样,pyqwt(据我所知)不包括pyqtgraph的许多功能,例如图像交互,体积渲染,参数树,流程图等。

由此可见,pyqtgraph更符合我的应用场景,所以我选择了pyqtgraph库。

二、pyqtgraph简介

2.1什么是pyqtgraph

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

2.2pyqtgraph可以做什么?

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

2.3快速上手

前几天都是百度pyqtgraph绘图的例子,其实官方带了很多,查看起来也非常方便,新手可以花半天时间把这些demo运行一遍看下效果,代码走读一下。

import pyqtgraph.examples
pyqtgraph.examples.run()

运行起来如下:
在这里插入图片描述在这里插入图片描述

官方网址:https://www.pyqtgraph.org/

三、怎样使用pyqtgraph

这里有几个建议使用pyqtgraph的方法:

  • 从交互式shell(python -i,ipython等)
  • 应用程序中显示窗口
  • 将小部件嵌入到PyQt应用程序中

3.1 使用命令行

PyQtGraph使得从命令行可视化数据变得非常容易。注意:
这个例子就是告诉你有两个主要的函数:pg.plot,pg.image。一个画曲线,一个画图像。

import numpy as np
import pyqtgraph as pg
 
data = np.random.normal(size=1000)
pg.plot(data, title="Simplest possible plotting example")# data can be a list of values or a numpy array
 
data = np.random.normal(size=(500,500))
pg.image(data, title="Simplest possible image example")# data can be a list of values or a numpy array
 
 
## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if sys.flags.interactive != 1 or not hasattr(QtCore, 'PYQT_VERSION'):
        pg.QtGui.QApplication.exec_()

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

3.2 在应用程序中显示窗口

虽然我认为这种方法有些懒惰,但“懒惰”往往与“高效”无法区分。 这里的方法很简单,就是使用与命令行相同的功能,但是在现有的应用程序中使用。 当我只是想立即获得关于应用程序中数据状态的反馈时,我经常使用它,而无需花时间为其构建用户界面。

3.3 在PyQt应用程序中嵌入小部件

对于认真的应用程序开发人员来说,pyqtgraph中的所有功能都可以通过像其他任何Qt小部件一样嵌入来使用。 更多的重要信息,请参阅:lotWidget,ImageView,GraphicsLayoutWidget和GraphicsView。 PyQtGraph的小部件可以通过“Promote To …”功能包含在Designer的ui文件中:

  1. Designer中,创建一个QGraphicsView小部件(“Graphics View”类别下的“Display Widgets”)。

  2. 用鼠标右键单击QGraphicsView并选择““Promote To…”。

  3. 在“Promoted calss name”下,输入您希望使用的类名称(“PlotWidget”,“GraphicsLayoutWidget”等)。

  4. 在“Header file”下,输入“pyqtgraph”。

  5. 点击“Add”,然后点击“Promote”。

四、在pyqtgraph中绘图

4.1 在pyqtgraph中绘制数据有几种基本的方法

方法 描述
pyqtgraph.plot() 创建一个显示数据的新图形窗口

方法描述
pyqtgraph.plot()创建一个显示数据的新图形窗口
PlotWidget.plot()将一组新数据添加到现有的绘图小部件
PlotItem.plot()将一组新数据添加到现有的绘图小部件
GraphicsLayout.addPlot()在网格中添加一个新的图形

所有这些方法都接收相同的基本参数,这些参数控制如何绘制数据和显示图形:

  • x - 可选的X数据; 如果未指定,则会自动生成一系列整数。
  • y - Y数据。
  • pen - 绘制绘图线时使用的笔,或者无以禁用线。
  • symbol - 描述用于每个点的符号形状的字符串。 可选地,这也可以是对于每个点具有不同符号的字符串序列。
  • symbolPen - 绘制符号轮廓时使用的笔(或笔序列)。
  • symbolBrush - 填充符号时使用的画笔(或画笔序列)。
  • fillLevel - 填充曲线下面的区域为该Y值。
  • brush - 填充曲线时使用的笔刷。

详细可参阅:https://pyqtgraph.readthedocs.io/en/latest/getting_started/plotting.html

4.2 常用的绘图类

显示绘图数据时有几种类型。 大多数这些类都是自动实例化的,但了解它们是如何组织和相互关联是非常有用的。 PyQtGraph很大程度上基于Qt的GraphicsView框架 - 如果您还不熟悉这一点,那么值得一读(但不是必需的)。 最重要的是:1)Qt GUI由QWidgets组成,2)称为QGraphicsView的特殊小部件用于显示复杂图形,3)QGraphicsItems定义在QGraphicsView中显示的对象。

  • 数据类(QGraphicsItem的所有子类)

    PlotCurveItem - 显示给定x,y数据的绘图线
    ScatterPlotItem - 显示给定x,y数据的点
    PlotDataItem - 组合PlotCurveItem和ScatterPlotItem。上面讨论的绘图函数创建了这种类型的对象。
  • 容器类(QGraphicsItem的子类;包含其他QGraphicsItem对象,必须从GraphicsView中查看)

    PlotItem - 包含用于显示数据的ViewBox以及用于显示轴和标题的AxisItems和标签。这是一个QGraphicsItem子类,因此只能在csView中使用
    GraphicsLayout - 显示项目网格的QGraphicsItem子类。 这用于一起显示多个PlotItem。
    ViewBox - 一个用于显示数据的QGraphicsItem子类。 用户可以使用鼠标缩放/平移ViewBox的内容。 通常,所有PlotData / rve / ScatterPlotItems都是在ViewBox中显示的。
    AxisItem - 显示轴值,刻度和标签。 最常用于PlotItem。
  • 容器类(QWidget的子类;可能嵌入在PyQt GUI中)

    PlotWidget - 显示一个PlotItem的GraphicsView的子类。 PlotItem提供的大多数方法也可以通过PlotWidget获得。
    GraphicsLayoutWidget - 显示单个GraphicsLayoutItem的QWidget子类。 GraphicsLayoutItem提供的大多数方法也可以通过csLayoutWidget获得。

也可以通过PlotWidget获得。
GraphicsLayoutWidget - 显示单个GraphicsLayoutItem的QWidget子类。 GraphicsLayoutItem提供的大多数方法也可以通过csLayoutWidget获得。

先这么多吧,还有很多需要以后慢慢学习

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏克贝塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值