解读官方API-如何使用pyqtgraph

这里有一些使用pyqtgraph的建议方法:

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

命令行使用

PyQtGraph使得从命令行可视化数据变得非常容易。注意:

import pyqtgraph as pg
pg.plot(data) # 数据可以是列表或numpy数组

上面的例子将打开一个窗口,显示给定数据的线图。调用  pg.plot返回创建的plot widget句柄,允许将更多数据添加到同一窗口。

注意: python提示中的交互式绘图仅适用于PyQt ;在交互式提示运行时,PySide不能运行Qt事件循环。如果您希望使用pyqtgraph与PySide交互,请参阅“控制台” 示例

更多例子:

pw = pg.plot(xVals, yVals, pen='r')  # 用红色画x-y图像
pw.plot(xVals, yVals2, pen='b') win = pg.GraphicsWindow() # 自动生成多任务的网格
win.addPlot(data1, row=0, col=0)
win.addPlot(data2, row=0, col=1)
win.addPlot(data3, row=1, col=0, colspan=2) pg.show(imageData) # imageData 必须是2到4维的numpy数组

我们在这里只是表面上看 - 这些函数接受许多不同的数据格式和选项来自定义数据的外观。

在应用程序中显示窗口

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

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

对于严谨的应用程序开发人员,pyqtgraph中的所有功能都可以通过像其他任何Qt小部件一样嵌入来使用。

最重要的一些控件如:PlotWidgetImageViewGraphicsLayoutWidget,和GraphicsView

PyQtGraph的小部件可以通过“Promote To ...”功能包含在Qt-Designer的ui文件中:

  • Designer中,创建一个QGraphicsView小部件(“Graphics View”类别下的“Display Widgets”)。
  • 用鼠标右键单击QGraphicsView并选择““Promote To...”。
  • 在“Promoted calss name”下,输入您希望使用的类名称(“PlotWidget”,“GraphicsLayoutWidget”等)。
  • 在“Header file”下,输入“pyqtgraph”。
  • 点击“Add”,然后点击“Promote”。

有关提升窗口小部件的更多信息,请参阅设计器文档。“VideoSpeedTest”和“ScatterPlotSpeedTest”示例都演示了如何使用pyuic4或pyside-uic编译为.py模块的.ui文件。“designerExample”示例演示了如何从.ui文件动态生成python类(不需要pyuic4 / pyside-uic)。

PyQt和PySide

PyQtGraph支持Qt库的两个流行的python包装器:PyQt和PySide。两个软件包都提供几乎相同的API和功能,但由于各种原因(在别处讨论),您可能更喜欢使用一个软件包或另一个软件包。首次导入pyqtgraph时,它会通过进行填充检查自动确定要使用的库:

  1. 如果已导入PyQt5,请使用它
  2. 否则,如果已导入PySide,请使用它
  3. 否则,尝试导入PyQt5
  4. 如果导入失败,请尝试导入PySide。

如果您的系统上安装了两个库,并且您希望强制pyqtgraph使用其中一个,只需确保在pyqtgraph之前导入它:

import PySide  ## this will force pyqtgraph to use PySide instead of PyQt5
import pyqtgraph as pg

将PyQtGraph库导入到大型项目中

在编写使用pyqtgraph的应用程序或python包时,通常在系统范围内(或在virtualenv中)安装pyqtgraph,并在应用程序内调用import pyqtgraph。 这样做的主要好处是pyqtgraph是独立于应用程序进行配置的,因此您(或您的用户)可以自由安装较新版本的pyqtgraph,而无需在应用程序中更改任何内容。 这是用python开发时的标准做法。

然而,特别是对于科学应用来说,情况也是如此,即软件是为特定目的而编写的,然后进行存档。如果我们想要确保软件在十年后仍能正常工作,那么最好将应用程序绑定到一个特定版本的pyqtgraph上,并避免导入系统安装的pyqtgraph版本,这可能会更新(可能不兼容)。尤其当应用程序需要对主要版本中可能不存在的pyqtgraph软件包进行特定的修改时,情况如此。

PyQtGraph通过两种机制来促进这种用法。首先,pyqtgraph中的所有内部导入语句都是相对的,它允许将包重命名或用作子包,而不会与系统中其他版本的pyqtgraph产生任何命名冲突(即,pyqtgraph从未在内部将其自身称为“pyqtgraph ”)。其次,可以在 https://github.com/pyqtgraph/pyqtgraph-core.git 找到一个git树状子目录存储库,它只包含'pyqtgraph /'树状子目录,允许将代码直接克隆为使用它的应用程序的子目录。

基本的方法是将存储库克隆到包中的适当位置。从包中导入pyqtgraph时,一定要使用全名来避免导入任何系统安装的pyqtgraph包。例如,假设一个简单的项目具有以下结构:

my_project/
__init__.py
plotting.py
"""Plotting functions used by this package"""
import pyqtgraph as pg
def my_plot_function(*data):
pg.plot(*data)

要导入特定版本的pyqtgraph,我们将克隆在项目中的pyqtgraph-core 库:

my_project$ git clone https://github.com/pyqtgraph/pyqtgraph-core.git

然后相应地调整导入语句:

