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

如何使用Matplotlib创建分组柱状图(grouped bar plot)并处理CSV数据

实现带自定义分组和标注的普通柱状图

下面是基于Pandas和Matplotlib的完整解决方案,适配自定义分组、CSV数据导入和数值标注需求,直接替换你的数据路径即可运行:

1. 依赖库导入

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

2. 数据读取与自定义分组

假设你的CSV数据包含类别和数值列,我们手动添加自定义分组(如果CSV已有分组列,可跳过分组映射步骤):

# 替换为你的CSV文件路径
df = pd.read_csv("your_data.csv")

# 自定义分组规则,根据你的实际类别修改
group_mapping = {
    "产品X": "电子产品",
    "产品Y": "电子产品",
    "产品A": "家居用品",
    "产品B": "家居用品",
    "产品M": "办公耗材"
}
# 新增分组列
df["分组"] = df["类别"].map(group_mapping)

3. 绘制分组柱状图并添加标注

# 按分组排序,保证同组类别相邻
df = df.sort_values("分组")

# 获取唯一分组和类别列表
unique_groups = df["分组"].unique()
unique_cats = df["类别"].unique()

# 设置柱子宽度和分组间距
bar_width = 0.35
group_gap = 0.6

# 计算每个分组的起始坐标
group_coords = np.arange(len(unique_groups)) * (len(unique_cats)/len(unique_groups) + group_gap)
# 计算每个类别的具体坐标
cat_coords = np.concatenate([group_coord + np.arange(len(df[df["分组"] == g])) 
                             for group_coord, g in zip(group_coords, unique_groups)])

# 创建画布
plt.figure(figsize=(12, 7))

# 按分组循环绘制柱子,并添加标注
group_colors = ["#2E86AB", "#F24C4C", "#F7D060"]
for idx, group in enumerate(unique_groups):
    group_data = df[df["分组"] == group]
    # 计算当前分组内柱子的坐标
    current_coords = group_coords[idx] + np.arange(len(group_data))
    # 绘制柱状图
    bars = plt.bar(current_coords, group_data["数值"], width=bar_width, 
                   label=group, color=group_colors[idx])
    
    # 给每个柱子添加数值标注
    for bar in bars:
        bar_height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width()/2, bar_height + (bar_height*0.02),
                 f"{bar_height:.1f}",  # 可调整小数位数
                 ha="center", va="bottom", fontsize=10)

# 设置x轴标签
plt.xticks(cat_coords, df["类别"], rotation=45, ha="right", fontsize=10)

# 添加图表元素
plt.legend(title="自定义分组", bbox_to_anchor=(1.01, 1), loc="upper left")
plt.title("分组柱状图(带数值标注)", fontsize=14)
plt.xlabel("类别", fontsize=12)
plt.ylabel("数值", fontsize=12)

# 调整布局,避免标签被截断
plt.tight_layout()
plt.show()

关键说明

  • 适配CSV数据:确保你的CSV列名和代码中的类别、数值对应,若列名不同,直接替换代码中的列名即可
  • 分组逻辑:如果你的CSV已经包含分组信息,直接使用现有分组列即可,无需手动映射
  • 标注调整:可修改f"{bar_height:.1f}"中的小数位数,或调整bar_height + (bar_height*0.02)来改变标注的垂直位置
  • 样式自定义:可替换group_colors中的十六进制颜色值,或调整figsize、bar_width等参数优化图表外观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:07:53