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

如何将Pandas DataFrame绘制的多柱状图以表格形式展示?

解决方法

你的问题在于每次循环都调用pd.DataFrame([t_dict]).plot.bar(),这会生成独立的图表窗口,而非把所有图整合到初始创建的画布中。可以通过预先创建子图布局,并在循环中指定子图的axes对象,实现所有柱状图在同一个画布上展示。

修改后的代码如下:

import matplotlib.pyplot as plt
import pandas as pd

# 获取所有唯一的county
unique_counties = data.county.unique()
n_counties = len(unique_counties)

# 创建子图布局:n行1列,可根据需求调整列数(比如改为2列)
fig, axes = plt.subplots(n_counties, 1, figsize=(15, 6*n_counties))
plt.subplots_adjust(hspace=0.8)  # 调整子图垂直间距

for r, x in enumerate(unique_counties):
    t_dict = {}
    for c, y in enumerate(col):
        # 简化计数逻辑,直接统计符合条件的样本量
        ct = len(data[(data.county == x) & (data[y] == 1)])
        if ct > 0:
            t_dict[y] = ct
    
    if len(t_dict) > 0:
        # 指定当前子图的axes绘图,避免生成新窗口
        pd.DataFrame([t_dict]).plot.bar(title=x, ax=axes[r], legend=False)
        axes[r].set_ylabel('数量')
    else:
        # 无数据时隐藏对应子图,避免空占位
        axes[r].axis('off')

plt.tight_layout()
plt.show()

关键修改说明:

  • 预先创建包含所有子图的画布,避免循环中重复生成独立图表
  • 绘图时通过ax=axes[r]指定子图位置,将所有图整合到同一画布
  • 简化计数逻辑,用len()替代value_counts().item(),结果一致且更高效
  • 增加无数据时的子图隐藏处理,优化整体展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:40:45