龙空技术网

Pyqtgraph库:作为数据可视化部分的python作图详解

易三一世 852

前言:

目前兄弟们对“python数据绘图”大约比较珍视,朋友们都想要知道一些“python数据绘图”的相关资讯。那么小编在网络上搜集了一些有关“python数据绘图””的相关知识,希望同学们能喜欢,咱们一起来了解一下吧!

1 说明:

=====

1.1 Pyqtgraph库:优于matplotlib库,可交互的、多平台的、适合2D和3D的一个python库。

1.2 本人已经介绍基本情况:文章链接。

《Pyqtgraph是Python平台上一种功能强大的2D/3D绘图库》

1.3 本次讲解Pyqtgraph库的数据可视化作图。

1.4 环境:(亲测过,如果报错,那就是看看环境是不是不对,一般不会的)

华为笔记本电脑、深度deepin-linux操作系统、python3.8和微软vscode编辑器。

2 折线图:line

===========

2.1 单1折线图,代码:

# -*- coding: utf-8 -*-#折线图---单1的折线图from pyqtgraph.Qt import QtGui, QtCoreimport pyqtgraph as pgfrom pyqtgraph.widgets.RemoteGraphicsView import RemoteGraphicsView#初始化定义app = pg.mkQApp()v = RemoteGraphicsView(debug=False)v.show()v.setWindowTitle('单1的折线图')plt = v.pg.PlotItem()v.setCentralItem(plt)#-----以下是可变部分-------#1组数据,x轴默认y1=[1,4,2,3,6,2,3,4,2,3]#x1=[2,4,6,8,10,12,14,16,18,20] #x轴指定数值plt.plot(y1, pen='g')#plt.plot(x1,y1, pen='g') #这是指定x轴的数值和宽度#-----以上是可变部分--------QtGui.QApplication.instance().exec_()

2.2 效果图:

注意:点击鼠标左键不放拖动,可以左右上下移动;点击鼠标右键不放拖动,可以伸缩x轴。

2.3 增加2条、3条线条的方法:

#----修改部分----y1=[1,4,2,3,6,2,3,4,2,3]y2=[2,3,4,1,3,5,2,3,3,2]  y3=[2,1,2,5,4,2,4,1,4,5]plt.plot(y1, pen='g')plt.plot(y2, pen='r')plt.plot(y3, pen='w')#----修改部分----

2.4 图:

2.5 高级一点:带图例

import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiplt = pg.plot()plt.addLegend() #启动legend,图例说明c1 = plt.plot([1,3,2,4], pen='r', symbol='o', symbolPen='r', symbolBrush=0.5, name='red plot')#fillLevel=0, 是0以上的部分,fillBrush的c2的线下到0的阴影部分的颜色c2 = plt.plot([2,1,4,3], pen='g', fillLevel=0, fillBrush=(255,255,255,30), name='green plot')QtGui.QApplication.instance().exec_()

2.6 多Y轴布局不同的3条折线图,代码:

# -*- coding: utf-8 -*-import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiimport numpy as nppg.mkQApp()pw = pg.PlotWidget()pw.show()pw.setWindowTitle('多图轴多位置的MultiplePlotAxes')#Y轴1定义p1 = pw.plotItemp1.setLabels(left='Y-axis 1') #Y轴1靠左侧,默认颜色p1.showAxis('right')#Y轴2定义和Y轴1联动设置p2 = pg.ViewBox()p2.setXLink(p1)p1.scene().addItem(p2)p1.getAxis('right').linkToView(p2)#标签颜色自定义p1.getAxis('right').setLabel('Y-axis2', color='#0000ff')#Y轴3定义和Y轴1联动设置p3 = pg.ViewBox()p3.setXLink(p1)p1.scene().addItem(p3)ax3 = pg.AxisItem('right')ax3.linkToView(p3)#标签颜色自定义ax3.setLabel('Y-axis 3', color='#ff0000')#布局,ax3挂子在p1上,p1.layout.addItem(ax3, 2, 3)def updateViews():    global p1, p2, p3    p2.setGeometry(p1.vb.sceneBoundingRect())    p3.setGeometry(p1.vb.sceneBoundingRect())    p2.linkedViewChanged(p1.vb, p2.XAxis)    p3.linkedViewChanged(p1.vb, p3.XAxis)updateViews()p1.vb.sigResized.connect(updateViews)#数据,指的是y轴的数据,x轴默认;pen是线条颜色#一般修改数据部分p1.plot([1,2,4,8,16,32])p2.addItem(pg.PlotCurveItem([10,20,40,80,40,20], pen='b'))p3.addItem(pg.PlotCurveItem([3200,1600,800,400,200,100], pen='r'))QtGui.QApplication.instance().exec_()

2.7 效果图:

3 条形图:

=======

3.1 可自定义且固定高和宽,代码:

