如何绘制多个条形图(每个条形图代表一个列)来显示R中一列数值的平均值?

dba5bblo  于 2023-02-01  发布在  其他
关注(0)|答案(3)|浏览(154)

我有四列包含数值(数百行)。我想绘制一个条形图,在一个图表上显示每列的平均值。因此,它将在一个条形图上显示4个条形,每个条形代表一列。
列是非常活跃的,一般活跃的,轻微活跃的,静止的。我已经知道了汇总函数中每列的平均值,但是我想把它绘制在图表上。我需要为其他轴中的一个添加另一个变量吗?
我能够在条形图中绘制其中一列,并将卡路里显示为x轴,但我只想比较条形图中每列的平均值。

ggplot(Activity_Zero, aes(x = calories, y = veryactive))+
  stat_summary(geom = 'bar', fun.y = 'mean')

以下是我的数据样本:tibble of my data

mwngjboj

mwngjboj1#

这取决于你的数据是如何格式化的。我在下面提供了两个例子。
如果从包含汇总值的表开始,则可以执行此操作

library(ggplot2)

levels <- c("veryactive", "fairlyactive", "lightlyactive", "sedentary")
df1 <- data.frame(activitylevel = factor(levels, levels = levels),
                 meancalories = c(3000, 2500, 2000, 1500))
ggplot(df1, aes(x = activitylevel, y = meancalories)) +
  geom_col()

reprex package(v2.0.1)于2023年1月30日创建
如果你从原始数据开始,你可以这么做。

library(ggplot2)
levels <- c("veryactive", "fairlyactive", "lightlyactive", "sedentary")
df2 <- data.frame(activitylevel = factor(rep(levels,
                                     each = 20), levels = levels),
                 calories = c(rnorm(20, 3000, 100),
                              rnorm(20, 2500, 100),
                              rnorm(20, 2000, 100),
                              rnorm(20, 1500, 100))
                 )
ggplot(df2, aes(x = activitylevel, y = calories)) +
  stat_summary(geom = "col", fun = "mean")

reprex package(v2.0.1)于2023年1月30日创建
最后,如果您开始使用宽格式的数据(即每个活动级别对应一列),那么我建议您查找函数tidyr::pivot_longer,它将把您的数据转换为stat_summary所需的格式。

lkaoscv7

lkaoscv72#

使用colMeans

cols <- c("veryactive", "fairlyactive", "lightlyactive", "sedentary")
# base R
barplot(colMeans(Activity_Zero[, cols]))
# ggplot
library(ggplot2)

ggplot(stack(colMeans(Activity_Zero[, cols])), aes(ind, values)) + geom_col()
iklwldmw

iklwldmw3#

您可能需要像这样透视数据:

library(tidyverse)

df <- tibble(
  sedentary = sample(10:50, 100, replace = TRUE),
  lightlyactive = sample(10:20, 100, replace = TRUE),
  fairlyactive = sample(100:400, 100, replace = TRUE),
  veryactive = sample(300:600, 100, replace = TRUE),
  calories = sample(1500:2500, 100, replace = TRUE)
)

df |> 
  pivot_longer(c(veryactive, fairlyactive, lightlyactive, sedentary), 
               names_to = "group",
               values_to = "vals") |> 
  ggplot(aes(fct_inorder(group), vals)) +
  stat_summary(geom = "bar", fun = mean)

相关问题