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

如何用ggplot和geom_bar为数据框各Item绘制多面板柱状图

问题描述

我有如下数据框:

Steps Item_number   avg
   1    Item 1       172
   2    Item 1       817
   3    Item 1       110 
   4    Item 1       703
   5    Item 1       74  
   6    Item 1       12
   7    Item 1       12
   8    Item 1       87
   1    Item 2       172
   2    Item 2       817
   3    Item 2       110 
   4    Item 2       703
   5    Item 2       74  
   6    Item 2       12
   7    Item 2       12
   8    Item 2       87
   1    Item 3       11
   2    Item 3       817
   3    Item 3       110 
   4    Item 3       703
   5    Item 3       745  
   6    Item 3       92
   7    Item 3       192
   8    Item 3       831

希望创建一个包含3个柱状图的面板,每个Item对应一个图,x轴代表Steps,y轴代表avg值,想学习如何用ggplot和geom_bar实现该需求。

解决方案

可以通过ggplot2的分面功能结合geom_bar轻松实现需求,具体步骤如下:

1. 数据准备

先将数据转换为R数据框格式(如果已有数据框可跳过):

df <- data.frame(
  Steps = rep(1:8, 3),
  Item_number = c(rep("Item 1", 8), rep("Item 2", 8), rep("Item 3", 8)),
  avg = c(172,817,110,703,74,12,12,87,
          172,817,110,703,74,12,12,87,
          11,817,110,703,745,92,192,831)
)

2. 绘制分面柱状图

核心代码如下:

library(ggplot2)

ggplot(df, aes(x = factor(Steps), y = avg)) +
  # 绘制柱状图,stat="identity"表示直接使用y轴给定的数值
  geom_bar(stat = "identity", fill = "#2E86AB", width = 0.7) +
  # 按Item_number拆分面板,ncol=1表示单列布局,改成ncol=3则为三列
  facet_wrap(~ Item_number, ncol = 1) +
  # 设置图表标签
  labs(
    x = "Steps",
    y = "avg值",
    title = "各Item的Steps对应avg值柱状图"
  ) +
  # 使用简洁的黑白主题
  theme_bw() +
  # 自定义样式优化
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12),
    strip.text = element_text(size = 12, face = "bold")
  )

关键参数说明:

  • aes(x = factor(Steps), y = avg):将Steps转为因子类型,保证x轴显示离散的步骤序号;y轴绑定avg数值
  • geom_bar(stat = "identity"):默认geom_bar是统计计数,这里需要直接用avg值作为柱子高度,必须指定stat="identity"
  • facet_wrap(~ Item_number):根据Item_number字段自动拆分出对应的子图面板,通过ncol或nrow控制面板排列方式

如果想要和示例图一致的横向三列布局,只需把facet_wrap的参数改为facet_wrap(~ Item_number, ncol = 3)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:48:25