Matplotlib中的plt和ax都是啥?

微信公衆號:「Python讀財」
如有問題或建議,請公衆號留言

Pandas教程寫的差不多了,來寫一寫與數據可視化相關的Matplotlib系列教程吧。讀過Pandas系列文章的讀者應該都知道,我寫文章更多的會融入我對這個東西的理解,Matplotlib系列也是如此。這個系列會涉及Matplotlib的一些簡單的概念、繪圖原理、常見圖形的繪製以及一些高階的繪圖技巧。學完之後,期待達到的效果是可以用Matplotlib畫出這樣的圖形。

image

這篇文章先介紹一下Matplotlib的一些簡單基本概念和繪圖原理,直入正題~

不知道有多少同學和我一樣,在剛接觸Matplotlib時,會被書上的pltax以及subplots等各種概念所迷惑,心裏存在無數個問號,這些究竟是啥?畫出來的圖不是一樣的嗎?他們有啥區別?下面就一步步來解答這些迷惑。

概念引入

首先,我們應該要了解一張用Matplotlib畫出來的圖的具體構造,引用一張官方的圖:

image.png

我們先主要看圖裏面紅色框的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()

繪圖效果如下

1.png

可以看到,不論是用plt.plot()還是ax.plot(),結果都是一樣的

那區別在哪裏?

從第一種方式的代碼來看,先生成了一個Figure畫布,然後在這個畫布上隱式生成一個畫圖區域進行畫圖

第二種方式同時生成了Figureaxes兩個對象,然後用ax對象在其區域內進行繪圖

如果從面向對象編程(對理解Matplotlib繪圖很重要)的角度來看,顯然第二種方式更加易於解釋,生成的figax分別對畫布Figure和繪圖區域Axes進行控制,第一種方式反而顯得不是很直觀,如果涉及到子圖零部件的設置,用第一種繪圖方式會很難受。

在實際繪圖時,也更推薦使用第二種方式。

subplot的繪製

下面通過介紹subplots加深對第二種繪圖方式的理解

假如現在我要在一張紙上左邊畫一個折線圖,右邊畫一個散點圖,該如何畫呢?

首先要有一個畫布Figure,其次,需要有兩個區域Axes(等價於兩個子圖subplot)來畫圖

# 生成畫布和axes對象
# nrows=1和ncols=2分別代表1行和兩列
fig,ax = plt.subplots(nrows=1,ncols=2)

因爲這裏有兩個畫圖區域,所以ax對應的是一個列表,存儲了兩個Axes對象。

2.png

然後分別控制左邊和右邊的繪圖區域進行繪圖

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])

4.png

其實到這裏了也會發現,一個Axes對象對應了一個subplot子圖,這些個子圖都是畫在同一個畫布Figure之上。

讀到這裏可能已經對Matplotlib繪圖有點感覺了,下一篇系列文章會接着介紹Matplotlib常見組件的設置。

關注我的公衆號「Python讀財」,後臺回覆「py」即可獲取Python學習資源禮包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章