Matplotlib绘制分组柱状图时如何添加标注及居中x轴刻度
解决方案
以下是修正后的完整可运行代码,同时解决x轴标签居中和数值标注两个问题:
import numpy as np import matplotlib.pyplot as plt oct_data = [10, 24, 25, 30] nov_data = [12, 42, 21, 78] labels = ['Account_1', 'Account_2', 'Account_3', 'Account_4'] bar_width = 0.4 rect_1 = np.arange(0, len(oct_data)*2 ,2) rect_2 = [x + bar_width for x in rect_1] plt.bar(rect_1, oct_data, color='#7f6d5f', width=bar_width, edgecolor='white', label='Month_1') plt.bar(rect_2, nov_data, color='#557f2d', width=bar_width, edgecolor='white', label='Month_2') plt.ylabel('Cost ($)', fontsize=10) # 修正x轴标签居中 plt.xticks([r + bar_width/2 for r in range(0, len(oct_data)*2, 2)], labels) # 分别给两组柱子添加数值标注 # Month1 标注 for x, val in zip(rect_1, oct_data): plt.text(x + bar_width/2, val//2, val, ha='center', color='black') # Month2 标注 for x, val in zip(rect_2, nov_data): plt.text(x + bar_width/2, val//2, val, ha='center', color='black') plt.legend() plt.show()
问题原因说明
x轴标签不居中
你原来的xticks偏移量设置的是完整的bar_width,会让刻度落在第二个柱子的左边缘位置,自然无法居中。只需要把偏移量改为bar_width/2,就能刚好落在同组两个柱子的正中间。
分组柱状图数值标注失效
单组柱状图只有一套x坐标,遍历一次即可。分组柱状图有多少组柱子就需要遍历多少次,每次用对应柱子的x坐标作为基准,同样加上bar_width/2作为文本的水平居中位置,就能保证数值显示在对应柱子的内部中心。
内容的提问来源于stack exchange,提问作者Mornor
相关产品推荐
相关产品推荐

