Сгруппированная гистограмма с полосами ошибок с использованием ggplot (набор данных, импортированный из Excel)

Я новичок в 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)

person Swetha Jayachandar    schedule 23.03.2019    source источник
comment
Не могли бы вы поделиться ссылкой на свои данные или использовать dput, чтобы поделиться данными   -  person Lunalo John    schedule 23.03.2019
comment
вам не нужен data$ в бит aes   -  person morgan121    schedule 23.03.2019
comment
Я отредактировал свой вопрос с данными! Спасибо!   -  person Swetha Jayachandar    schedule 23.03.2019


Ответы (2)


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

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)

введите здесь описание изображения

Данные в формате 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))
person Rui Barradas    schedule 23.03.2019

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

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

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