/ / ggplot2: Wie schattiere ich einen Bereich oberhalb einer Funktionskurve und unterhalb einer Linie? - r, plot, ggplot2

ggplot2: Wie schattiere ich einen Bereich oberhalb einer Funktionskurve und unterhalb einer Linie? - r, Handlung, ggplot2

Ich habe also einen Datenrahmen wie diesen:

a_data <-
data.frame(
f = f,
alpha = alpha,
asymptote = alpha_1_est)

und eine Funktion wie diese:

a_formula <- function(x) {
0.7208959 - 0.8049132 * exp(-21.0274 * x)}

Ich benutze sie mit ggplot2:

ggplot(a_data, aes(x = f, y = alpha)) +

geom_point() +

#function curve
stat_function(fun = a_formula,
color = "red") +

#asymptote of alpha
geom_hline(
yintercept = asymptote,
linetype = "longdash",
color = "blue")

was eine Handlung wie folgt ergibt: grundlegendes Grundstück

ich will und kann keinen Weg finden, den Bereich zwischen den beiden zu beschatten y Achse, die Funktionskurve (rot) und die Asymptotenlinie (gestrichelt) wie folgt: schattiertes Grundstück

Ich habe versucht, ein Band oder ein Polygon dort zu quetschen, aber es funktioniert nicht richtig über die kurve, nicht darunter (unten klappt das ganz gut).

So sieht der Datenrahmen aus:

> head(a_data)
f       alpha asymptote
1 0.01 0.007246302 0.7208959
2 0.03 0.374720198 0.7208959
3 0.05 0.484362949 0.7208959
4 0.07 0.540090209 0.7208959
5 0.09 0.625383303 0.7208959
6 0.11 0.590898201 0.7208959

P.S. Ich bin relativ neu im Bereich Stackoverflowing. Wenn ich also Konventionen gebrochen oder die Frage anderweitig durcheinander gebracht habe, zögere nicht, darauf hinzuweisen.

Antworten:

4 für die Antwort № 1

Das Beispiel unten zeigt wie geom_ribbon kann bequem zum Einfärben des Bereichs zwischen der horizontalen Linie und der Kurve verwendet werden.

df1 <- structure(list(x = c(0.01, 0.03, 0.05, 0.07, 0.09, 0.11), y = c(0.007246302,
0.374720198, 0.484362949, 0.540090209, 0.625383303, 0.590898201
), asymptote = c(0.7208959, 0.7208959, 0.7208959, 0.7208959,
0.7208959, 0.7208959)), .Names = c("x", "y", "asymptote"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))

a_formula <- function(x) { 0.7208959 - 0.8049132*exp(-21.0274*x) }

xs <- seq(min(df1$x),max(df1$x),length.out=100)
ysmax <- rep(0.7208959, length(xs))
ysmin <- a_formula(xs)
df2 <- data.frame(xs, ysmin, ysmax)

library(ggplot2)
ggplot(data=df1) + geom_point(aes(x=x, y=y)) +
geom_line(aes(x=x, y=asymptote), lty=2, col="blue", lwd=1) +
stat_function(fun = a_formula, color="red", lwd=1) +
geom_ribbon(aes(x=xs, ymin=ysmin, ymax=ysmax), data=df2, fill="#BB000033")

Bildbeschreibung hier eingeben