2013-10-02 2 views
4

У меня есть следующий простой код R:R: доверительный интервал частично выводится с ggplot2 (с использованием geom_smooth())

disciplines <- c("A","C","B","D","E") 
# To stop ggplot from imposing alphabetical ordering on x-axis 
disciplines <- factor(disciplines, levels=disciplines, ordered=T) 

d1 <- c(0.498, 0.521, 0.332, 0.04, 0.04) 
d2 <- c(0.266, 0.202, 0.236, 0.06, 0.06) 
d3 <- c(0.983, 0.755, 0.863, 0.803, 0.913) 
d4 <- c(0.896, 0.802, 0.960, 0.611, 0.994) 

df <- data.frame(disciplines, d1, d2, d3, d4) 
df.m <- melt(df) 
graph <- ggplot(df.m, aes(group=1,disciplines,value,colour=variable,shape=variable)) + 
     geom_point() + 
     geom_smooth(stat="smooth", method=loess, level=0.95) + 
     scale_x_discrete(name="Disciplines") + 
     scale_y_continuous(limits=c(-1,1), name="Measurement") 

Выход выглядит следующим образом: enter image description here

Почему доверительный интервал не отображаться вдоль всей кривой?

Примечание:

  1. Я не хочу иметь fullrange=TRUE потому, что только дает одну прямой синюю линию вместо зигзагообразной формы в текущем выходе.
  2. Я сравнивая этот участок с другим участком, который имеет отрицательные значения в (0, -1] Диапазон, поэтому ось у имеет limits=c(-1,1))

ответ

8

В течение первых трех сегментов доверительного интервала , верхний конец диапазона, по крайней мере, частично выходит за пределы (границы [-1, 1], а не слегка расширенный диапазон по осям). ggplot По умолчанию поведение пользователя не отображает какой-либо объект, который частично выходит за рамки. Вы можете это исправить, добавив oob=scales::rescale_none к scale_y_continuous:

library(scales) 
graph <- ggplot(df.m, aes(group=1,disciplines,value,colour=variable,shape=variable)) + 
     geom_point() + 
     geom_smooth(stat="smooth", method=loess, level=0.95) + 
     scale_x_discrete(name="Disciplines") + 
     scale_y_continuous(limits=c(-1,1), name="Measurement", oob=rescale_none) 
+0

Это сработало! Спасибо за быстрый ответ. Я смотрел на верхнюю половину оси y, думая, что в этом что-то не так ... но я забыл, что верхний предел был 1,0! Доверительный интервал идет чуть дальше. У меня такое чувство, что ваш ответ спас мне много часов в Googling в моем R-зараженном будущем. –

+2

Обратите внимание, что вам нужно будет явно загрузить пакет 'scale '. – mnel

+0

@ Ноам Росс, в '? Continu_scale' он говорит только« oob: \t Что делать со значениями вне пределов шкалы (за пределами границ)? 'Где я могу узнать больше о« Что делать? » – Henrik

4

Лучше документированы, и, возможно, более интуитивным, решение было бы просто использовать coord_cartesian:

ggplot(df.m, aes(group=1,disciplines,value,colour=variable,shape=variable)) + 
     geom_point() + 
     geom_smooth(stat="smooth", method=loess, level=0.95) + 
     scale_x_discrete(name="Disciplines") + 
     coord_cartesian(ylim = c(-1,1)) 
Смежные вопросы