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

在R语言中如何将多列数据映射到X轴绘制柱状图?

解决ggplot多列数据绘制柱状图的问题

问题根源

你用VeryActiveMinutes:SedentaryMinutes的写法是错误的——这种冒号语法在数值列里会被解释成生成序列(只取第一行的两个值生成区间),而非选择多列。而且ggplot的x美学映射需要的是单个分类变量,不是多列数值,这就是报错提示"Aesthetics must be either length 1 or the same as the data"的核心原因。

另外你提到无需绘制Y轴,但实际上柱状图需要Y轴展示每类活动的分钟数,你可能是想直接用列的数值作为柱子高度,这时候应该用geom_col()(用于展示已有数值),而非默认做计数统计的geom_bar()。

解决方案:将宽格式数据转成长格式

ggplot对长格式数据更友好,先把你的4列活动分钟数转换成「活动类型(分类)」和「分钟数(数值)」两列:

步骤1:安装并加载tidyr包(未安装过的话)

install.packages("tidyr")
library(tidyr)

步骤2:转换数据格式

# 把指定的4列转成长格式
activity_long <- activity %>%
  pivot_longer(
    cols = VeryActiveMinutes:SedentaryMinutes,  # 选择要转换的目标列
    names_to = "activity_type",                 # 生成的分类列名称
    values_to = "minutes"                       # 生成的数值列名称
  )

步骤3:绘制柱状图

library(ggplot2)

ggplot(data = activity_long) +
  geom_col(mapping = aes(x = activity_type, y = minutes)) +
  # 如果不需要显示Y轴标签,可添加这一行
  theme(axis.title.y = element_blank())

补充:展示活动时长的平均值

如果你想展示每类活动的平均时长(而非每个观测值单独成柱),可以用stat_summary():

ggplot(data = activity_long) +
  stat_summary(
    mapping = aes(x = activity_type, y = minutes),
    fun = mean,
    geom = "col"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:02:47