如何基于已有Pandas DataFrame创建2×2子图并绘制首个子图?
解决2×2子图中绘制Pandas分组数据条形图的问题
原代码存在的问题
c_country.unstack()执行后未赋值给变量,后续无法调用处理后的数据axs[0,0].barh(['c_country.unstack()'])错误传入字符串而非实际DataFrame数据- 未正确提取分组后的数据用于绘图
修正后的代码示例
import pandas as pd import matplotlib.pyplot as plt # 假设hosts_df是已创建好的DataFrame c = hosts_df # 分组统计并重塑数据结构,保存结果到变量 c_country = c.groupby(['country', c['enviroment']]).size() c_country_unstacked = c_country.unstack() # 创建2×2子图布局,可自定义画布大小 fig, axs = plt.subplots(2, 2, figsize=(10, 8)) # 在第一个子图(0,0)绘制水平条形图 # 方式1:直接用Pandas内置绘图方法绘制所有环境类别 c_country_unstacked.plot(kind='barh', ax=axs[0, 0]) # 方式2:手动指定单一环境类别绘制(替换为你的实际列名) # axs[0,0].barh(c_country_unstacked.index, c_country_unstacked['production']) # 设置子图标题与坐标轴标签 axs[0, 0].set_title('Gráfico 3') axs[0, 0].set_xlabel('数量') axs[0, 0].set_ylabel('国家') # 自动调整子图间距,避免标签重叠 plt.tight_layout() plt.show()
关键说明
- 必须将
unstack()的结果赋值给变量,才能在绘图时调用处理后的数据 - 使用Pandas的
plot()方法可直接将数据绑定到指定子图,比手动调用matplotlib方法更简洁 - 手动调用
barh时,需明确传入y轴类别(即分组后的索引)和对应的数值列 tight_layout()可自动调整子图间距,解决标题、标签重叠问题
内容的提问来源于stack exchange,提问作者user23613471
相关产品推荐
相关产品推荐

