Python中使用bar chart绘制多同键异值字典柱状图的问题咨询
分组柱状图代码调整方案
问题原因
- 原有代码的宽度、偏移逻辑错误,新增多组柱子后会出现重叠、宽度不一致、无法对齐刻度的问题
- 未统一封装多组数据,代码冗余、可维护性差
正确实现代码
import numpy as np import matplotlib.pyplot as plt # 原始数据定义 g1={'0_1': 7.3,'1_2': 8.1, '2_3': 8.7, '3_4': 9.1} g2={'0_1': 15.5,'1_2': 16.1, '2_3': 16.5, '3_4': 18.1} g3={'0_1': 56.8,'1_2': 76.1, '2_3': 96.7, '3_4': 118.7} g4={'0_1': 63.3,'1_2': 82.4, '2_3': 101.4, '3_4': 120.1} g5={'0_1': 35.6,'1_2': 45.5, '2_3': 55.9, '3_4': 65.9} g6={'0_1': 43.5,'1_2': 53.5, '2_3': 63.7, '3_4': 73.3} # 汇总数据集与对应标签 group_list = [g1, g2, g3, g4, g5, g6] label_list = ['g1', 'g2', 'g3', 'g4', 'g5', 'g6'] x_keys = list(g1.keys()) x = np.arange(len(x_keys)) bar_width = 0.13 # 单根柱子宽度,6根总宽度约0.78,预留组间间隙 ax = plt.subplot(111) # 循环绘制所有分组柱状图 for idx in range(len(group_list)): # 按统一key顺序取值,避免字典顺序混乱 current_values = [group_list[idx][key] for key in x_keys] # 计算当前组x轴偏移,保证整组柱子中心对齐刻度 offset_x = x + idx * bar_width - (len(group_list)-1)*bar_width/2 ax.bar(offset_x, current_values, width=bar_width, align='center') # 设置坐标轴与图例 ax.set_xticks(x) ax.set_xticklabels(x_keys) ax.legend(label_list) plt.show()
代码说明
- 统一将所有字典和对应标签存入列表,通过循环绘制避免重复写
bar方法,后续新增分组只需修改列表即可 - 偏移计算逻辑保证同个x刻度下的所有柱子整体居中对齐,不会出现错位
- 主动按key顺序取值,保证所有字典的数值顺序和x轴键完全对应,兼容3.7以前无序字典的Python版本
内容的提问来源于stack exchange,提问作者Angelus
相关产品推荐
相关产品推荐

