2014-05-17 6 views
6

Ich möchte den Bereich oberhalb und unterhalb der beiden horizontalen Linien füllen.Füllfläche über und unter den horizontalen Linien im Diagramm

Dies ist, was ich mit gekommen bin:

Plot

par(mfrow=c(1,2)) 
x<-seq(1,24,1) 
y<-rnorm(24, 10, 2) 

for(i in 1:2) { 
plot(x,y,ylim=c(4,16)) 
lines(x,y) 
abline(h=11) 
abline(h=9)} 

hyper<-y 
hyper[hyper<11]<-11 
polygon(x,hyper,col="gray") 

Mein Hauptproblem ist, dass der Schnitt mit der horizontalen Linie ist nicht richtig.

+2

Ihr Hauptproblem besteht darin, dass Sie die Schnittpunkte zwischen den horizontalen Linien und den Linien, die darüber/darunter gehen, erhalten müssen. Die x-Werte dort sind was du brauchst. Dies erfordert ein wenig Berechnung. Beachten Sie auch, dass Sie separate vollständige Polygone mit NA-Werten im Vektor erstellen können. Wenn Sie das Problem lösen, finden Sie es am einfachsten, einzelne Polygone für jeden Punkt oberhalb/unterhalb zu erstellen. – John

+0

Werfen Sie einen Blick auf [** diese Antwort **] (http://stackoverflow.com/questions/9973381/shading-an-area-between-geom-line-and-the-x-axis/9974544#9974544) . Sollte nicht zu schwer sein, um es an Ihre Bedürfnisse anzupassen. – Henrik

+0

Ich dachte @gagolews Antwort war viel eleganter. Ich vermute, dass es auch in den räumlichen Plotfunktionen eine effektive Strategie geben kann, da sie Berechnungen von Kreuzungen erlauben, aber zu faul sind, es zu versuchen. –

Antwort

12

Wenn Sie noch die Figur mit der alten Schule graphics Einrichtungen (plot, abline, lines, und so weiter - die anderen Vorschläge betreffen die grid System-Derivate, wie ggplot2) machen möchten, können Sie versuchen, mit einem spielen benutzerdefinierte Region Ausschnitt, siehe ?clip:

an illustration

par(mfrow=c(1, 2)) 
x <- seq(1, 24, 1) 
y <- rnorm(24, 10, 2) 

# 1st plot 
plot(x, y, ylim=c(4,16), type='o') 

# 2nd plot 
plot(x, y, type='n', ylim=c(4,16)) 

clip(x1=min(x),x2=max(x), y1=11, y2=max(y)) 
polygon(c(min(x), x, max(x)), c(min(y), y, min(y)), col="gray") 

clip(x1=min(x),x2=max(x), y1=9, y2=min(y)) 
polygon(c(min(x), x, max(x)), c(max(y), y, max(y)), col="gray") 

clip(par("usr")[1], par("usr")[2], par("usr")[3], par("usr")[4]) # reset clipping region 
lines(x,y, type='o') 
abline(h=c(9, 11)) 

Zuerst haben wir die Plotregion ohne Plotten einrichten, dann setzen wir zwei verschiedene Clipping regio up ns (in die wir mit grauen Füllungen zeichnen), dann entfernen wir den Clipping-Bereich und zeichnen das Zeichnen mit Linien und Punkten neu.

Verwandte Themen