建議收藏!Matplotlib常見組件設置整理

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

繼上一篇文章爲大家介紹了pltax繪圖的區別後,這篇文章結合我自己的一些使用經歷,爲大家整理了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

利用fontdictloc參數可以分別對字體和標題位置進行設置

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和底部bottomspine,也有時候四條邊框都不需要,可以這麼設置:

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

frameonfontsize參數可以設置是否顯示圖例的邊框以及圖例中文字的大小。

圖形與邊框之間的留白控制

函數: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區分),橫縱座標上的標籤(也可以說是橫縱座標的名字)爲xlabelylabel,橫縱座標上有刻度線tick,刻度上對應的刻度標籤則是tick label

具體設置時所對應的函數爲

  • xlabel --> ax.set_xlabel()
  • ylabel --> ax.set_ylabel()
  • tick和tick label --> ax.tick_paramsax.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學習資源禮包

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