大家好,我是早起。
有人說matplotlib做出來的圖很低級,早起想說,那是你不會配色
本文講解如何調整色以及通過添加注釋,用matplotlib做出一張好看的柱狀圖,也是「早起Python」年度報告中的一幅圖。
和之前一樣先分析一下這張圖的思路
首先還是先導入包與字體設置,注意這裡沒有使用全局字體而是使用臨時的字體,詳情看組件設置中字體設置文檔
import matplotlib
print(matplotlib.__version__) #查看Matplotlib版本
import pandas as pd
print(pd.__version__) #查看pandas版本
import numpy as np
print(np.__version__) #查看numpy版本
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['STHeiti'] #設置中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
un_font = mpl.font_manager.FontProperties(fname = 'Shojumaru.ttf')
cn_font = mpl.font_manager.FontProperties(fname = '阿里巴巴普惠體 M.ttf')
cn_font1 = mpl.font_manager.FontProperties(fname = '思源黑體 CN Heavy.otf')接下來第一步,先搞出來一張水平條形圖,這在基礎柱狀圖系列中有詳細講過,使用plt.barh就行了
x = ['其他 ','46-60歲 ','36-45歲 ','26-35歲 ','18-25歲 ']
y = [1220,1403,4215,12032,13934]
fig,ax=plt.subplots(figsize = (6,4),dpi=100)
plt.barh(x, y)當然這樣的條形圖並不好看,我們調整柱子寬度與顏色,並添加邊框
plt.barh(x, y,height = 0.6, color = ['#cf89f1','#fac348','#66d88e','#72cff6','#fa9333'],edgecolor = 'black')瞬間感覺還不錯了,有木有,我們繼續,接下來添加標題、取消四周邊框,並調整y軸文字
ax.set_facecolor('none')
plt.gca().spines["top"].set_alpha(0)
plt.gca().spines["bottom"].set_alpha(0)
plt.gca().spines["right"].set_alpha(0)
plt.gca().spines["left"].set_alpha(0)
plt.yticks(x, labels=x,rotation = 0,color = '#687eff',fontsize = 9,family = 'Songti SC')
plt.text(0, 4.9, '早起Python 粉絲年齡分布', fontsize = 13,color = '#0000CD',alpha = 0.7,fontproperties = cn_font1)
plt.xticks([]) #去掉x軸這裡用到的都是最基礎的組件修改,不過多解釋,所有部分在菜單欄組件設置中都提供了對應的文檔,最後只需要在右下角添加文字即可。
使用的是plt.text,沒有什麼難度
plt.text(13000, 1.8, 'No.1', fontsize = 16,color = '#FF8C00',fontproperties = cn_font1)
plt.text(13000, 0.8, 'No.2', fontsize = 16,color = '#72cff6',fontproperties = cn_font1)
plt.text(13000, -0.2, 'No.3', fontsize = 16,color = '#66d88e',fontproperties = cn_font1)
plt.text(15500, 1.75, '18-25歲', fontsize = 20,color = '#FF8C00',fontproperties = cn_font1)
plt.text(15500, 0.75, '26-35歲', fontsize = 20,color = '#72cff6',fontproperties = cn_font1)
plt.text(15500, -0.25, '36-45歲', fontsize = 20,color = '#66d88e',fontproperties = cn_font1)
plt.text(14100, 3.9, '13934', fontsize = 9,color = '#F08080',fontstyle='italic',family = 'serif',weight = 'heavy')
plt.text(12300, 2.9, '12032', fontsize = 9,color = '#F08080',fontstyle='italic',family = 'serif',weight = 'heavy')
plt.text(4400, 1.9, '4215', fontsize = 9,color = '#F08080',fontstyle='italic',family = 'serif',weight = 'heavy')
plt.text(1600, 0.9, '1403', fontsize = 9,color = '#F08080',fontstyle='italic',family = 'serif',weight = 'heavy')
plt.text(1400, -0.1, '1220', fontsize = 9,color = '#F08080',fontstyle='italic',family = 'serif',weight = 'heavy')
plt.text(12700,1.28,'--',fontsize = 20,color = '#6495ED')
plt.text(12700,0.28,'--',fontsize = 20,color = '#6495ED')最後一幅純matplotlib做出來的條形圖就完成了,看起來還不錯。
本文的全部代碼已經添加到圖鑑中,我已經將源碼上傳至GitHub,感興趣的讀者可以後臺回復柱狀圖獲取GitHub地址。找到【進階柱狀圖MA_A_09】下載並學習。