Добавление полос ошибок в график ggplot с измененными данными

Я пытаюсь добавить полосы ошибок к графику geom_line (), который имеет несколько значений y.

Чтобы управлять значениями ggplot2 y, мне пришлось преобразовать фрейм данных в длинный формат, чтобы данные были структурированы, как показано ниже.

Вот dput () моих данных:

mydata.m <- structure(list(Date = structure(c(16968, 16969, 16970, 16971, 
                                   16972, 16973, 16974, 16975, 16968, 16969, 16970, 16971, 16972, 
                                   16973, 16974, 16975), class = "Date"), error = c(NA, 4e-04, NA, 
                                                                                    0.0085, 0.0106, 0.179, NA, 0.0065, NA, 6e-04, NA, 0.007, NA, 
                                                                                    0.0129, NA, NA), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                            1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("c", "cal5C"
                                                                                                                            ), class = "factor"), value = c(NA, 0.0065, NA, 0.0625, 0.089, 
                                                                                                                                                            0.1825, NA, 0.1299, NA, 0.0046, NA, 0.082, NA, 0.16, NA, NA)), .Names = c("Date", 
                                                                                                                                                                                                                                      "error", "variable", "value"), row.names = c(NA, -16L), class = "data.frame")

Данные должны выглядеть так:

  head(mydata.m)
        Date  error variable  value
1 2016-06-16     NA        c     NA
2 2016-06-17 0.0004        c 0.0065
3 2016-06-18     NA        c     NA
4 2016-06-19 0.0085        c 0.0625
5 2016-06-20 0.0106        c 0.0890
6 2016-06-21 0.1790        c 0.1825

используя ggplot для построения моих данных:

plot1 <- ggplot(mydata.m[!is.na(mydata.m$value), ], 
            aes(x=Date, y=value, color=variable, group = variable))
plot1 <- plot1 + geom_point(size=8) + geom_line(linetype = 6, lwd =1.5)               

plot1 <- plot1 + scale_color_manual(name="", values = 
                                  c("navyblue","turquoise3"), labels = c("C", "calC")) 

plot1 <- plot1+ theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
                  panel.background = element_blank(), axis.line = element_line(colour = "black"))

break.vec <- c(as.Date("2016-06-16"),
           seq(from=as.Date("2016-06-16"), to=as.Date("2016-06-23"), by="day"))

plot1 <- plot1 + scale_x_date(breaks = break.vec, date_labels = "%d-%m",expand = c(0.05,0))

plot1 <- plot1 + theme(text = element_text(size=25), axis.text.x = element_text(size=35), 
                   axis.title.x = element_text(size=45), 
                   axis.title.y = element_text(size=45,margin=margin(t=0,r=20,b=0,l=0)),
                   axis.text.y = element_text(size=35))

plot1 <- plot1 + theme(legend.justification = c(1, 1), legend.position = c(0.05, 1), legend.key = element_rect(fill = "white"))

Это делает довольно привлекательный график, на котором я смог настроить цвета и положение легенды, что без изменения формы я изо всех сил пытался сделать. Но проблема, с которой я сейчас сталкиваюсь, заключается в том, как мне добавить ошибку в графики?

* Обратите внимание, что переменные имеют разное количество значений NA, при этом в cal5C чаще встречаются NA.

Я пытался:

plot1 <- plot1 + geom_errorbar(data =mydata.m[!is.na(mydata.m$error), ], aes(ymin=mydata.m$value - mydata.m$error, ymax=mydata.m$value + mydata.m$error), width=.05)

Но я получаю следующую ошибку:

Ошибка: эстетика должна иметь длину 1 или совпадать с данными (32): ymin, ymax, x, y, color, group

Есть ли другой способ добавить планки ошибок к обеим переменным y, следуя этому формату, где значения неравномерны, как и ошибки ???

Заранее спасибо, и я надеюсь, что это имеет смысл.


person Lmm    schedule 16.01.2018    source источник


Ответы (1)


Вы ссылаетесь на полный фрейм данных в aes geom_errorbar, например, mydata.m$error, даже несмотря на то, что вы сказали ему использовать сокращенный фрейм данных. Вы должны просто ссылаться на имена столбцов

plot1 <- plot1 + 
    geom_errorbar(
        data =mydata.m[!is.na(mydata.m$error), ], 
        aes(ymin=value - error, ymax=value + error), 
        width=.05)

Я также предположил, что вы имели в виду ymax = значение + ошибка, а не ошибка + ошибка, как вы писали

Обратите внимание, я не проверял и не запускал это. В будущем лучше всего предоставить данные вашего примера с помощью dput(mydata.m), чтобы другим людям было легче получить ваши данные (или подмножество подходящего размера) в R для тестирования.

person Sarah    schedule 16.01.2018