Python?matplotlib底層原理解析
復(fù)習(xí)回顧:
前期,我們已經(jīng)學(xué)習(xí)了matplotlib模塊相關(guān)的基礎(chǔ)知識(shí),對(duì) matplotlib
模塊折線圖、餅圖、柱狀圖進(jìn)行操作。
我們都知道matplotlib
是偏向底層用于可視化數(shù)據(jù)處理的庫,我們?cè)诶L制圖表的時(shí)候主要步驟主要有四大步驟:
- 導(dǎo)入
matplotlib.pplot
庫 - 使用
pandas/numpy
模塊對(duì)數(shù)據(jù)進(jìn)行整分析理 - 調(diào)用
pyplot
中繪制方法繪制折線圖、餅圖等 - 調(diào)用
pyplot.show
展示出來
在matplotlib官網(wǎng)上,可以看到豐富多樣的圖表教程
?
以上是我們上一期學(xué)習(xí)的內(nèi)容,對(duì)于matplotlib
模塊來說它的底層是怎么工作的?
俗話說,學(xué)習(xí)要做到知其然,也要知其所以然,這樣才能更好使用matplotlib
模塊相關(guān)方法。
1. matplotlib 框架組成
matplotlib
模塊在眾多數(shù)據(jù)可視化庫中可以可以實(shí)現(xiàn)復(fù)雜的底層操作。像gglot
、seaborn
、plotnline
底層都是基于matplotlib
模塊去封裝不同風(fēng)格的統(tǒng)計(jì)圖表。
matplotlib
模塊底層主要是由三部分組成腳本層、美工層和后端層。
- 腳本層:為用戶提供可視化編程的接口
- 美工層:有大量繪制圖表方法的接口
- 后端:連接硬件,處理圖像元素的接口
2. 腳本層(scripting)
腳本層屬于matplotlib
模塊中最上層,主要為用戶提供可視化編程的接口,代表pyplot
模塊。
對(duì)于普通用戶,pyplot接口可以滿足大多數(shù)文本的圖像和坐標(biāo)的生成,傳給后端進(jìn)行處理。
matplotlib.pyplot接口導(dǎo)入時(shí),通常是import matplotlib.pyplot as plt
- 導(dǎo)入
pyplot
模塊并重名為plt - pyplot 模塊加載時(shí),會(huì)對(duì)本地的配置文件進(jìn)行分析
- 同時(shí)會(huì)聲明默認(rèn)的后端,例如聲明創(chuàng)建Figure對(duì)象
- 將腳本深拷貝給后端后退出
pyplot 模塊提調(diào)用matplotlib的方法
- 供給用面向oo調(diào)用風(fēng)格,顯示創(chuàng)建圖形和軸調(diào)用其方法
- 依靠
pyplot
自動(dòng)創(chuàng)建和管理圖形和軸,并使用pyplot函數(shù)進(jìn)行繪圖
用戶只需調(diào)用pyplot模塊相關(guān)的方法,就可以繪制漂亮的圖表啦
from matplotlib import pyplot import pandas pyplot.rcParams["font.sans-serif"]=['SimHei'] pyplot.rcParams["axes.unicode_minus"]=False pyplot.bar([1,2,3,4,5,6],[45,20,19,56,35,69]) pyplot.title("data analyze") pyplot.xlabel("元素 a") pyplot.ylabel("元素 b") pyplot.show()
3. 美工層(artist)
在美工層位于matplotlib
中間層,主要進(jìn)行數(shù)據(jù)相關(guān)的繪制工作,繪制圖表中的標(biāo)題、直線、刻度等都是artist
對(duì)象的實(shí)例。
artist 層特點(diǎn)
- 腳本層創(chuàng)建的
Figure
對(duì)象是Artist對(duì)象實(shí)例 - Artist的基類是
matplotlib.artist.Artist
,共享所有Artist
屬性包括從美工系統(tǒng)到畫布坐標(biāo)系統(tǒng)變化等 - 提供處理用戶交互動(dòng)作的接口
matplotlib 圖表對(duì)象
我們可以通過如下matplotlibe
圖表中可以看到一張圖表由多個(gè)對(duì)象組合而成的。
matplotlib 圖表對(duì)象說明
對(duì)象 | 說明 |
---|---|
Figure | 圖形,彈出框口即是figure |
axes | 子圖 |
title | 標(biāo)題 |
legend | 圖例 |
Major tick | 大標(biāo)尺刻度 |
Minor tick | 小標(biāo)尺刻度 |
Line | 線型圖 |
axis label | 坐標(biāo)指標(biāo)說明 |
Marker | 數(shù)據(jù)標(biāo)準(zhǔn)說明 |
ArtIst 對(duì)象包含Figure
、Axes
、Axis
對(duì)象,是它們的基類,其Artist對(duì)象都全部位于后端提供的canvas畫布上。
Figure
- 一個(gè)圖表窗口即是一個(gè)figure對(duì)象
- figure對(duì)象中至少要包含一個(gè)Axes對(duì)象子圖
- figure對(duì)象中可以包含title、label等Artist對(duì)象
- figure對(duì)象中包含的不可見對(duì)象canvas。繪制圖像時(shí)會(huì)進(jìn)行調(diào)用
Axes
- axes 是子圖對(duì)象,子圖對(duì)象指的是x和y軸.
- axes 常用有set_xlabel()、set_ylabel()設(shè)置x和y軸坐標(biāo)名字
Axis
- axis 是代表數(shù)據(jù)軸的對(duì)象,主要用于表示刻度位置和顯示數(shù)值
- axis 包含用于控制刻度位置的Locator和顯示刻度Formatter兩個(gè)子對(duì)象
Artist對(duì)象層級(jí)結(jié)構(gòu)圖如下
4. 后端層(backend)
后端層主要是matplotlib
模塊底層實(shí)現(xiàn),主要實(shí)現(xiàn)了三方面的抽象接口 4.
FigureCanvas:對(duì)Artist對(duì)象繪制提供畫布功能進(jìn)行封裝
matplotlib 模塊底層是基于硬的用戶畫面,F(xiàn)igureCaves接口主要完成前期初始化工作
- 將自身嵌入到原生的QT視覺窗口(QtGui.QMainWindow)
- 將matplotlib的繪制命令
Render
轉(zhuǎn)換到canvas上(QtGui.QPainter) - 將原生Qt事件轉(zhuǎn)成
matplotlib
的Event接口,Event接口接收到信息后進(jìn)行處理
Renderer: 相當(dāng)于畫筆,執(zhí)行繪制動(dòng)作
Render 主要提供硬件底層的繪圖接口,能對(duì)Artist繪制命令進(jìn)行執(zhí)行。
- Render 接口最初源于GDK的
Drawable
接口,后來轉(zhuǎn)換成獨(dú)立后端的原生繪圖命令。 - matplotlib 是支持C++模塊庫基于像素點(diǎn)核心渲染器agg
- 可以進(jìn)行2d反鋸齒渲染、PNG圖片生成
Event: 處理用戶鍵盤和鼠標(biāo)輸入事件
Event 框架是將key-press-event或者mouse-motion-event等UI事件映射到鍵盤或者鼠標(biāo)事件類中。
- 用戶可以連接事件,使用函數(shù)進(jìn)行回調(diào)
- 圖形與數(shù)據(jù)交互
總結(jié):
本文對(duì)matplotlib模塊底層實(shí)現(xiàn)進(jìn)行深入地認(rèn)識(shí)和學(xué)習(xí)。在matplotlib模塊中底層是基于C++模板庫Agg來渲染圖片效果的,同時(shí)提高腳本層pyplot讓非專業(yè)的人也能輕松處理數(shù)據(jù)展示數(shù)據(jù)。
到此這篇關(guān)于Python matplotlib底層原理解析的文章就介紹到這了,更多相關(guān)Python matplotlib底層原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python讀取圖片屬性信息的實(shí)現(xiàn)方法
這篇文章介紹了利用Python讀取圖片屬性信息的方法,讀取的內(nèi)容包括GPS 信息、圖片分辨率、圖片像素、設(shè)備商、拍攝設(shè)備等,有需要的朋友們可以參考借鑒。2016-09-09python尋找list中最大值、最小值并返回其所在位置的方法
今天小編就為大家分享一篇python尋找list中最大值、最小值并返回其所在位置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python數(shù)據(jù)分析的八種處理缺失值方法詳解
缺失值可能是數(shù)據(jù)科學(xué)中最不受歡迎的值,然而,它們總是在身邊。忽略缺失值也是不合理的,因此我們需要找到有效且適當(dāng)?shù)靥幚硭鼈兊姆椒?/div> 2021-11-11django模型類中,null=True,blank=True用法說明
這篇文章主要介紹了django模型類中,null=True,blank=True用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python數(shù)據(jù)分析?Pandas?Series對(duì)象操作
這篇文章主要介紹了Python數(shù)據(jù)分析之Pandas?Series對(duì)象,文章基于python的相關(guān)資料展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05python GUI庫圖形界面開發(fā)之PyQt5結(jié)合Qt Designer創(chuàng)建信號(hào)與槽的詳細(xì)方法與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5結(jié)合Qt Designer創(chuàng)建信號(hào)與槽的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令
這篇文章主要給大家介紹了關(guān)于VSCode中Python環(huán)境配置、創(chuàng)建虛擬環(huán)境及pip的一些常用命令,Python環(huán)境的創(chuàng)建是在VSCode中很常見的一個(gè)需求,特別是當(dāng)我們需要開發(fā)或者調(diào)試多個(gè)Python項(xiàng)目時(shí),使用虛擬環(huán)境是一種好的方式,需要的朋友可以參考下2023-10-10Windows環(huán)境下python環(huán)境安裝使用圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows環(huán)境下python安裝使用圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03在前女友婚禮上用python把婚禮現(xiàn)場的WIFI名稱改成了
大家好,我是Lex 喜歡欺負(fù)超人那個(gè)Lex 擅長領(lǐng)域:python開發(fā),網(wǎng)絡(luò)安全滲透,Windows域控Exchange架構(gòu) 今日重點(diǎn):python暴力拿下WiFi密碼;python拿下路由器管理頁面 代碼干貨滿滿,建議收藏+實(shí)操!有問題及需要,請(qǐng)留言哦2021-08-08最新評(píng)論