Сгруппированный барплот с барами ошибок с использованием ggplot (набор данных импортирован из Excel) - PullRequest
1 голос
/ 23 марта 2019

Я новичок в R и статистике. Я пытаюсь сделать сгруппированный барплот с групповыми средствами и ошибками sd, используя ggplot. Я импортировал набор данных из Excel (xlsx).

По сути, есть два растения (Var) P & C в двух обработках (Temp) C & W, и их влажность измеряется. Я пытаюсь сделать барплот с помощью средств и панелей ошибок, сгруппированных как pc, pw и sc, sw. Я могу сделать барплот, но с ошибками я застрял. Когда я пытаюсь вычислить SD отдельно, а затем использовать его в качестве пределов в geom_errorbar, он показывает ошибку: эстетика должна иметь длину 1 или совпадать с данными (112): ymax, ymin. Я действительно не знаю, что еще делать.

Фиктивные данные -

Var            Temp    moisturep
Purple Teepee  cool    89.01974
Purple Teepee  cool    80.87346
Safari         cool    78.97458
Safari         cool    86.98475
Purple Teepee  warm    98.98734
Purple Teepee  warm    98.76593
Safari         warm    87.98745
Safari         warm    90.45870

Код -

data <- pgpr

temp.mean <- t(tapply(data$moisturep,
                      list(data$Var, data$Temp),
                      mean))

temp.sd <- t(tapply(data$moisturep,
                    list(data$Var, data$Temp),
                    sd))

limits <- aes(ymax = temp.mean + temp.sd,
              ymin = temp.mean - temp.sd)


ggplot(data, 
       aes(fill = data$Temp,
           x = data$Var,
           y = data$moisturep)) +
  geom_bar(position = "dodge", 
           stat = "summary", 
           fun.y = "mean") +
  geom_errorbar(limits, 
                position = position_dodge(0.9),
                width = 0.25)

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Один из способов сделать это заключается в следующем.Сначала я вычисляю средние и стандартные ошибки и помещаю их в агрегированный фрейм данных.

library(ggplot2)

agg <- aggregate(moisturep ~ Var + Temp, pgpr, mean)
tmp <- aggregate(moisturep ~ Var + Temp, pgpr, sd)
names(tmp)[3] <- "StdErr"
agg <- merge(agg, tmp)
rm(tmp)

ggplot(agg, 
       aes(x = Var,
           y = moisturep,
           fill = Temp)) +
  geom_bar(stat = "identity",
           position = "dodge") +
  geom_errorbar(aes(ymin = moisturep - StdErr, ymax = moisturep + StdErr), 
                position = position_dodge(0.9),
                width = 0.25)

enter image description here

Данные в формате dput.

pgpr <-
structure(list(Var = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 
2L), .Label = c("Purple Teepee", "Safari"), class = "factor"), 
Temp = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
.Label = c("cool", "warm"), class = "factor"), 
moisturep = c(89.01974, 80.87346, 78.97458, 86.98475, 
98.98734, 98.76593, 87.98745, 90.4587)), 
class = "data.frame", row.names = c(NA, -8L))
0 голосов
/ 29 апреля 2019

Вам не нужно рассчитывать SD отдельно.

Вы можете использовать stat = 'summary' на панели geom_error:

ggplot(data=mtcars, aes(x=gear, y=hp)) + geom_bar(stat='summary') + geom_errorbar(stat='summary', width=.2)
...