pyqtgraph 官方案例 学习记录 002 Basic Plotting

这个案例,主要演示了 pg.plot 的各种功能

源代码:

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg#QtGui.QApplication.setGraphicsSystem('raster')
app = QtGui.QApplication([])
#mw = QtGui.QMainWindow()
#mw.resize(800,800)win = pg.GraphicsWindow(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, p6curve.setData(data[ptr%10])if ptr == 0:p6.enableAutoRange('xy', False)  ## stop auto-scaling after the first data set is plottedptr += 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()## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':import sysif (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):QtGui.QApplication.instance().exec_()

运行结果:

图 1

代码解释:

第6行:(不明白,求高手指点)

app = QtGui.QApplication([])

第10~12行:

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

pg.GraphicsWindow(title='标题'):新建一个窗口,返回它

win.resize(宽度x向,长度y向):修改窗口大小

win.setWindowTitle('标题'):修改win这个窗口的标题。(这部是多余的,可以直接在最开始实现。大概是案例想多教给你一个函数)

第39行:

y -= y.min()-1.0

大概是他们脑子抽了,我也不知道他们为什么要这么写,反正下面的是一样的:

y += 1.0-y.min()

即使是这样我依然不能理解为什么要减掉最小值…………

第45行:

p5.setLabel('bottom', "Y Axis", units='s')

大概是他打错了,应该是X Axis

第53行:

    global curve, data, ptr, p6

对!博主的语法也不扎实……这个应该是声明一下这些变量是用的全局变量。不这么写的话,不能用……?

第58~60行:

timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)

下面的东西是我猜的,不保证对……,我目前先这么理解,有时间再去查~

timer是个计时器,在每个间隔相等的时间点,执行一个函数。

timer.timeout.connect( 所执行的函数 )。timer.start( 开始时间毫秒 ) 在这么多毫秒后,第一次执行那个函数,以后也会间隔这么多时间。

第77行:

lr.setZValue(-10)

尼玛这东西我查了好长时间,事实证明我们要学会用官方文档的搜索……。这个应该 QGraphicsItem.zValue。应该是继承自QT的某个类,反正不是pyqtgraph的东西,不过所有案例里似乎有好几个地方用了。

他(ZValue)的意思就是:值越小,就越先在窗口里显示这个东西。如果值<0,就会比他的父对象更先显示出来。

第85~87行:

lr.sigRegionChanged.connect(updatePlot)
p9.sigXRangeChanged.connect(updateRegion)
updatePlot()

这块应该是用了QT了吧……我是真的看不懂……有缘再见吧……过段时间再来搞QT。

好吧我还是查了,跟信号和槽有关。emmm,我有时间再写一下吧。大体应该是这样的(我自己猜的):

被操作的对象.操作时所发出的信号(内置了).connect( 这时需要做的事情,一个函数 )

最后那个updatePlot()我也不知道为什么要加,我注释掉之后,效果没什么变化。

知识点:

  • pg.setConfigOptions(antialias=True):启用反锯齿
  • p = 窗口.addPlot(title='字符串 标题',  y='np一维数组'):创建一条曲线,在给定的窗口中。
  • p.plot( np一维数组, pen=(颜色元组), name='名字?')
  • p.plot( np一维数组, symbol='点类型', symbolBrush=(节点填充颜色元组), symbolSize=笔刷大小, symbolPen='节点描边相关 字符串' )
  • win.nextRow() :在画下一个曲线(win调用addPlot,而不是p调用plot)的时候,换行
  • p.plot( x轴 np一维数组, y轴 np一维数组 )
  • p.showGrid( x=True, y=True ):启用网格
  • p.setLabel( '位置 字符串', '标签名称 字符串', units='单位 字符串' )
  • p.setLogMode( x=True, y=False ):log坐标轴
  • curve.setData( 数据 ):更新当前曲线的数据(就是改变形状)。
  • p.plot( 数据, fillLevel=水平线, brush=(颜色元组) )
  • p.showAxis( '位置 字符串', False )
  • lr = pg.LinearRegionItem( [区间 list] ):创建一个范围选择器(就先这么叫吧),并返回它
  • p.setXRange( xmin, xMax, padding=留边 )
  • lr.setRegion( [min,Max列表] )
  • p.getViewBox().viewRange():返回 [ [xmin,xMax], [ymin, yMax] ]
  • lr.getRegion():返回 [ min, Max ]
  • lr的信号:sigRegionChanged 在改变区域的时候发出
  • p的信号:sigRangeChanged 在改变视图(就是x,y轴的范围)的时候发出。相应的还有:sigXRangeChanged, sigYRangeChanged。

设置全局配置的函数:pg.setConfigOptions()

参数 参数值类型 默认值 说明
foreground mkColor( 这里的类型 ) 'd' 前景色,就是笔触的颜色
background 同上 'k' 背景色
antialias bbool FFalse 反锯齿
imageAxisOrder ‘col-major’ 或 'row-major' 'col-major'

例子:shape=(500,1000),500个1000

col-major:列扫描,先竖着画1000,再画500列

row-major:行扫描,先横着画1000,再画500行

最好放在最开始,不然可能会出问题!

画图对象间的关系:

  • 窗口(win):pg.GraphicsWindow()
  • 坐标系(p):win.addPlot()
  • 曲线(curve):p.plot()

窗口 <- (多个)坐标系 <- (多个)曲线

GraphicsWindow<-PlotItem<-PlotDataItem

