Matplotlib分组柱状图绘制问题:按冷却剂分组展示钢硬度样本数据
修正带误差棒的分组柱状图代码
核心问题是要给每个冷却剂组内的三个样本柱子分配独立的x轴位置,避免重叠或分组逻辑错误。以下是修正后的完整代码:
import matplotlib.pyplot as plt # 替换为你的实际数据结构 coolant_data = { '水': [58, 62, 60], '油': [45, 48, 46], '空气': [32, 35, 33] } # 各冷却剂下三个样本的均值 coolant_samples = { '水': [59, 61, 59.5], '油': [44.5, 47.5, 45.8], '空气': [31.8, 34.7, 32.9] } # 各冷却剂下三个样本的标准差 coolant_sample_stds = { '水': [1.2, 0.8, 1.0], '油': [0.9, 1.1, 0.7], '空气': [0.6, 0.9, 0.8] } # 配置分组和柱子参数 n_samples = 3 group_width = 0.8 bar_width = group_width / n_samples # 获取冷却剂名称列表 coolants = list(coolant_data.keys()) n_groups = len(coolants) # 生成每组的基准x坐标 x = range(n_groups) # 循环绘制每个样本的柱子与误差棒 for sample_idx in range(n_samples): # 计算当前样本柱子的偏移x坐标 bar_x = [pos + sample_idx * bar_width for pos in x] # 提取对应样本的均值和标准差 means = [coolant_samples[coolant][sample_idx] for coolant in coolants] stds = [coolant_sample_stds[coolant][sample_idx] for coolant in coolants] # 绘制柱状图和误差棒 plt.bar(bar_x, means, width=bar_width, label=f'样本{sample_idx+1}') plt.errorbar(bar_x, means, yerr=stds, fmt='none', c='black', capsize=3) # 设置x轴刻度(居中对齐每组) plt.xticks([pos + group_width/2 - bar_width/2 for pos in x], coolants) # 添加图表元素 plt.legend() plt.title('不同冷却剂淬火后钢材硬度(按样本分组)') plt.xlabel('冷却剂类型') plt.ylabel('硬度值') plt.tight_layout() plt.show()
关键修正说明:
- x轴位置偏移:给同组内的每个样本柱子分配不同的偏移x坐标,确保同组柱子紧密排列,不同组之间留有间隔。
- 误差棒对齐:误差棒的x坐标与对应柱子完全匹配,避免错位。
- 刻度居中:将x轴刻度设置在每组的中间位置,保证分组展示逻辑清晰。
修正后,每个冷却剂组会包含3个并排的柱子(对应三个样本),每个柱子上方带有误差棒,可直观对比不同冷却剂下各样本的硬度均值及离散程度。
内容的提问来源于stack exchange,提问作者TheBooker66 aka Ethan
相关产品推荐
相关产品推荐

