matplotlib可視化之如何給圖形添加數據標籤?

當咱們獲取完數據以後,通常來講數據可視化呈現的最基礎圖形就是:柱狀圖、水平條形圖、折線圖等等,在python的matplotlib庫中分別可用bar、barh、plot函數來構建它們,再使用xticks與yticks(設置座標軸刻度)、xlabel與ylabel(設置座標軸標籤)、title(標題)、legend(圖例)、xlim與ylim(設置座標軸數據範圍)、grid(設置網格線)等命令來裝飾圖形,讓它更明晰與美觀,可是對於數據標籤(即在圖形中的每個點或條形位置上標註出相應數值),卻沒有直接的命令導出。咱們看不少python可視化作出的柱狀圖等等,在柱子數量很少的條件下,沒有數據標籤,只有光禿禿的一個個柱子,這樣就使得圖形缺了些什麼。事實上,在python的matplotlib中有在圖形中添加文字說明的命令——text,咱們就能夠利用這個命令,在圖中每一個單位要素中添加相應文字,來構造數字標籤。
以本人專欄知乎專欄寫的《大數據時代,哪些課程最受歡迎?》所爬取數據爲例,通過numpy獲得了不一樣課程類別下的平均學習人數,如圖:php

 

plt.figure(figsize=(10,6))
#設置x軸柱子的個數
x=np.arange(14)+1 #課程品類數量已知爲14,也能夠用len(ppv3.index)
#設置y軸的數值,需將numbers列的數據先轉化爲數列,再轉化爲矩陣格式
y=np.array(list(ppv3['numbers']))
xticks1=list(ppv3.index) #構造不一樣課程類目的數列
#畫出柱狀圖
plt.bar(x,y,width = 0.35,align='center',color = 'c',alpha=0.8)
#設置x軸的刻度,將構建的xticks代入,同時因爲課程類目文字較多,在一塊會比較擁擠和重疊,所以設置字體和對齊方式
plt.xticks(x,xticks1,size='small',rotation=30)
#x、y軸標籤與圖形標題
plt.xlabel('課程主題類別')
plt.ylabel('number')
plt.title('不一樣課程類別的平均學習人數')
**#設置數字標籤**
**for a,b in zip(x,y):**
** plt.text(a, b+0.05, '%.0f' % b, ha='center', va= 'bottom',fontsize=7)**
#設置y軸的範圍
plt.ylim(0,3700)
plt.show()

最終獲得的圖形爲:python

不一樣類別學習人數.pngbash

着重講一下如何設置數字標籤
#設置數字標籤函數

for a,b in zip(x,y):
plt.text(a, b+0.05, '%.0f' % b, ha='center', va= 'bottom',fontsize=7)

首先,前邊設置的x、y值其實就表明了不一樣柱子在圖形中的位置(座標),經過for循環找到每個x、y值的相應座標——a、b,再使用plt.text在對應位置添文字說明來生成相應的數字標籤,而for循環也保證了每個柱子都有標籤。
其中,a, b+0.05表示在每一柱子對應x值、y值上方0.05處標註文字說明, '%.0f' % b,表明標註的文字,即每一個柱子對應的y值, ha='center', va= 'bottom'表明horizontalalignment(水平對齊)、verticalalignment(垂直對齊)的方式,fontsize則是文字大小。
條形圖、折線圖也是如此設置,餅圖則在pie命令中有數據標籤的對應參數。對於累積柱狀圖、雙軸柱狀圖則須要用兩個for循環,同時經過a與b的不一樣加減來設置數據標籤位置,好比在本文另外一文章[《雙十一預售戰下的電商風雲》](https://zhuanlan.zhihu.com/p/23492721
) ,如圖:學習

電商平臺商品評價.png字體

其命令爲:大數據

電商代碼.pngspa

相關文章
相關標籤/搜索