微信公衆號:「Python讀財」
如有問題或建議,請公衆號留言
繼上一篇文章爲大家介紹了plt
和ax
繪圖的區別後,這篇文章結合我自己的一些使用經歷,爲大家整理了Matplotlib
中比較常用的一些組件設置。
個人認爲用Matplotlib
畫出一張圖來不難,難的是對於一些細節東西的設置,可能在一個小小的細節處理上就得百度好久,所以可以先點收藏了再看,需要的時候可以及時找出來看看。
先上一張官方繪製的關於各個組件在一張圖中的名詞解釋,通過這張圖可以很直觀地感受到什麼是legend
,什麼是tick
……,遇到不會設置的也可以照着圖搜索對應的文檔,下面具體講講。
注: 下方的圖片均使用fig,ax = plt.subplots()
的方式生成
設置顯示中文字體
Matplotlib
中默認將中文顯示爲亂碼的◻,如下面這種情況
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5])
plt.show()
所以在繪圖前可以通過下面的代碼解決這個問題
plt.rcParams['font.sans-serif'] = ['SimHei']
# SimHei:微軟雅黑
# FangSong:仿宋
# 這兩個是我常用的,其他的可以上網搜一搜
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5])
plt.show()
設置標題(title)
函數:ax.set_title
利用fontdict
和loc
參數可以分別對字體和標題位置進行設置
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5])
#設置16px的字體大小,將標題顯示在左側
ax.set_title('標題',fontdict={'size':16},loc = 'left')
plt.show()
邊框(spine)的顯示問題
函數:ax.spines[loc].set_visible(False)
一般的圖表中,Matplotlib
會默認顯示出圖形的spine
,英文其實不太好翻譯,谷歌翻譯成脊柱???
我一般把他叫做邊框,就是圖形上下左右的四條邊線,如圖
我覺得這個邊框加上去其實挺醜的,正常使用中有些時候僅僅需要左邊left
和底部bottom
的spine
,也有時候四條邊框都不需要,可以這麼設置:
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5])
# 只要左邊和底部的邊框
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.show()
圖例設置(legend)
函數:ax.legend()
圖例是對圖形所展示的內容的解釋,比如在一張圖中畫了三條線,那麼這三條線都代表了什麼呢?這時就需要做點註釋。
要顯示圖例可以有兩種方式:
# 第一種:
# plot的時候加上label,之後調用ax.legend()
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5],label='2010')
ax.plot(['北京','上海','深圳'],[2,4,6],label='2020')
ax.legend()
plt.show()
# 第二種:
# 使用ax.legend()按順序設置好圖例
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5])
ax.plot(['北京','上海','深圳'],[2,4,6])
ax.legend(['2010','2020'])
plt.show()
frameon
和fontsize
參數可以設置是否顯示圖例的邊框以及圖例中文字的大小。
圖形與邊框之間的留白控制
函數:ax.margins()
不知道大家繪圖的時候有沒有發現,Matplotlib
中默認在我們所畫的圖形和邊框之間留有空白,比如
要去掉這樣的空白部分可以使用ax.margins()
進行設置
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5])
ax.fill_between(['北京','上海','深圳'],[1,1,1],[1,3,5],color='#7b68ee')
# 可以設置四個方向都不留白,也可以單獨設置留白的方向和寬度
ax.margins(0)
plt.show()
設置雙座標軸
函數:ax.twinx()
雙座標軸一般用於複合圖表,同時表示兩種圖表的指標量綱不一,經典的使用場景如帕累託圖。
使用中,需要對原有的ax
使用.twinx()
方法生成ax2
,再利用ax2
進行繪圖
fig,ax = plt.subplots()
ax.plot(['北京','上海','深圳'],[1,3,5],color='r')
# 雙座標用法
ax2 = ax.twinx()
ax2.bar(['北京','上海','深圳'],[20,40,60],alpha=0.3)
plt.show()
座標軸相關設置
在一張二維圖中,關於座標軸各個零件的術語如圖所示
首先有橫座標xaxis
和縱座標yaxis
(注意與axes
區分),橫縱座標上的標籤(也可以說是橫縱座標的名字)爲xlabel
和ylabel
,橫縱座標上有刻度線tick
,刻度上對應的刻度標籤則是tick label
。
具體設置時所對應的函數爲
- xlabel -->
ax.set_xlabel()
- ylabel -->
ax.set_ylabel()
- tick和tick label -->
ax.tick_params
,ax.xticks()
,ax.yticks()
fig,ax = plt.subplots()
ax.scatter([3,2,1],[1,3,5],color='r')
ax.plot([3,2,1],[1,3,5],color='r')
# 分別設置xy軸的標籤
ax.set_xlabel('x',fontsize=16)
ax.set_ylabel('y',fontsize=16)
fig,ax = plt.subplots()
ax.scatter([3,2,1],[1,3,5],color='r')
ax.plot([3,2,1],[1,3,5],color='r')
# fontsize設置刻度標籤的大小
# direction控制刻度是朝內還是朝外顯示
ax.tick_params(labelsize=14,direction='in')
網格線(grid)設置
函數:ax.grid()
網格線多用於輔助查看具體的數值大小,橫縱座標都可以設置相應的網格線,視具體情況而論。
fig,ax = plt.subplots()
ax.plot([1,2,3],[4,2,6],color='r')
# b參數設置是否顯示網格
# axis參數設置在哪個軸上顯示網格線,可選參數爲'x','y','both'
ax.grid(b=True,axis='y')
常用的圖表組件設置就總結到這裏,有寫錯的地方歡迎拍磚!
關注我的公衆號「Python讀財」,後臺回覆「py」即可獲取Python學習資源禮包