如何在R中绘制展示多列数值平均值的多柱状图?
解决方法
要画出四个活动强度的均值对比柱状图,核心是把你的宽格式数据转成长格式——因为ggplot更适合处理长格式数据来做多类别对比,不需要额外添加新变量,调整数据结构就行。
步骤1:加载工具包并转换数据格式
先加载tidyverse(包含ggplot2和数据转换工具tidyr),然后把四列活动数据转成“活动类型-时长”的长格式:
library(tidyverse) # 将宽格式数据转成长格式 activity_long <- Activity_Zero %>% # 只保留需要对比的四列 select(veryactive, fairlyactive, lightlyactive, sedentary) %>% pivot_longer( cols = everything(), # 选中所有列 names_to = "activity_level", # 新列:活动强度类型 values_to = "minutes" # 新列:对应的时长数值 )
步骤2:绘制均值对比柱状图
有两种方式可以实现,选一种就行:
方式一:直接在ggplot中计算并绘制均值
ggplot(activity_long, aes(x = activity_level, y = minutes)) + stat_summary(geom = "bar", fun = "mean", fill = "#619CFF") + # 添加标签美化 labs( title = "不同活动强度的平均时长对比", x = "活动强度", y = "平均时长(分钟)" ) + theme_minimal()
方式二:先计算均值再绘图(更直观)
先单独算出每个活动类型的均值,再用柱状图展示:
# 计算各活动类型的均值 activity_means <- activity_long %>% group_by(activity_level) %>% summarize(mean_minutes = mean(minutes, na.rm = TRUE)) # 绘图 ggplot(activity_means, aes(x = activity_level, y = mean_minutes)) + geom_bar(stat = "identity", fill = "#619CFF") + labs( title = "不同活动强度的平均时长对比", x = "活动强度", y = "平均时长(分钟)" ) + theme_minimal()
说明
你之前的代码是把calories作为x轴,现在要对比四个列的均值,只需要把活动类型(veryactive等)作为x轴变量,y轴对应各类型的均值即可,不需要额外设置新变量。
内容的提问来源于stack exchange,提问作者shahanimal
相关产品推荐
相关产品推荐

