聚合如何影响geom_text?

时间:2018-05-22 22:23:07

标签: r ggplot2 aggregate

我在网上找到了这个代码,并且一直试图根据我的需要进行调整。在这样做时,我发现了几种情况,这些情况会给出错误信息,但我只是不明白为什么。

我尝试了以下代码,计算平均值的4个不同版本:

library(ggplot2)

mtcars$cyl <- as.factor(mtcars$cyl)

means1 <- aggregate(mtcars[1], mtcars[2], mean)
means2 <- aggregate(list(mpg = mtcars$mpg), list(cyl = mtcars$cyl), mean)
means3 <- aggregate(mtcars[1], list(mtcars$cyl), mean)
means4 <- aggregate(mtcars$mpg, mtcars[2], mean)

means <- means1  #or means2, means3, means4
means[2] <- round(means[2], digits=2)

p <- ggplot(data = mtcars, aes(x = cyl, y = mpg))+
     geom_dotplot(binaxis = "y", stackdir = "center")
p + stat_summary(fun.data = "mean_sdl", fun.args = list(mult = 1), 
             geom = "errorbar", width = 0.2, color = "red") +
stat_summary(fun.y = mean, geom = "point", color = "red") +
geom_text(data = means, aes(label = means[2]),hjust = -0.5)

它适用于手段1和手段2。但是,means3给出了错误消息:

  

FUN中的错误(X [[i]],...):object&#39; cyl&#39;没找到。

而means4给出错误信息:

  

错误:美学必须是长度1或与数据(3)相同:标签,x,y

但是,如果我省略geom_text行,那么means3和means4都会生成一个没有任何错误的图。

我想了解平均值计算的变化如何影响最后一行。这可能很简单,但我无法弄清楚。究竟是什么导致了这些错误,如果省略geom_text,为什么没有错误?

我在决定发布之前比较了数据帧。这些是我(显然是错误的)结论:

geom_text(means, aes(label = mpg) )适用于means1和means2。由于第2列仍然在均值3中命名为mpg,它应该可以工作,但事实并非如此。为什么不呢?

geom_text(data = means, aes(label = mpg) )不适用于means4,因为不再有列mpg。所以我改成了 geom_text(data = means, aes(label = means[2])应独立于列名称工作。 有一个列cyl,因此它不会显示与mean3相同的错误。但为什么它抱怨长度?所有四种方法都显示长度为2。

0 个答案:

没有答案