時間:2020-03-06來源:電腦系統城作者:電腦系統城
最近在學習數據可視化,梳理一下其中一些諸如pandas繪圖、matplotlib繪圖、pyplot(plt)、axes等概念。
重要的事情說三遍:axes不是axis!axes不是axis!axes不是axis!
重要的事情說三遍:pyplot是接口不是對象!pyplot是接口不是對象!pyplot是接口不是對象!
很多書上一上來就直接import matplotlib.pypltot as plt
,然后就教你plt.xxx()
。這種方式固然沒錯,可問題就出在了plt
只是一個interface,只是一個接口,連對象都算不上(仔細回想,你確實沒有實例化過任何一個名叫plt
類型的對象)這給本來就對面向對象編程并不很熟悉的我帶來無窮無盡的困擾。plt
這個接口的意義在于:
figure
類型 axes
類型等)1.通過plt.xxx()直接繪圖
就像各種教程和書上的常規操作一樣,我們可以用plt.plot(), plt.bar()等繪制不同類型的圖(部分總結如下表)
表一 plt中用于繪圖的部分函數
函數名 | 作用 |
---|---|
plt.bar() | 條形圖 |
plt.barh() | 橫排條形圖 |
plt.boxplot() | 箱線圖(plt.box()是另一個函數) |
plt.hist() | 頻率直方圖 |
plt.plot() | 折線圖 |
我們可以用plt
的其他一些函數來對圖表的標題等進行設置(部分總結如下表)
表二 plt中用于設置的部分函數
函數名 | 作用 |
---|---|
plt.title() | 設置圖表標題 |
plt.grid() | 設置圖表網格 |
plt.xlabel();plt.ylabel | 設置x;y軸標題 |
plt.xticks();plt.yticks() | 設置x;y軸刻度 |
plt.xlim();plt.ylim() | 設置x;y軸范圍 |
plt.annotate() | 設置標注 |
(具體的參數和用法詳見 https://matplotlib.org/api/pyplot_summary.html )
用plt繪圖的方便之處,同樣也是它最令人迷惑的地方,就是它沒有一個顯性的對象。
我們甚至可以調用pandas繪圖以后,用表二中的plt函數來對pandas生成的這個圖表進行設置。
例程如下:
上面這個例子就展示了pyplot
(plt
)的特點,不用指明對象就能進行畫圖和設置,當我們在同一個程序中的圖比較少的時候這是方便的,但當我們同一個程序中的圖很多的時候,這種沒有顯性對象的方式會導致我們沒有辦法重新調用之前的圖(因為沒有對象名)也會給人一種很不踏實的感覺。
2.實例化figure和axes對象后繪圖
就像前文提到的,plt
只是一個接口而不是對象。
在matplotlib中,有兩個重要的對象類型:figure
對象可以把它想成一張空白圖紙,在上面可以繪制一個或多個axes
對象(還可以有其他對象等)。axes
對象是一個圖像的主要部分(它包括了圖線、xy軸等部分)。
我們可以使用plt
接口生成figure
對象和axes
對象,然后對axes
對象調用方法來實現畫圖和設置。
總體思路是:
例程如下:
用這種方式畫出來的圖,每一個對象都有它自己的名字,方便后面繼續調用、修改。代碼也就多了兩行實例化的過程,并沒有麻煩很多,個人很喜歡用這種方式畫圖(也給人一種很踏實的感覺)。
類比上面的表一和表二,給出對于axes對象的方法函數表:
表三 axes對象用于繪圖的部分方法函數
函數名 | 作用 |
---|---|
ax.bar() | 條形圖 |
ax.barh() | 橫排條形圖 |
ax.boxplot() | 箱線圖 |
ax.hist() | 頻率直方圖 |
ax.plot() | 折線圖 |
表四 axes對象中用于設置的部分方法函數
函數名 | 作用 |
---|---|
ax.set_title() | 設置圖表標題 |
ax.set_xlabel(); ax.set_ylabel | 設置x;y軸標題 |
ax.set_xticks(); ax.set_yticks() | 設置x;y軸刻度 |
ax.set_xlim(); ax.set_ylim() | 設置x;y軸范圍 |
ax.annotate() | 設置標注 |
(具體的參數和用法詳見 https://matplotlib.org/api/axes_api.html )
注意表一和表三,表二和表四的異同:
plt
是固定的名字,不論畫什么都是plt.xxx()
,而表三和表四中ax.xxx()
中的ax
要改成你實例的對象名。set_
用實例化axes的方式畫圖很重要,因為多子圖的繪制更是需要依賴axes對象。
我還會分兩期分別介紹一下axes與多子圖的繪制和axes與pandas繪圖的關系。
到此這篇關于淺談matplotlib.pyplot與axes的關系的文章就介紹到這了,更多相關matplotlib.pyplot axes內容請搜索我們以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持我們!
2022-03-01
Java PTA 計算3到7位 水仙花數實例2022-03-01
AJAX SpringBoot 前后端數據交互的項目實現2020-10-22
關于idea無法修改模板中jdk版本問題