28

我正在使用 ggplot2 并试图生成一个显示以下数据的图。

df=data.frame(score=c(4,2,3,5,7,6,5,6,4,2,3,5,4,8),
              age=c(18,18,23,50,19,39,19,23,22,22,40,35,22,16))
str(df)
df

而不是做变量的频率图(见下面的代码),我想为每个 x 值生成一个平均值图。所以我想绘制每个年龄段的平均分数。在 x 轴上 18 岁时,我们可能在 y 轴上有一个3来表示分数。在 23 岁时,我们的平均分数可能为4.5,依此类推(编辑:平均值已更正)。理想情况下,这将用条形图表示。

ggplot(df, aes(x=factor(age), y=factor(score))) + geom_bar()
Error: stat_count() must not be used with a y aesthetic.

只是不确定如何在 R 中使用 ggplot2 执行此操作,并且似乎在此类图上找不到任何内容。从统计上看,我不知道我想要绘制的情节是否正确,但那是另一家商店。

谢谢!

4

3 回答 3

61

您可以在 中使用汇总函数ggplot。以下是实现相同结果的两种方法:

# Option 1
ggplot(df, aes(x = factor(age), y = score)) + 
  geom_bar(stat = "summary", fun = "mean")

# Option 2
ggplot(df, aes(x = factor(age), y = score)) + 
  stat_summary(fun = "mean", geom = "bar")

在此处输入图像描述

旧版本的ggplot使用fun.y而不是fun

ggplot(df, aes(x = factor(age), y = score)) + 
  stat_summary(fun.y = "mean", geom = "bar")
于 2012-08-08T05:17:00.947 回答
8

如果我理解你的话,你可以尝试这样的事情:

library(plyr)
library(ggplot2)
ggplot(ddply(df, .(age), mean), aes(x=factor(age), y=factor(score))) + geom_bar()
于 2012-08-08T05:08:20.080 回答
6

您也可以aggregate()在基础 R 中使用,而不是加载另一个包。

temp = aggregate(list(score = df$score), list(age = factor(df$age)), mean)
ggplot(temp, aes(x = age, y = score)) + geom_bar()
于 2012-08-08T05:16:42.240 回答