2016-08-04 7 views
6

Ich möchte mit geom_ribbon in ggplot2 schattierte Vertrauensbereiche zeichnen. Wenn jedoch eine der Linien außerhalb der festgelegten y-Grenzen liegt, wird das Farbband abgeschnitten, ohne sich bis zum Rand der Auftragung zu erstrecken.ggplot ribbon cut off bei y limits

Minimal Beispiel

x <- 0:100 
y1 <- 10+x 
y2 <- 50-x 

ggplot() + theme_bw() + 
    scale_x_continuous(name = "x", limits = c(0,100)) + 
    scale_y_continuous(name = "y", limits = c(-20,100)) + 
    geom_ribbon(aes(x=x, ymin=y2-20, ymax=y2+20), alpha=0.2, fill="#009292") +  
    geom_line(aes(x=x , y=y1)) + 
    geom_line(aes(x=x , y=y2)) 

enter image description here

Was ich will, ist das gleiche Verhalten zu reproduzieren, wie ich mit Plotten in der Basis R erhalten, wo die Schattierung an den Rand

plot(x, y1, type="l", xlim=c(0,100),ylim=c(-20,100)) 
lines(x,y2) 
polygon(c(x,rev(x)), c(y2-20,rev(y2+20)), col="#00929233", border=NA) 

erweitert enter image description here

+0

mit 'oob = Waage :: squish' im' scale_y_continuous() 'Anruf hilfreich ist, aber einige seiner eigenen Artefakte erzeugt ... –

+0

Mögliche Duplikat [Beschränken ggplot2 Achsen, ohne zu entfernen Daten (außerhalb der Grenzen): Zoom] (http://stackoverflow.com/questions/25685185/limit-ggplot2-axes-without-removing-data-outs-limits-zoom) – aosmith

Antwort

9

Das Problem lem ist, dass limits alle Daten entfernt, die nicht in seinem Bereich liegen. Was Sie wollen, ist zuerst zu plotten und dann hineinzuzoomen. Dies kann mit coord_cartesian getan werden.

ggplot() + theme_bw() + 
    geom_ribbon(aes(x=x, ymin=y2-20, ymax=y2+20), alpha=0.2, fill="#009292") +  
    geom_line(aes(x=x , y=y1)) + 
    geom_line(aes(x=x , y=y2)) + 
    coord_cartesian(ylim = c(-25, 100), xlim =c(0,100)) 

enter image description here