R : confidence interval being partially displayed with ggplot2 (using geom_smooth())

大憨熊 提交于 2019-12-01 21:34:13

问题


I have the following simple R code:

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") 

The output looks like this:

Why does the confidence interval not display along the entire curve?

Notes:

  1. I don't want to have fullrange=TRUE because that just yields a single straight blue line instead of the zigzag shape in the current output.
  2. I am comparing this plot with another plot which has negative values in the (0,-1] range, which is why the y-axis has limits=c(-1,1))

回答1:


For the first three segments of the confidence interval, the top end of the range is at least partially out of bounds (the bounds being [-1, 1], not the slightly expanded range on the axes). ggplot's default behavior is to not display any object that is partially out of bounds. You can fix this by adding oob=scales::rescale_none to 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) 



回答2:


A better documented, and perhaps more intuitive, solution would be to simply use 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)) 


来源:https://stackoverflow.com/questions/19148702/r-confidence-interval-being-partially-displayed-with-ggplot2-using-geom-smoot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!