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

如何基于已有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:49:54