You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:10:59