堆疊長條圖 Stack Chart
這篇教學會延伸 matplotlib pyplot 模組裡的 bar() 方法,將資料繪製成堆疊長條圖,並進一步替堆疊長條圖加上文字標籤。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
import matplotlib
要進行本篇的範例,必須先載入 matplotlib 函式庫的 pyplot 模組,範例將其獨立命名為 plt。
import matplotlib.pyplot as plt
繪製第一張堆疊長條圖
下方的程式碼延伸了長條圖的做法,搭配 bottom 參數,將第二組數據的起始點,設定為第一組數據的高度,執行後會根據數據資料,畫出堆疊長條圖。
import matplotlib.pyplot as plt
x = range(0,5)
y1 = [2,8,3,12,6]
y2 = [12,3,7,11,4]
plt.bar(x, y1)
plt.bar(x, y2, bottom=y1)
plt.show()
加上文字標籤
額外設定 bar() 方法的 yerr 參數,就能替堆疊長條圖加上誤差範圍線,搭配 text() 方法,就能替堆疊長條圖加上文字標籤 ( 如果是 matplotlib 3.5.1 以上的版本,也可使用 ax.bar_label() 方法,參考 Bar Label Demo )。
參考:資料文字標註
import matplotlib.pyplot as plt
x = range(5)
y1 = [7,8,5,12,6]
y2 = [12,8,7,11,4]
err1=[0.5,0.6,0.3,2,0.5]
err2=[1,0.8,0.5,1.1,0.5]
total = [y1[i]+y2[i] for i in range(0,5)]
plt.figure(figsize=(10,6))
plt.bar(x, y1, label='y1', yerr=err1) # 加入 yerr 參數
plt.bar(x, y2, bottom=y1, label='y2', yerr=err2)
plt.ylim(0,30)
plt.legend()
for i in x:
plt.text(i,
y1[i]/2 - 0.5, # 計算垂直高度
y1[i],
fontsize=14,
horizontalalignment='center') # 設定 horizontalalignment 屬性水平置中
plt.text(i,
y2[i]/2 + y1[i] - 0.5,
y2[i],
fontsize=14,
horizontalalignment='center')
plt.text(i,
total[i] + 1.5,
total[i],
fontsize=14,
horizontalalignment='center')
plt.show()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~