如何将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
相关产品推荐
相关产品推荐