import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiwin = pg.plot()win.setWindowTitle('pyqtgraph example: BarGraphItem')#数据,可自定义y1=[3,5,6,9,7,1,5,2,4,8]x=[1,2,3,4,5,6,7,8,9]#注意这种条形图,高和宽是自定义且固定的bg = pg.BarGraphItem(x=x,y=y1, height=4, width=0.5,brush='g')win.addItem(bg)#if __name__ == '__main__': #放在这里主要是知道有这种格式    #QtGui.QApplication.instance().exec_() #同上QtGui.QApplication.instance().exec_()

3.2 效果图:

3.3 底座水平的柱状图,代码:

import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiwin = pg.plot()win.setWindowTitle('pyqtgraph example: BarGraphItem')#数据,可自定义#x就是x轴的取值,height就是y轴的取值#bg=pg.BarGraphItem(x=range(5), height=[1,5,2,4,3], width=0.5,brush='g')x=range(5)h=[1,5,2,4,3]  #这么罗列出来,便于以后读取txt,csv,excel等数据bg=pg.BarGraphItem(x=x, height=h, width=0.5,brush='b') #等同上面,注意b是blue,不是blackwin.addItem(bg)QtGui.QApplication.instance().exec_()

3.4 效果图:

3.5 2组数据并列的柱状图,代码:

import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiwin = pg.plot()win.setWindowTitle('pyqtgraph example: BarGraphItem')#数据,可自定义x1=[0,1,2,3,4]x2=[0.5,1.5,2.5,3.5,4.5]#h类似与y的数据h1=[1,5,2,4,3] h2=[4,2,5,1,2] bg1=pg.BarGraphItem(x=x1, height=h1, width=0.2,brush='b')win.addItem(bg1)bg2=pg.BarGraphItem(x=x2, height=h2, width=0.2,brush='g')win.addItem(bg2)QtGui.QApplication.instance().exec_()

3.6 效果图:

3.7 2组数据上下柱比较,代码:

import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiwin = pg.plot()win.setWindowTitle('pyqtgraph example: BarGraphItem')#数据,可自定义#x1=[0,1,2,3,4]x1=range(5)  #等同于上面#h类似与y的数据h1=[1,5,2,4,3] h2=[4,2,5,1,2] bg1=pg.BarGraphItem(x=x1, height=h1, width=0.2,brush='b')win.addItem(bg1)#注意是y0等于h1,说明绿色的bg2柱2是在柱1的头上竖起来的bg2=pg.BarGraphItem(x=x1, y0=h1,height=h2, width=0.2,brush='g')win.addItem(bg2)QtGui.QApplication.instance().exec_()

3.8 效果图:

4 散点图:Scatter

==============

4.1 代码:

import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiimport numpy as npwin = pg.plot()win.setWindowTitle('pyqtgraph example: beeswarm')#d相当于y轴的数据d=[12,24,18,43,22]#size的5代表5组,20代表20个散点;normal是一个正态分布data = np.random.normal(size=(5,20))data[0] += d[0]data[1] += d[1]data[2] += d[2]data[3] += d[3]data[4] += d[4]for i in range(5):    xvals = pg.pseudoScatter(data[i], spacing=0.4, bidir=True) * 0.2    win.plot(x=xvals+i, y=data[i], pen=None, symbol='o', symbolBrush=pg.intColor(i,6,maxValue=128))QtGui.QApplication.instance().exec_()

4.2 效果图

4.3 增加bar,增加代码,位于for上一行

#增加bar,高度到达散点图平均值位置;宽度0.5;brush此处取数值,3代表绿色='g',brush='g'bar = pg.BarGraphItem(x=range(5), height=data.mean(axis=1), width=0.5, brush='g')win.addItem(bar)

4.4 效果图

4.5 增加误差棒:error bars,在for的上一行增加代码:

## Make error bars;误差棒err = pg.ErrorBarItem(x=np.arange(5), y=data.mean(axis=1), height=data.std(axis=1), beam=0.5, pen={'color':'r', 'width':2})win.addItem(err)

4.6 效果图:

5 鼠标点击事件

5.1 举例:线条变粗,代码:

import pyqtgraph as pgfrom pyqtgraph.Qt import QtCore, QtGuiimport numpy as npwin = pg.plot()win.setWindowTitle('pyqtgraph example: Plot data selection')curves = [    pg.PlotCurveItem(y=np.sin(np.linspace(0, 20, 1000)), pen='r', clickable=True),    pg.PlotCurveItem(y=np.sin(np.linspace(1, 21, 1000)), pen='g', clickable=True),    pg.PlotCurveItem(y=np.sin(np.linspace(2, 22, 1000)), pen='b', clickable=True),    ]              def plotClicked(curve):    global curves    for i,c in enumerate(curves):        if c is curve:            #点击事件,线条变粗            c.setPen('rgb'[i], width=8)        else:            c.setPen('rgb'[i], width=1)            for c in curves:    win.addItem(c)    c.sigClicked.connect(plotClicked)QtGui.QApplication.instance().exec_()

5.2 效果图:

比官网资料还要详细,小白都会使用。

自己整理并分享出来,喜欢的就点赞,关注,转发和收藏。

标签: #python数据绘图 #vb程序做数据折线图