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

如何用Pandas DataFrame在Python中绘制带标准差误差棒的柱状图

嘿,这事儿我熟!刚好最近刚帮人做过类似的可视化,给你两种实用的实现方案,你可以按需选:

方法一:用Matplotlib手动实现(灵活性高)

如果喜欢自己掌控每个细节,用Matplotlib是最佳选择。核心思路是先算出每个月份列的均值和标准差,再把这些统计量喂给柱状图和误差棒:

import matplotlib.pyplot as plt
import pandas as pd

# 假设你的DataFrame变量名为df
# 计算各月份的平均得分和标准差(按列计算)
monthly_avg = df.mean(axis=0)
monthly_std = df.std(axis=0)
# 获取月份列表(确保和数据顺序一致)
month_labels = monthly_avg.index.tolist()

# 创建画布,设置大小
plt.figure(figsize=(10, 6))
# 绘制柱状图,同时添加标准差误差棒
# capsize控制误差棒两端的"帽子"长度,数值越大越清晰
bars = plt.bar(month_labels, monthly_avg, yerr=monthly_std, capsize=6, color='lightblue')

# 给图表加标签和标题,让可读性更强
plt.xlabel('Months', fontsize=12)
plt.ylabel('Average Score', fontsize=12)
plt.title('Average Score by Month (with Standard Deviation Error Bars)', fontsize=14)

# 可选:给每个柱子顶部标注具体的均值数值
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2., height,
             f'{height:.2f}',  # 保留两位小数
             ha='center', va='bottom', fontsize=10)

# 显示图表
plt.show()
方法二:用Seaborn快速实现(代码简洁)

如果不想手动算统计量,Seaborn可以帮你一步搞定,不过需要先把宽格式的DataFrame转成长格式:

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# 把宽格式数据转成长格式:列名变'Month'列,得分变'Score'列
melted_data = df.melt(var_name='Month', value_name='Score')

# 创建画布
plt.figure(figsize=(10, 6))
# 绘制柱状图,ci='sd'表示用标准差作为误差棒(默认是95%置信区间)
sns.barplot(x='Month', y='Score', data=melted_data, ci='sd', palette='pastel')

# 添加标签和标题
plt.xlabel('Months', fontsize=12)
plt.ylabel('Average Score', fontsize=12)
plt.title('Average Score by Month (with Standard Deviation Error Bars)', fontsize=14)

plt.show()

小提示

  • 两种方法都能完美实现你的需求:Matplotlib适合需要自定义细节(比如柱子颜色、标注样式)的场景,Seaborn适合快速出图。
  • 如果你的月份列是数值类型(比如0、1、3这些),转成字符串或者保持数值都不影响X轴的显示顺序;要是是乱序的字符串,记得提前排序哦。

内容的提问来源于stack exchange,提问作者eepee123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:42:05