问题
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:
- 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. - 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