我們都知道matplotlib 是偏向底層用于可視化數據處理的庫,我們在繪制圖表的時候主要步驟主要有四大步驟:
- 導入 matplotlib.pplot庫
- 使用pandas/numpy模塊對數據進行整分析理
- 調用pyplot中繪制方法繪制折線圖、餅圖等
- 調用pyplot.show展示出來
在matplotlib官網上,可以看到豐富多樣的圖表教程
以上是我們上一期學習的內容,對于matplotlib模塊來說它的底層是怎么工作的?
俗話說,學習要做到知其然,也要知其所以然,這樣才能更好使用matplotlib模塊相關方法。
1. matplotlib 框架組成
matplotlib 模塊在眾多數據可視化庫中可以可以實現復雜的底層操作。像gglot、seaborn、plotnline 底層都是基于matplotlib 模塊去封裝不同風格的統計圖表。
matplotlib 模塊底層主要是由三部分組成腳本層、美工層和后端層。
- 腳本層:為用戶提供可視化編程的接口
- 美工層:有大量繪制圖表方法的接口
- 后端:連接硬件,處理圖像元素的接口
PS:matplotlib框架說明
2. 腳本層(scripting)
腳本層屬于matplotlib模塊中最上層,主要為用戶提供可視化編程的接口,代表pyplot模塊。
對于普通用戶,pyplot接口可以滿足大多數文本的圖像和坐標的生成,傳給后端進行處理。
matplotlib.pyplot接口導入時,通常是import matplotlib.pyplot as plt
- 導入pyplot 模塊并重名為plt
- pyplot 模塊加載時,會對本地的配置文件進行分析
- 同時會聲明默認的后端,例如聲明創建Figure對象
- 將腳本深拷貝給后端后退出
pyplot 模塊提調用matplotlib的方法
- 供給用面向oo調用風格,顯示創建圖形和軸調用其方法
- 依靠pyplot 自動創建和管理圖形和軸,并使用pyplot函數進行繪圖
用戶只需調用pyplot模塊相關的方法,就可以繪制漂亮的圖表啦
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中間層,主要進行數據相關的繪制工作,繪制圖表中的標題、直線、刻度等都是artist對象的實例。
artist 層特點
- 腳本層創建的Figure對象是Artist對象實例
- Artist的基類是matplotlib.artist.Artist,共享所有Artist屬性包括從美工系統到畫布坐標系統變化等
- 提供處理用戶交互動作的接口
matplotlib 圖表對象
我們可以通過如下matplotlibe圖表中可以看到一張圖表由多個對象組合而成的。
matplotlib 圖表對象說明
對象 | 說明 |
---|---|
Figure | 圖形,彈出框口即是figure |
axes | 子圖 |
title | 標題 |
legend | 圖例 |
Major tick | 大標尺刻度 |
Minor tick | 小標尺刻度 |
Line | 線型圖 |
axis label | 坐標指標說明 |
Marker | 數據標準說明 |
Artist 對象說明
ArtIst 對象包含Figure、Axes、Axis對象,是它們的基類,其Artist對象都全部位于后端提供的canvas畫布上。
Figure
- 一個圖表窗口即是一個figure對象
- figure對象中至少要包含一個Axes對象子圖
- figure對象中可以包含title、label等Artist對象
- figure對象中包含的不可見對象canvas。繪制圖像時會進行調用
Axes
- axes 是子圖對象,子圖對象指的是x和y軸.
- axes 常用有set_xlabel()、set_ylabel()設置x和y軸坐標名字
Axis
- axis 是代表數據軸的對象,主要用于表示刻度位置和顯示數值
- axis 包含用于控制刻度位置的Locator和顯示刻度Formatter兩個子對象
Artist對象層級結構圖如下
4. 后端層(backend)
后端層主要是matplotlib 模塊底層實現,主要實現了三方面的抽象接口 4.
FigureCanvas:對Artist對象繪制提供畫布功能進行封裝
matplotlib 模塊底層是基于硬的用戶畫面,FigureCaves接口主要完成前期初始化工作
- 將自身嵌入到原生的QT視覺窗口(QtGui.QMainWindow)
- 將matplotlib的繪制命令Render轉換到canvas上(QtGui.QPainter)
- 將原生Qt事件轉成matplotlib的Event接口,Event接口接收到信息后進行處理
Renderer: 相當于畫筆,執行繪制動作
Render 主要提供硬件底層的繪圖接口,能對Artist繪制命令進行執行。
- Render 接口最初源于GDK的Drawable接口,后來轉換成獨立后端的原生繪圖命令。
- matplotlib 是支持C++模塊庫基于像素點核心渲染器agg
- 可以進行2d反鋸齒渲染、PNG圖片生成
Event: 處理用戶鍵盤和鼠標輸入事件
Event 框架是將key-press-event或者mouse-motion-event等UI事件映射到鍵盤或者鼠標事件類中。
- 用戶可以連接事件,使用函數進行回調
- 圖形與數據交互
總結:
本文對matplotlib模塊底層實現進行深入地認識和學習。在matplotlib模塊中底層是基于C++模板庫Agg來渲染圖片效果的,同時提高腳本層pyplot讓非專業的人也能輕松處理數據展示數據。
到此這篇關于Python matplotlib底層原理解析的文章就介紹到這了,更多相關Python matplotlib底層原理內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://juejin.cn/post/7029297425575575560