前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9个动图带你进入PyQtGraph的强大可视化世界

9个动图带你进入PyQtGraph的强大可视化世界

作者头像
州的先生
发布2020-08-10 17:08:07
6.1K0
发布2020-08-10 17:08:07
举报
文章被收录于专栏:州的先生州的先生

PyQtGraph是一个建立在PyQt/PySide之上的Python数据可视化图形界面库,其性能强、速度快,能够胜任大部分交互式的2D、3D图形绘制,可以搞定数据科学领域大量的数据可视化工作。

PyQtGraph官方提供了很好的示例来供学习者了解PyQtGraph的功能,下面我们通过9个图形,来一窥PyQtGraph的可视化世界。

基础的数组绘制折线图

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 使用addPlot()方法直接添加一个数组以绘制图形
p1 = win.addPlot(title="基础数组绘图", y=np.random.normal(size=100))

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

一个图形中绘制多条折线

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
p2 = win.addPlot(title="多条折线")
# 在图形中绘制3条折线
p2.plot(np.random.normal(size=100), pen=(255,0,0), name="红色线条")
p2.plot(np.random.normal(size=110)+5, pen=(0,255,0), name="绿色线条")
p2.plot(np.random.normal(size=120)+10, pen=(0,0,255), name="蓝色线条")

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

在图形中绘制点

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
p3 = win.addPlot(title="在图形中绘制点")
p3.plot(
    np.random.normal(size=100), # 随机数组曲线
    pen=(200,200,200), # 画笔颜色
    symbolBrush=(0,255,0),  # 符号画笔颜色
    symbolPen='w', # 符号外圈颜色
)

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

使用图形参数

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
p4 = win.addPlot(title="使用参数来显示网格")
x = np.cos(np.linspace(0, 2*np.pi, 1000)) # 生成X轴数据
y = np.sin(np.linspace(0, 4*np.pi, 1000)) # 生成Y轴数据
p4.plot(x, y) # 绘制图形
p4.showGrid(x=True, y=True) # 启用X、Y轴网格

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

散点图、坐标轴标签和刻度

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
p5 = win.addPlot(title="散点图、坐标轴标签、坐标轴刻度")
x = np.random.normal(size=1000) * 1e-5 # 生成X轴数据
y = x*1000 + 0.005 * np.random.normal(size=1000) # 生成Y轴数据
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) # 设置坐标轴刻度模式

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

实时数据更新绘图

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
p6 = win.addPlot(title="绘图数据更新")
curve = p6.plot(pen='y') # 图形使用黄色画笔进行绘制
data = np.random.normal(size=(10,1000)) # 生成随机数据
ptr = 0 # 初始为0
# 定义一个更新函数
def update():
    global curve, data, ptr, p6
    curve.setData(data[ptr%10]) # 设置图形的数据值
    if ptr == 0:
        p6.enableAutoRange('xy', False)  ## 在第一个图形绘制的时候停止自动缩放
    ptr += 1

timer = QtCore.QTimer() # 实例化一个计时器
timer.timeout.connect(update) # 计时器信号连接到update()函数
timer.start(200) # 计时器间隔200毫秒

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

填充图形、禁用坐标轴

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
p7 = win.addPlot(title="填充图形,禁用坐标轴")
y = np.sin(np.linspace(0, 10, 1000)) + np.random.normal(size=1000, scale=0.1) # 生成图形数据
p7.plot(y,
    fillLevel=0,
    brush=(50,50,200,100)
)
p7.showAxis('bottom', False) # 底部坐标轴不显示

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

区域选择

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
x2 = np.linspace(-100, 100, 1000)
data2 = np.sin(x2) / x2
p8 = win.addPlot(title="区域选择")
p8.plot(data2, pen=(255,255,255,200))
# 添加一个线区域选择项目,起始区间在400到700
lr = pg.LinearRegionItem([400,700])
p8.addItem(lr)

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

放大区域选择

代码语言:javascript
复制
# coding:utf-8
# 作者:州的先生
# 博客:https://zmister.com

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg

# 实例化一个绘图窗口
win = pg.GraphicsWindow()
win.resize(1000,600)
win.setWindowTitle('PyQtGraph基础绘图示例 - zmister.com')

# 启用抗锯齿选项
pg.setConfigOptions(antialias=True)

# 添加一个图形
x2 = np.linspace(-100, 100, 1000)
data2 = np.sin(x2) / x2
p8 = win.addPlot(title="区域选择")
p8.plot(data2, pen=(255,255,255,200))
# 添加一个线区域选择项目,起始区间在400到700
lr = pg.LinearRegionItem([400,700])
p8.addItem(lr)

p9 = win.addPlot(title="放大区域选择")
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__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

运行上述代码,会得到如下动图所示的图形界面:

全家福

最后,来一个全家福:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 州的先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础的数组绘制折线图
  • 一个图形中绘制多条折线
  • 在图形中绘制点
  • 使用图形参数
  • 散点图、坐标轴标签和刻度
  • 实时数据更新绘图
  • 填充图形、禁用坐标轴
  • 区域选择
  • 放大区域选择
  • 全家福
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档