pyqtgraph 案例 002 Basic Plotting
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相关推荐
- 台湾国立大学郭彦甫Matlab教程笔记(9) basic plotting
台湾国立大学郭彦甫Matlab教程笔记(9) today: 1.basic plotting 2.graphical objects properties basics matlab has a po ...
- 台湾国立大学郭彦甫Matlab教程笔记(10) basic plotting下
figure adjustment图形调整 1.several properties: font字体 font size 字体大小 line width axis limit tick positio ...
- 基于ATXMEGA128A1U-EK开发板的应用案例002: 基于SD卡热电偶温度采集应用
By Mcuzone 实现功能:7705差分输入端外接热电偶可测得测量端温度,再与LM75所测得的冷端温度相加,就得到了热电偶端的真实温度.在1.8寸屏上会实时显示当前温度.DS3231的实时时间.当 ...
- python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...
背景 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架 ...
- python pyqtgraph绘图库-官方示例
pyqtgraph官网 PyQtGraph被大量应用于Qt GUI平台(通过PyQt或PySide),因为它的高性能图形和numpy可用于大量数据处理. 特别注意的是,pyqtgraph使用了Qt的G ...
- 《快速掌握PyQt5》第三十六章 用PyQtGraph绘制可视化数据图表
第三十六章 用PyQtGraph绘制可视化数据图表 36.1 下载PyQtGraph 36.2 基础知识与用法 36.3 将PyQtGraph嵌入到PyQt5中 36.4 小结 <快速掌握PyQ ...
- 《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续更新)
文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<Matlab使用案例> 3. 专栏目录 [MATLAB统计分析与应 ...
- 《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续同步更新)
文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 集思游 」之<Matlab使用案例> 3. 专栏目录 [MATLAB统计分析与应用100例]案 ...
- 泰坦尼克数据集预测分析_探索性数据分析—以泰坦尼克号数据集为例(第1部分)
泰坦尼克数据集预测分析 Imagine your group of friends have decided to spend the vacations by travelling to an am ...
- QCustomPlot 1.0.1学习(1)-下载和使用QCustomPlot
1.QCustomPlot介绍 QCustomPlot is a Qt C++ widget for plotting and data visualization. It has no furthe ...
最新文章
- Spring Boot ApplicationContextRunner 测试指南
- 用户变量和系统变量的区别是什么?
- css 两边宽度固定中间自适应宽度
- Flask框架从入门到精通之路由(三)
- InnoDB Spin rounds per wait在32位机器上可能为负
- IntelliJ IDEA2017 激活方法 最新的
- java猜数字小游戏_Java实现简单猜数字小游戏
- mysql 更改root密码字段不存在_初次登陆MySQL修改密码是出现Unknown column 'password' in 'field list'的解决方法...
- NLP--- 将改变你未来沟通方式的7种NLP技术(第二部分)
- 数据分析方向之连续性的价值分析
- 计算机专业毕设java选题参考
- mysql服务启动中但总是闪退_MySql闪退和服务无法启动的解决方法
- 银联标准之MAC算法实现(POS终端加密)
- linux让别人电脑蓝屏,愚人节必备,教你制作整人神器,用代码实现计算机蓝屏...
- 《C》C语言实现DCT算法
- 磁记录材料和计算机0101,信息磁性功能材料
- mysql 重做日志原理_Oracle恢复内部原理(重做日志)
- PROFINET I/O设备初步开发成功发帖庆贺一下
- awk使用手册(全)
- DM6467的CAN模块调试(SPI转CAN)
热门文章
- 鲁四海解读中国大数据发展10大趋势5大挑战
- C语言的奇技淫巧(1-50)
- 《是男人就下100层》真的有隐藏剧情!B站up主数月破解
- 基于handsome主题的一些美化修改
- LaTeX使用tikz-imagelabels宏包在图片上添加标签、文字等
- 用计算机制作演示文稿教案博客,制作演示文稿[教案].doc
- Windows视频桌面壁纸实现(libvlc)(类似于wall paper engine效果)
- OpenAI 最强对话模型 ChatGPT 注册使用笔记
- autojs之获取ip(内网ip和公网ip)
- 极狐gitlib的安装和使用