Pyqtgraph库基本功能介绍完结篇
1 说明:
=====
1.1 继续讲解Pyqtgraph库的其他功能:
1.2 回顾本人早前的2篇有关介绍:
第1篇:《Pyqtgraph是Python平台上一种功能强大的2D/3D绘图库》
第2篇:《Pyqtgraph库:作为数据可视化部分的python作图详解》
第3篇:就是今天这篇,就是最后一篇。
2 FillBetweenItem:
=============
2.1 代码:# -*- coding: utf-8 -*- import pyqtgraph as pg from pyqtgraph.Qt import QtGui, QtCore import numpy as np win = pg.plot() win.setWindowTitle("pyqtgraph example: FillBetweenItem") #x和y坐标轴取值范围 win.setXRange(-10, 10) win.setYRange(-10, 10) N = 200 #等差数列,从-10到10,生成200个等差数列 x = np.linspace(-10, 10, N) #返回e的幂次方 gauss = np.exp(-x**2 / 20.) #返回来一个给定形状和类型的用0填充的数组 mn = mx = np.zeros(len(x)) curves = [win.plot(x=x, y=np.zeros(len(x)), pen="k") for i in range(4)] #颜色,2种方法0~10法---少见;元组法()---常见 brushes = [0.5, (100, 100, 255), 0.5] #填充色列表 fills = [pg.FillBetweenItem(curves[i], curves[i+1], brushes[i]) for i in range(3)] for f in fills: win.addItem(f) def update(): global mx, mn, curves, gauss, x #np.random.normal,随机正态分布 a = 5 / abs(np.random.normal(loc=1, scale=0.2)) #np.abs函数返回x(数字)的绝对值。 y1 = -np.abs(a*gauss + np.random.normal(size=len(x))) y2 = np.abs(a*gauss + np.random.normal(size=len(x))) s = 0.01 #np.where函数用法 mn = np.where(y1mx, y2, mx) * (1-s) + y2 * s curves[0].setData(x, mn) curves[1].setData(x, y1) curves[2].setData(x, y2) curves[3].setData(x, mx) #启动内部计时器 timer = QtCore.QTimer() timer.timeout.connect(update) timer.start(30) #30秒 QtGui.QApplication.instance().exec_()
2.2 效果图:
2.3 重点熟悉numpy的相关基础知识:
==========================
2.3.1 np.linspace()函数:---简单
np.linspace(-10, 10, N)
就是生成从-10到10,生成200个等差数列。
2.3.2 np.exp()函数:
exp:高等数学里以自然常数e为底的指数函数。
numpy.exp():返回e的幂次方,e是一个常数为2.71828。
2.3.3 np.zeros()函数:---简单
#返回来一个给定形状和类型的用0填充的数组。
2.3.4 np.random.normal()函数,随机正态分布。
2.3.5 np.abs()函数:返回x(数字)的绝对值---简单。
2.3.6 np.where函数用法---有点复杂,此处不讲以后可以单独说明。
3 调用GL的3D:
============
3.1 代码:from pyqtgraph.Qt import QtCore, QtGui import pyqtgraph.opengl as gl import pyqtgraph as pg import numpy as np app = QtGui.QApplication([]) w = gl.GLViewWidget() w.opts["distance"] = 40 w.show() w.setWindowTitle("pyqtgraph example: GLLinePlotItem") gx = gl.GLGridItem() gx.rotate(90, 0, 1, 0) gx.translate(-10, 0, 0) w.addItem(gx) gy = gl.GLGridItem() gy.rotate(90, 1, 0, 0) gy.translate(0, -10, 0) w.addItem(gy) gz = gl.GLGridItem() gz.translate(0, 0, -10) w.addItem(gz) def fn(x, y): return np.cos((x**2 + y**2)**0.5) n = 51 y = np.linspace(-10,10,n) x = np.linspace(-10,10,100) for i in range(n): yi = np.array([y[i]]*100) d = (x**2 + yi**2)**0.5 z = 10 * np.cos(d) / (d+1) #np.vstack():在竖直方向上堆叠;反之,np.hstack():在水平方向上平铺 pts = np.vstack([x,yi,z]).transpose() plt = gl.GLLinePlotItem(pos=pts, color=pg.glColor((i,n*1.3)), width=(i+1)/10., antialias=True) w.addItem(plt) QtGui.QApplication.instance().exec_()
3.2 效果图:
4 制作表格:
========
4.1 代码:import pyqtgraph as pg from pyqtgraph.Qt import QtCore, QtGui import numpy as np app = QtGui.QApplication([]) w = pg.TableWidget() w.show() #窗口大小及可调节 w.resize(500,500) #表格名称 w.setWindowTitle("表格:TableWidget") #数据及格式,可自定义,来自外部的文件 data = np.array( [#第1行 (1, 1.6, "小王"), #第2行 (3, 5.4, "y"), #第3行 (8, 12.5, "z"), #第4行 (443, 1e-12, "w"), ], #表头及数据类型,支持中文 dtype=[("Column 1", int), ("列 2", float), ("Column 3", object)], ) w.setData(data) QtGui.QApplication.instance().exec_()
4.2 效果图:
5 plot组合:
========
5.1 代码:# -*- coding: utf-8 -*- from pyqtgraph.Qt import QtGui, QtCore import numpy as np import pyqtgraph as pg #初始化 app = pg.mkQApp() #定义mv=mainwindow=主窗口 mw = QtGui.QMainWindow() #定义窗口标题名,支持中文 mw.setWindowTitle("pyqtgraph example: PlotWidget") #定义窗口大小及可调节大小 mw.resize(800,800) #定义cw=centerwindow=中心窗口 cw = QtGui.QWidget() #挂在在mv上 mw.setCentralWidget(cw) l = QtGui.QVBoxLayout() cw.setLayout(l) #三个plot图的定义,挂在l上 pw = pg.PlotWidget(name="Plot1") l.addWidget(pw) pw2 = pg.PlotWidget(name="Plot2") l.addWidget(pw2) pw3 = pg.PlotWidget() l.addWidget(pw3) #主窗口显示 mw.show() p1 = pw.plot() p1.setPen((200,200,100)) rect = QtGui.QGraphicsRectItem(QtCore.QRectF(0, 0, 1, 5e-11)) rect.setPen(pg.mkPen(100, 200, 100)) pw.addItem(rect) #图1定义坐标轴标签:位置,标签名和单位 pw.setLabel("left", "Value", units="V") pw.setLabel("bottom", "Time", units="s") #x和y坐标轴取值范围:1e-10=100 pw.setYRange(0, 1e-10) pw.setXRange(0, 2) def rand(n): data = np.random.random(n) data[int(n*0.1):int(n*0.13)] += .5 data[int(n*0.18)] += 2 data[int(n*0.1):int(n*0.13)] *= 5 data[int(n*0.18)] *= 20 data *= 1e-12 return data, np.arange(n, n+len(data)) / float(n) def updateData(): yd, xd = rand(10000) p1.setData(y=yd, x=xd) #启动内部计时器 t = QtCore.QTimer() t.timeout.connect(updateData) t.start(50) for i in range(0, 5): for j in range(0, 3): yd, xd = rand(10000) pw2.plot(y=yd*(j+1), x=xd, params={"iter": i, "val": j}) ## Test large numbers curve = pw3.plot(np.random.normal(size=100)*1e0, clickable=True) curve.curve.setClickable(True) curve.setPen("w") ## white pen curve.setShadowPen(pg.mkPen((70,70,30), width=6, cosmetic=True)) def clicked(): print("curve clicked") curve.sigClicked.connect(clicked) lr = pg.LinearRegionItem([1, 30], bounds=[0,100], movable=True) pw3.addItem(lr) line = pg.InfiniteLine(angle=90, movable=True) pw3.addItem(line) line.setBounds([0,200]) QtGui.QApplication.instance().exec_()
5.2 效果图:
===感觉比matplotlib强大,交互性强,在制作图标和2D、3D上具有强大优势,而且很简单===
喜欢的可以自己继续研究,很简单。
记得点赞、关注、转发和收藏。
80后的感悟本人80后,赶上改革开放,赶上计划生育。小学自己上学放学,没有课后班,不饿不回家,双休日和小伙伴一起玩或帮助父母干活。寒暑假就去亲戚家串门,刷电视剧,西游记和新白娘子传奇假期必播。
宝贝,我也是偶然成为你的妈妈十月怀胎,呱呱坠地,我当妈妈了。手忙脚乱的给你喂奶,一把屎一把尿的把你养大。我从一个爱美的少女,变成一个不修边幅的妈妈。看着你牙牙学语,蹒跚学步,肉嘟嘟的小嘴巴里喊着妈妈,妈妈。我
80后的小学时代本人80后,幼儿园没上,不愿意去。7周岁上小学,零基础学语文数学,老师很负责,成绩还过的去。下课10分钟,和同学们玩跳皮筋,扔沙包,踢瓦块,丢手绢,老鹰抓小鸡等等等等,每天在学校就
什么是自主招生?包括国家重点大学自主招生与高职自主招生两大类什么是自主招生?也就是自主选拔。目前,我国的自主招生分为两类,包括国家重点大学自主招生与高职院校自主招生两大类。写在前面目前很多学校都有自主招生,大多数人对于这种不了解。其实,这是
国家承认的成人学历有哪些?出来社会后,想提升学历大专本科,国家承认的有哪几种?四种方式,分别是自学考试网络教育成人高考和国家开放大学。以上四种形式均属于国家承认的成人继续教育考试形式,考生毕业后拿到的是学信
中秋佳节寻快乐今天是中秋之日,由于周大哥的夫人身体欠佳,老朋友们不宜相约外出赏月,所以选择了到大哥家团聚。周大哥的夫人名桂香,巧得很,金秋时节桂花儿香,来到大哥家里看望桂香老朋友,岂不是别有一番
牛掰的万盛人我的名字叫国庆李国庆图片李国庆老家在湖北当阳,目前在区经济信息局挂职,任副局长,分管招商科和军民融合发展服务中心,协管信息化推进科和大数据应用发展中心投资促进科。说起名字的来历,李国庆是家族里的国字辈
牛掰的万盛人我的名字叫国庆陈国庆图片9月23日,在南桐镇南桐村桃子村民小组的一家院坝内,陈国庆正在直播。我是1985年10月1日出生的,父母没有丝毫犹豫就给我起了国庆这个名字。国庆这个名字能给我带来正能量,我觉得
万盛观察国庆快乐!致敬万盛国庆最可爱的人(一)金秋送爽,丹桂飘香当国庆长假来临举国同庆合家欢乐的背后有这么一群人在默默坚守兢兢业业,勤勤恳恳在平凡的岗位上一如既往地坚守社区服务不停歇他们用坚守诠释欢庆用实际行动表达对祖国的祝福
牛掰的万盛人我的名字叫国庆梅国庆图片一名95后叫国庆,总让人感觉老成,而家住建和丽都小区的梅国庆却不以为意,他认为比起同时代叫轩宇浩瑞的人,自己的名字很酷。梅国庆回忆,他的名字是爷爷起的,因为他恰巧出生在国庆节的
如何教小朋友下象棋?爸妈可以这样做,既能开发智力还能激发兴趣如何教小朋友下象棋?各位爸爸妈妈可以这样做。不仅可以提高小朋友们对象棋的兴趣,还有助于开发小朋友的智力。象棋在我国流传已久,学会下象棋的话,不仅可以培养孩子的耐心思考能力还可以帮助