9個動圖帶你進入PyQtGraph的強大可視化世界

2021-12-28 州的先生
PyQtGraph是一個建立在PyQt/PySide之上的Python數據可視化圖形界面庫,其性能強、速度快,能夠勝任大部分交互式的2D、3D圖形繪製,可以搞定數據科學領域大量的數據可視化工作。
州的先生之前繪製的A股股票動態K線圖,就是使用PyQtGraph繪製的。PyQtGraph官方提供了很好的示例來供學習者了解PyQtGraph的功能,下面我們通過9個圖形,來一窺PyQtGraph的可視化世界。基礎的數組繪製折線圖

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

一個圖形中繪製多條折線

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

在圖形中繪製點

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

使用圖形參數

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

散點圖、坐標軸標籤和刻度

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

實時數據更新繪圖

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

填充圖形、禁用坐標軸

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

區域選擇

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

放大區域選擇

# 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_()

運行上述代碼,會得到如下動圖所示的圖形界面:

全家福

最後,來一個全家福:

相關焦點

  • Python數據可視化之高速繪圖神器PyQtGraph庫,強烈建議收藏
    但是這些繪圖庫也存在著不足,即在圖形繪製速度上有所欠缺,特別是對於科研算法方面的數據可視化,很多情況需要實時繪圖,要求能夠提供儘可能快的繪製刷新速度,那這些庫顯的有些力不從心了。而我們下面要介紹的繪圖庫-PyQtGraph庫,則在繪圖速度方面表現尤其突出,在不失繪圖美觀、功能強大的前提下,在繪圖速度方面作了極大的優化,特別適合於實時數據採集的動態圖形繪製場合。
  • Python數據可視化:使用pyqtgraph庫輕鬆繪製股票K線圖
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對於matplotlib庫,由於其在內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此它在大數據量的處理及快速顯示方面有著天然的優勢,非常適合於需要快速繪圖更新、視頻或實時交互性的操作場合,在數學、科學和工程領域都有著廣泛的應用。
  • Python中使用pyqtgraph庫實現數據可視化之逐點刷新波形圖
    背景pyqtgraph是Python平臺上一種功能強大的2D/3D在使用pyqtgraph庫繪製圖形的編程方法上,前面一篇文章已經給了一個最簡單的例子以及一個連續刷新波形圖的例子,下面再給一個逐點刷新波形圖的例子。
  • Python語言使用pyqtgraph庫實現數據可視化之自定義坐標軸信息
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對於matplotlib庫,由於內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此,它在大數據量的數字處理和快速顯示方面有著巨大的優勢
  • Python使用pyqtgraph庫實現數據可視化之多條曲線繪製方法
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D對於多條曲線的快速繪製方式,有兩種方案可供選擇,一種是將多條曲線合併顯示在一幅繪圖區域上,另一種方案是將多條曲線顯示在不同的繪圖區域上,對於這兩種繪製方案,下面通過例子來演示在Python語言中使用pyqtgraph
  • 【州末小課堂】使用PyQtGraph繪製上證指數精美走勢圖
    在本例中,我們需要使用到pyqtgraph模塊、numpy模塊和tushare模塊我們使用tushare模塊的get_hist_data()方法獲取上證指數從2017年10月到2017年12月的歷史行情數據:
  • HugeGraph發布可視化平臺Hubble首個版本
    該版本全面升級平臺可視化工具,打造一站式圖服務,從數據建模,到數據快速導入,再到數據的在線、離線分析,以及圖的統一管理,實現了圖應用全流程的嚮導式操作,旨在提升社區用戶的使用順暢度,降低使用門檻,提供更為高效易用的使用體驗。
  • 可視化動圖帶你一步步講解棧有什麼用
    可視化動圖帶你一步步講解棧有什麼用 棧(stack)是限定僅在表尾(即棧頂)進行插入和刪除操作的線性表。對於棧來說,出棧只能將棧頂元素刪除。因此,執行一次出棧動作,就會刪除掉棧頂元素20。
  • 河流圖(Stream graph)
    推薦一個新的數據可視化方式以及用來作圖的兩個包.
  • 31個驚豔的數據可視化作品,讓你感受「數據之美」!
    參考連結:http://polygraph.cool/miles/4.風雨氣溫圖Ventusky 是一個氣象數據可視化工具,它展現了全球各地的天氣狀況。即時顯示世界各地天氣的總趨勢,左側是一些關於氣候的不同維度。
  • 動圖可視化講評——凹槽模型補充例
    閔鑫相關內容《動量守恆之凹槽模型分析1》《動圖可視化講評——動量守恆之凹槽模型分析2》【基本模型】如圖所示,質量為m1=3kg動圖語音/微課可視化講評系列建設中:《動圖可視化講評——2017全國III,25題》《動圖微課講評——動生電動勢問題分析一例1》《動圖語音可視化講評——2020深圳二模,25題》《動圖語音可視化講評——
  • 盤點:十大可視化作品 你真的懂可視化嗎?
    我們既是數據的生產者,又是數據的使用者,但往往我們拿到的數據都是錯亂無章的,若想探究其背後的事實,就需要藉助數據可視化。在專業的專利分析中更加離不開可視化的技術,提高專利的分析質量,寫出更加「高大上」的專利分析報告,你需要提高自己可視化的能力,各位看官可能會說,我的表格製圖能力滿分。但請小心,可能你那只是單純的數據展現哦。
  • Echart | 能輔助展示你互動設計思想的數據可視化小工具!
    再如,路徑圖:= echarts.dataTool.gexf.parse(xml); var categories = []; for (var i = 0; i < 9; i++) { categories[i] = { name: '類目' + i }; } graph.nodes.forEach(function (node)
  • PyQt 5信號與槽的幾種高級玩法
    class MyWidget(QWidget): # 無參數的信號 Signal_NoParameters = pyqtSignal() # 帶一個參數(整數)的信號 Signal_OneParameter = pyqtSignal(int) # 帶一個參數(整數或者字符串)的重載版本的信號 Signal_OneParameter_Overload = pyqtSignal([int]
  • 一文直擊Graph Embedding圖表示學習的原理及應用
    關注公眾【淺夢的學習筆記】後臺回復【ge】可下打包下載本文涉及的所有論文和代碼匯總~導讀:我們都知道在數據結構中,圖是一種基礎且常用的結構。現實世界中許多場景可以抽象為一種圖結構,如社交網絡,交通網絡,電商網站中用戶與物品的關係等。
  • Python 可視化神器--Plotly
    學習Python是做數分析的最基礎的一步,數據分析離不開數據可視化。Python第三方庫中我們最常用的可視化庫是 pandas,matplotlib,pyecharts,當然還有 Tableau,另外最近在學習過程中發現另一款可視化神器-Plotly,它是一款用來做數據分析和可視化的在線平臺,功能非常強大,可以在線繪製很多圖形比如條形圖、散點圖、餅圖、直方圖等等。
  • GraphVite 超高速圖表示學習系統,1 分鐘可學百萬節點
    該系統支持多 GPU 並行,它可以擴展到百萬級甚至十億級的圖。節點嵌入、知識圖譜嵌入和圖形&高維數據可視化。GraphVite 支持的 3 種任務模型此外,它還涵蓋了 9 個主流的模型,以及它們在一系列標準數據集上的基準。
  • 詞彙星空:如何構建一個炫酷的 Word2Vec 可視化
    word2vec嵌入構建了最近鄰居圖(Nearest neighbor graph)。我最開始渲染 Word2vec 圖的結果是數量龐大的數字集群。 word2vec模型真的很喜歡把數字放在一起(直觀上我認為這很有道理)。唉,這使得可視化變得無趣。
  • 一圖抵千言:帶你了解最直觀的神經網絡架構可視化
    /我認為:一張好的圖抵得上一千個公式。如果你喜歡我的觀點,那麼我鼓勵你用像火花或五顏六色的大腦這樣的 3D 動畫可視化真正的卷積網絡。有時候這種取捨也沒那麼明確。像下面這張圖,它體現的是數據的可視化還是數據的藝術?