窗口好像有好几种,就先用GraphicsWindow吧,其他的似乎有问题(应该有跟QT有关),我也不会改。

曲线绘制函数:plot()

参数名 参数值类型 默认值 说明
数据

list

ndarray

list,list

ndarray,ndarray

大概是空list

一个的是y

两个的是x,y

pen mkPen()    
fillLevel 必须给,不然不会启用填充 给曲线下面积,加阴影。那条水平线,水平线下面的会向上投影。
fillBrush mkBrush() 必须给,同上 控制填充类型
symbol o,s,t,d,+,之一或QPainterPath 默认没有,就是不会画点 节点的类型
symbolPen mkPen(),或者列表,每个点一个值   节点边缘控制
symbolBrush mkBrush(),或列表,同上   节点填充控制
symbolSize 数,或列表,同上   节点直径

mkPen():

—————————————————————————————————————————————————

这个系列对~终结了~

我决定换个库学……这个库简直……难受!官方都不带更新帮助文档的……我,我能怎么办~

pyqtgraph 案例 002 Basic Plotting相关推荐

  1. 台湾国立大学郭彦甫Matlab教程笔记(9) basic plotting

    台湾国立大学郭彦甫Matlab教程笔记(9) today: 1.basic plotting 2.graphical objects properties basics matlab has a po ...

  2. 台湾国立大学郭彦甫Matlab教程笔记(10) basic plotting下

    figure adjustment图形调整 1.several properties: font字体 font size 字体大小 line width axis limit tick positio ...

  3. 基于ATXMEGA128A1U-EK开发板的应用案例002: 基于SD卡热电偶温度采集应用

    By Mcuzone 实现功能:7705差分输入端外接热电偶可测得测量端温度,再与LM75所测得的冷端温度相加,就得到了热电偶端的真实温度.在1.8寸屏上会实时显示当前温度.DS3231的实时时间.当 ...

  4. python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...

    背景 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架 ...

  5. python pyqtgraph绘图库-官方示例

    pyqtgraph官网 PyQtGraph被大量应用于Qt GUI平台(通过PyQt或PySide),因为它的高性能图形和numpy可用于大量数据处理. 特别注意的是,pyqtgraph使用了Qt的G ...

  6. 《快速掌握PyQt5》第三十六章 用PyQtGraph绘制可视化数据图表

    第三十六章 用PyQtGraph绘制可视化数据图表 36.1 下载PyQtGraph 36.2 基础知识与用法 36.3 将PyQtGraph嵌入到PyQt5中 36.4 小结 <快速掌握PyQ ...

  7. 《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续更新)

    文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<Matlab使用案例> 3. 专栏目录 [MATLAB统计分析与应 ...

  8. 《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续同步更新)

    文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 集思游 」之<Matlab使用案例> 3. 专栏目录 [MATLAB统计分析与应用100例]案 ...

  9. 泰坦尼克数据集预测分析_探索性数据分析—以泰坦尼克号数据集为例(第1部分)

    泰坦尼克数据集预测分析 Imagine your group of friends have decided to spend the vacations by travelling to an am ...

  10. QCustomPlot 1.0.1学习(1)-下载和使用QCustomPlot

    1.QCustomPlot介绍 QCustomPlot is a Qt C++ widget for plotting and data visualization. It has no furthe ...

最新文章

  1. Spring Boot ApplicationContextRunner 测试指南
  2. 用户变量和系统变量的区别是什么?
  3. css 两边宽度固定中间自适应宽度
  4. Flask框架从入门到精通之路由(三)
  5. InnoDB Spin rounds per wait在32位机器上可能为负
  6. IntelliJ IDEA2017 激活方法 最新的
  7. java猜数字小游戏_Java实现简单猜数字小游戏
  8. mysql 更改root密码字段不存在_初次登陆MySQL修改密码是出现Unknown column 'password' in 'field list'的解决方法...
  9. NLP--- 将改变你未来沟通方式的7种NLP技术(第二部分)
  10. 数据分析方向之连续性的价值分析
  11. 计算机专业毕设java选题参考
  12. mysql服务启动中但总是闪退_MySql闪退和服务无法启动的解决方法
  13. 银联标准之MAC算法实现(POS终端加密)
  14. linux让别人电脑蓝屏,愚人节必备,教你制作整人神器,用代码实现计算机蓝屏...
  15. 《C》C语言实现DCT算法
  16. 磁记录材料和计算机0101,信息磁性功能材料
  17. mysql 重做日志原理_Oracle恢复内部原理(重做日志)
  18. PROFINET I/O设备初步开发成功发帖庆贺一下
  19. awk使用手册(全)
  20. DM6467的CAN模块调试(SPI转CAN)

热门文章

  1. 鲁四海解读中国大数据发展10大趋势5大挑战
  2. C语言的奇技淫巧(1-50)
  3. 《是男人就下100层》真的有隐藏剧情!B站up主数月破解
  4. 基于handsome主题的一些美化修改
  5. LaTeX使用tikz-imagelabels宏包在图片上添加标签、文字等
  6. 用计算机制作演示文稿教案博客,制作演示文稿[教案].doc
  7. Windows视频桌面壁纸实现(libvlc)(类似于wall paper engine效果)
  8. OpenAI 最强对话模型 ChatGPT 注册使用笔记
  9. autojs之获取ip(内网ip和公网ip)
  10. 极狐gitlib的安装和使用