Постройте доверительный интервал с помощью ggplot2 - PullRequest
0 голосов
/ 01 октября 2019

У меня есть набор данных, похожий на этот:

x <- data.frame(date = c(20190902, 20190903, 20190904),
            Group = c(rep("A", 3)),
            mean = c(2.5, 3.4, 4.6),
            ci_upper = c(1.2, 0.5, 0.3),
            ci_lower = c(0.5, 0.4, 0.25))

y <- data.frame(date= c(20190902, 20190903, 20190904),
            Group = c(rep("B", 3)),
            mean = c(0.4, 3.8, 6.2),
            ci_upper = c(1.9, 0.9, 0.5),
            ci_lower = c(0.5, 0.8, 0.8))

df <- rbind(x, y)

Я хотел бы построить доверительный интервал на таймфрейме с двумя различными группами (A и B).

В настоящее время я использую этот метод, но он не работает:

p <- ggplot(df) + 
    geom_line(aes(y = mean, x = date, group = type ))+
    geom_ribbon(aes(ymin = ci_lower, ymax = ci_upper, x = week, fill = "grey70"), alpha = 0.3)+
    scale_colour_manual("", values = "blue")+
    scale_fill_manual("", values = "grey12")

enter image description here

Я не был уверен, как я могу подойти к этому.

1 Ответ

1 голос
/ 02 октября 2019

Вы почти у цели. Требуются только некоторые небольшие исправления aes().

Но сначала я бы немного изменил ввод, чтобы сделать результат более привлекательным (теперь ci_upper / ci_lower не всегда более / менеепо сравнению с соответствующим средним значением):

# to ensure reproducibility of the samples
set.seed(123)
df$ci_lower <- df$mean - sample(nrow(x))
df$ci_upper <- df$mean + sample(nrow(x))

Главное, что следует изменить в вашем вызове ggplot(), - это определение эстетики, которая будет использоваться для построения графика. Обратите внимание, что значения эстетики по умолчанию должны быть установлены только один раз.

p <- ggplot(df, 
    aes(x = as.Date(as.character(date), format = "%Y%m%d"), 
        y = mean,
        group = Group, col = Group, fill = Group)) + 
    geom_line() +
    geom_ribbon(aes(ymin = ci_lower, ymax = ci_upper), alpha = 0.3)+
    scale_colour_manual("", values = c("red", "blue")) +
    scale_fill_manual("", values = c("red", "blue"))

Результат выглядит следующим образом:

plot_res

На самом деле последние две строки кода даже не нужны, так какЦветовая схема ggplot по умолчанию (которую вы использовали, чтобы показать желаемый результат) также выглядит очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...