Как агрегат влияет на geom_text? - PullRequest
0 голосов
/ 23 мая 2018

Я нашел этот код где-то в сети и пытался настроить его так, как мне нужно.При этом я обнаружил несколько ситуаций, в которых выдается сообщение об ошибке, но я просто не понимаю, почему.

Я пробовал следующий код с 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.Но средство 3 выдает сообщение об ошибке:

Ошибка в FUN (X [[i]], ...): объект 'cyl' не найден.

И означает 4выдает сообщение об ошибке:

Ошибка: эстетика должна быть либо длины 1, либо соответствовать данным (3): label, x, y

Однако, если я опущутогда строка geom_text и средство 3, и средство 4 создают график безо всякой ошибки.

Я хочу понять, как изменение в расчете средних влияет на последнюю строку.Вероятно, это действительно просто, но я просто не могу понять это.Что именно вызывает эти ошибки и почему нет ошибки, если я опускаю geom_text?

Я сравнил кадры данных, прежде чем решил разместить здесь.И это были мои (заведомо неправильные) выводы:

geom_text(means, aes(label = mpg) ) работает со средствами1 и средствами2.Поскольку столбец 2 по-прежнему называется mpg в means3, он должен работать, но это не так.Почему бы и нет?

geom_text(data = means, aes(label = mpg) ) не работает с means4, так как больше нет столбца mpg.Поэтому я изменил его на geom_text(data = means, aes(label = means[2]), который должен работать независимо от имени столбца.Есть столбец cyl, поэтому он не показывает ту же ошибку, что и mean3.Но почему он жалуется на длину?Все четыре средства показывают длину, равную 2.

...