微信公衆號:「Python讀財」
如有問題或建議,請公衆號留言
Pandas教程寫的差不多了,來寫一寫與數據可視化相關的Matplotlib
系列教程吧。讀過Pandas系列文章的讀者應該都知道,我寫文章更多的會融入我對這個東西的理解,Matplotlib
系列也是如此。這個系列會涉及Matplotlib
的一些簡單的概念、繪圖原理、常見圖形的繪製以及一些高階的繪圖技巧。學完之後,期待達到的效果是可以用Matplotlib
畫出這樣的圖形。
這篇文章先介紹一下Matplotlib
的一些簡單基本概念和繪圖原理,直入正題~
不知道有多少同學和我一樣,在剛接觸Matplotlib
時,會被書上的plt
、ax
以及subplots
等各種概念所迷惑,心裏存在無數個問號,這些究竟是啥?畫出來的圖不是一樣的嗎?他們有啥區別?下面就一步步來解答這些迷惑。
概念引入
首先,我們應該要了解一張用Matplotlib
畫出來的圖的具體構造,引用一張官方的圖:
我們先主要看圖裏面紅色框的Figure
和藍色框的Axes
,如何理解這兩個東西呢?
如果將Matplotlib
繪圖和我們平常畫畫相類比,可以把Figure
想象成一張紙(一般被稱之爲畫布),Axes
代表的則是紙中的一片區域(當然可以有多個區域,這是後續要說到的subplots
),上一張更形象一點的圖。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FgVXCRD3-1588326654062)(https://upload-images.jianshu.io/upload_images/8316927-2513383c7b8e3600.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
在Figure
畫布中,Axes1
區域畫了一張數據儀表盤,Axes2
區域畫了柱狀圖,Axes3
區域繪製了一張地圖,相信還是挺好理解的。
兩種繪圖方式區別
對着兩個概念有基本的瞭解後,就可以來看看plt.plot()
和ax.plot()
有何區別了,下面列出了兩種用Matplotlib
繪製圖表的方式。
- plt
# 第一種方式
plt.figure()
plt.plot([1,2,3],[4,5,6])
plt.show()
- ax
# 第二種方式
fig,ax = plt.subplots()
ax.plot([1,2,3],[4,5,6])
plt.show()
繪圖效果如下
可以看到,不論是用plt.plot()
還是ax.plot()
,結果都是一樣的
那區別在哪裏?
從第一種方式的代碼來看,先生成了一個Figure
畫布,然後在這個畫布上隱式生成一個畫圖區域進行畫圖。
第二種方式同時生成了Figure
和axes
兩個對象,然後用ax
對象在其區域內進行繪圖
如果從面向對象編程(對理解Matplotlib
繪圖很重要)的角度來看,顯然第二種方式更加易於解釋,生成的fig
和ax
分別對畫布Figure
和繪圖區域Axes
進行控制,第一種方式反而顯得不是很直觀,如果涉及到子圖零部件的設置,用第一種繪圖方式會很難受。
在實際繪圖時,也更推薦使用第二種方式。
subplot的繪製
下面通過介紹subplots
加深對第二種繪圖方式的理解
假如現在我要在一張紙上左邊畫一個折線圖,右邊畫一個散點圖,該如何畫呢?
首先要有一個畫布Figure
,其次,需要有兩個區域Axes
(等價於兩個子圖subplot
)來畫圖
# 生成畫布和axes對象
# nrows=1和ncols=2分別代表1行和兩列
fig,ax = plt.subplots(nrows=1,ncols=2)
因爲這裏有兩個畫圖區域,所以ax
對應的是一個列表,存儲了兩個Axes
對象。
然後分別控制左邊和右邊的繪圖區域進行繪圖
fig,ax = plt.subplots(nrows=1,ncols=2)
ax[0].plot([1,2,3],[4,5,6])
ax[1].scatter([1,2,3],[4,5,6])
其實到這裏了也會發現,一個Axes
對象對應了一個subplot
子圖,這些個子圖都是畫在同一個畫布Figure
之上。
讀到這裏可能已經對Matplotlib
繪圖有點感覺了,下一篇系列文章會接着介紹Matplotlib
常見組件的設置。
關注我的公衆號「Python讀財」,後臺回覆「py」即可獲取Python學習資源禮包