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
:
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.
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
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
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. –