背景
最近使用python matplotlib繪制柱狀圖時(shí)关串,想要更清晰地查看每一項(xiàng)占總數(shù)的百分比拧廊,在搜索后發(fā)現(xiàn)matplotlib.pyplot.bar
方法并沒有提供這個(gè)參數(shù),于是自己嘗試實(shí)現(xiàn)了這個(gè)功能晋修。
實(shí)現(xiàn)方法
實(shí)現(xiàn)方法很簡單吧碾,利用plt.text
方法在柱狀圖的合適位置添加計(jì)算后的百分比數(shù)值即可,添加的位置這里選擇了柱狀圖頂端的合適位置墓卦,更改plt.text(x, y + y_max / 20, str(round(percentage[x], 2)), ha='center')
這行代碼里的參數(shù)也可很容易實(shí)現(xiàn)在柱狀圖的中間等位置進(jìn)行繪制添加倦春。
詳細(xì)代碼如下:
import matplotlib.pyplot as plt
def bar_with_percentage_plot(x_list, y_list):
# 繪圖參數(shù), 第一個(gè)參數(shù)是x軸的數(shù)據(jù), 第二個(gè)參數(shù)是y軸的數(shù)據(jù),
# 第三個(gè)參數(shù)是柱子的大小, 默認(rèn)值是1(值在0到1之間), color是柱子的顏色, alpha是柱子的透明度
plt.bar(range(len(x_list)), y_list, 0.4, color='r', alpha=0.8)
# 添加軸標(biāo)簽
plt.ylabel('y軸')
# 標(biāo)題
plt.title('柱狀圖添加百分比')
# 添加刻度標(biāo)簽
plt.xticks(range(len(x_list)), x_list)
# 設(shè)置Y軸的刻度范圍
y_max = max(y_list) + max(y_list) / 6
plt.ylim([0, y_max])
y_sum = sum(y_list)
percentage = [x / y_sum for x in y_list]
# 為每個(gè)條形圖添加數(shù)值標(biāo)簽
for x, y in enumerate(y_list):
plt.text(x, y + y_max / 20, str(round(percentage[x], 2)), ha='center')
# 顯示圖形
plt.show()
if __name__ == '__main__':
x_list = ['A', 'B', 'C', 'D']
y_list = [110, 30, 200, 150]
bar_with_percentage_plot(x_list, y_list)
最終顯示效果如下圖所示:
image.png