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

求助:使用Pandas与Plotly创建月度分面条形网格图表失败

嘿,这事儿好办!既然你已经搞定了按月的数据聚合,要生成每个月份独立的公司统计条形图,我给你俩实用方案,都是Python里常用的可视化路子:

方案一:用Seaborn的FacetGrid快速实现

Seaborn的FacetGrid专门就是干这种分面可视化的活儿,代码简洁还自带美观样式,适合快速出图:

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

# 假设你的聚合后数据框是agg_data,结构为:month | company | count
# 先把月份转成类别型,避免乱序(比如1月跑到12月后面)
agg_data['month'] = agg_data['month'].astype('category')

# 创建分面网格:按月份列排列,每行最多放3个图表,可根据需求调整col_wrap
g = sns.FacetGrid(agg_data, col='month', col_wrap=3, height=4, aspect=0.8)
# 映射条形图:x轴是公司,y轴是统计数量
g.map(sns.barplot, 'company', 'count', order=agg_data['company'].unique())

# 统一设置坐标轴标签和子图标题
g.set_axis_labels('公司', '统计数量')
g.set_titles('月份: {col_name}')
# 自动调整布局,避免标签重叠
plt.tight_layout()
plt.show()
方案二:用Matplotlib手动控制子图细节

如果你想更精细地控制每个子图的样式、布局,可以用Matplotlib手动生成子图网格:

import matplotlib.pyplot as plt
import pandas as pd

# 假设你的聚合后数据框是agg_data
# 获取所有唯一月份
months = agg_data['month'].unique()
# 计算子图的行列数:每行放3个,行数向上取整
n_cols = 3
n_rows = (len(months) + n_cols - 1) // n_cols

# 创建子图网格,设置整体画布大小
fig, axes = plt.subplots(n_rows, n_cols, figsize=(15, 5*n_rows))
# 把二维的axes数组转成一维,方便遍历
axes = axes.flatten()

# 遍历每个月份和对应的子图
for ax, month in zip(axes, months):
    # 筛选当前月份的数据
    month_data = agg_data[agg_data['month'] == month]
    # 绘制条形图
    ax.bar(month_data['company'], month_data['count'])
    # 设置子图标题和坐标轴标签
    ax.set_title(f'月份: {month}', fontsize=12)
    ax.set_xlabel('公司', fontsize=10)
    ax.set_ylabel('统计数量', fontsize=10)
    # 旋转x轴标签,避免公司名称过长重叠
    ax.tick_params(axis='x', rotation=45, labelsize=8)

# 如果月份数量不是3的整数倍,隐藏多余的空图
for ax in axes[len(months):]:
    ax.axis('off')

# 自动调整布局
plt.tight_layout()
plt.show()
几个关键注意点
  • 数据格式要对:确保你的聚合数据是长格式(每行对应一个「月份-公司」的统计项)。如果是宽格式(列是不同公司,行是月份),可以用pd.melt()转成长期格式:
    # 示例:宽格式转长格式
    long_data = wide_data.melt(id_vars='month', var_name='company', value_name='count')
    
  • 月份显示优化:如果月份是数字(比如1-12),可以转成中文/英文月份名称,让图表更直观:
    # 转成中文月份名称
    agg_data['month'] = pd.to_datetime(agg_data['month'], format='%m').dt.month_name(locale='zh_CN')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:17:10