my_project/
__init__.py
pyqtgraph/
plotting.py
"""Plotting functions used by this package"""
import my_project.pyqtgraph as pg # 确保使用本地的子包,而不是使用全局安装的版本 def my_plot_function(*data):
pg.plot(*data)

使用 git checkout pyqtgraph-core-x.x.x 选择特定版本的存储库,或使用 git pull 从上游拉取pyqtgraph更新(有关更多信息,请参阅git文档)。

对于已经使用git进行代码控制的项目,也可以在你自己的仓库中包含pyqtgraph作为git树状子目录。 这种方法的主要优点是,除了能够从上游存储库中获取pyqtgraph更新之外,还可以将本地pyqtgraph更改提交到项目存储库并向上游推送这些更改:

my_project$ git remote add pyqtgraph-core https://github.com/pyqtgraph/pyqtgraph-core.git
my_project$ git fetch pyqtgraph-core
my_project$ git merge -s ours --no-commit pyqtgraph-core/core
my_project$ mkdir pyqtgraph
my_project$ git read-tree -u --prefix=pyqtgraph/ pyqtgraph-core/core
my_project$ git commit -m "Added pyqtgraph to project repository"

【pyqtgraph绘图】如何使用pyqtgraph的更多相关文章

  1. 【pyqtgraph绘图】在pyqtgraph中绘图

    解读pyqtgraph官方API-在pyqtgraph中绘图 参考: http://www.pyqtgraph.org/documentation/plotting.html 在pyqtgraph中绘 ...

  2. 【pyqtgraph绘图】安装pyqtgraph

    解读官方API-安装 安装 参考:http://www.pyqtgraph.org/documentation/installation.html 根据您的需要,有许多不同的方式来安装pyqtgrap ...

  3. 【pyqtgraph绘图】线条,填充和颜色

    解读官方API-线条,填充和颜色 参考: http://www.pyqtgraph.org/documentation/style.html 线条,填充和颜色 Qt依靠其QColor,QPen和QBr ...

  4. 【pyqtgraph绘图】案例-动态的正余弦波形图

    先看一个简单的小例子: 完整代码: import numpy as np import pyqtgraph as pg import sys from PyQt5.QtWidgets import Q ...

  5. 【pyqtgraph绘图】Qt速成课程

    解读官方API-Qt速成课程 参考:http://www.pyqtgraph.org/documentation/qtcrashcourse.html Qt速成课程 PyQtGraph广泛使用Qt来生 ...

  6. python pyqtgraph 保存图片到本地

    pyqtgraph官方给的示例居然会报错2333 官方文档传送门:#####pyqtgraph export pyqtgraph支持在可视化窗口中右键保存(Exporting from the GUI ...

  7. Python可视化库

    转自小小蒲公英原文用Python可视化库 现如今大数据已人尽皆知,但在这个信息大爆炸的时代里,空有海量数据是无实际使用价值,更不要说帮助管理者进行业务决策.那么数据有什么价值呢?用什么样的手段才能把数 ...

  8. Python Weekly 419

    文章,教程或讲座 如何用 Dropbox Security 构建用于日志系统的威胁检测和事件响应的工具 https://blogs.dropbox.com/tech/2019/10/how-dropb ...

  9. animation模块的使用

    1.动画的实现-初探 import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncA ...

随机推荐

  1. Windows 使用 Gogs 搭建 Git 服务器

    随便说两句 之前有使用 Gitblit 在Windows搭建Git服务器,用的也挺好的,可能安装起来略麻烦一点.现在全用 Gogs 在windows搭建Git服务器,主要是因界面好看,管理更方便一些. ...

  2. Java如何清除空格?

    在Java编程中,如何清除/删除空格? 以下示例演示如何使用Util.regex.Pattern类的matcher.replaceAll(stringname)方法来删除空格. package com ...

  3. swoole消息推送

    socket.php // 注释的部分是学习的笔记 <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); //监听WebSocket连接打开事件 ...

  4. android bionic c 对比 gnu c

    Bionic 是一个BSD标准的C库,用在android平台上面的. Android 是一个不完全开源的系统. android的kernel使用的是基于linux的,linux使用的是GPL2的开源标 ...

  5. libuv示例代码

    https://github.com/nikhilm/uvbook/tree/master/code

  6. Spring实战 难懂的JavaBean

    bean中文解释为:豆; 豆形种子; 毫无价值的东西. 按照上面的意思,很难理解Bean是个什么鬼,Java豆? 我们先来看一个典型的JavaBean,直观地理解下: public class Per ...

  7. ubuntu安装使用ffmpeg

    环境:ubuntu 12.04 LTS (1)到http://www.ffmpeg.org/download.html下载最新版ffmpeg 也可以用这个命令: git clone git://sou ...

  8. :eq

    匹配一个给定索引值的元素?只要在html页面每个元素都有索引值,相同的元素按html位置顺序从0开始往下排.给定索引值:给定一个html某个区域的元素的索引值,也是从0开始 不给区域就是从html从d ...

  9. hdparm命令(转)

    转自:http://man.linuxde.net/hdparm hdparm命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数. 语法 hdparm(选项)(参数) 选项 -a< ...

  10. poj1734 Sightseeing trip【最小环】

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:8588   Accepted:3224   ...