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

基于Python中pandas groupby实现按位置分组的多柱状图绘制

按Location生成柱状图的简洁实现方案

当然可以!用Pandas的groupby配合Matplotlib或者Seaborn,几行代码就能搞定按location生成三个柱状图的需求,完全符合你要的「每个日期对应一个柱子」的要求。下面给你两种实用的实现方式:

方法一:Matplotlib + Pandas Groupby(灵活可控)

这种方式手动创建子图并遍历分组,能更细致地控制图表样式:

import pandas as pd
import matplotlib.pyplot as plt

# 初始化并预处理数据
data = {"location": ["USA", "USA", "USA", "UK", "UK", "UK", "World", "World", "World"], 
        "date": ["21-06-2021", "22-06-2021", "23-06-2021", "21-06-2021", "22-06-2021", "23-06-2021", "21-06-2021", "22-06-2021", "23-06-2021"], 
        "number": [456, 543, 675, 543, 765, 345, 654, 345, 654]}
df = pd.DataFrame(data, columns=['location','date','number'])
df["date"] = pd.to_datetime(df["date"], format="%d-%m-%Y")  # 指定日期格式避免解析错误

# 创建1行3列的子图布局,设置合适尺寸
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))

# 遍历每个location分组,在对应子图绘制柱状图
for (location, group), ax in zip(df.groupby('location'), axes.flatten()):
    ax.bar(group['date'], group['number'], color='skyblue')
    ax.set_title(f'Number by Date - {location}')
    ax.set_xlabel('Date')
    ax.set_ylabel('Number')
    ax.tick_params(axis='x', rotation=45)  # 旋转日期标签,避免重叠
    
plt.tight_layout()  # 自动调整子图间距,优化显示效果
plt.show()

关键说明:

  • df.groupby('location')自动将数据按位置拆分成3个分组,无需手动筛选每个location
  • axes.flatten()把子图数组转换成一维,方便和分组一一对应
  • 旋转X轴标签、设置标题等细节让图表更易读

方法二:Seaborn Catplot(极简高效)

如果你想少写代码,Seaborn的catplot能一键生成符合要求的图表,代码更简洁:

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

# 数据预处理同上
data = {"location": ["USA", "USA", "USA", "UK", "UK", "UK", "World", "World", "World"], 
        "date": ["21-06-2021", "22-06-2021", "23-06-2021", "21-06-2021", "22-06-2021", "23-06-2021", "21-06-2021", "22-06-2021", "23-06-2021"], 
        "number": [456, 543, 675, 543, 765, 345, 654, 345, 654]}
df = pd.DataFrame(data, columns=['location','date','number'])
df["date"] = pd.to_datetime(df["date"], format="%d-%m-%Y")

# 一行代码生成三个柱状图
sns.catplot(data=df, x='date', y='number', col='location', kind='bar', height=4, aspect=1.2)
plt.tick_params(axis='x', rotation=45)
plt.tight_layout()
plt.show()

关键说明:

  • col='location'直接告诉Seaborn按location拆分图表,自动生成子图
  • kind='bar'指定绘制柱状图,完美匹配你的需求
  • height和aspect参数可以快速调整每个子图的大小

两种方法都能高效实现你的需求,Matplotlib适合需要自定义样式的场景,Seaborn适合快速出图。

内容的提问来源于stack exchange,提问作者Katharina Böhm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:37:34