Mit R wollte ich einige Datenpunkte und eine Kurve über sie (das ist die Entscheidungsgrenze mit neuronalen Netzwerk trainiert). Zuerst habe ich es mit den normalen Plot-Funktionen gemacht, aber jetzt will ich, dass es mit Hilfe von ggplot2
etwas schicker aussieht.R ggplot2: Wie zeichne ich eine implizite Funktion (Konturlinie auf nur einer Ebene)?
Dies ist, was es ohne ggplot (besonders beachten Sie die Kurve, die Punkte sind nicht allzu relevant) wie folgt aussieht:
die Punkte mit ggplot
Plotten ist kein Problem, aber jetzt will ich hinzufügen wie auch die Kurve, die durch die folgende Funktion beschrieben:
1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98 = 0
Dies ist eine gerade Funktion mit zwei Variablen gleich Null gesetzt, wie 3X-2y = 0 zum Beispiel. Wie Sie sehen können, ist es schwierig, diese in ay = ... umzuschreiben, deshalb möchte ich die Gleichung mit einem Konturdiagramm bei Level = 0 darstellen. Es funktionierte mit curve3d über meinem Streudiagramm:
curve3d(1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98 = 0, sys3d="contour",levels=0, add=TRUE)
Jetzt möchte ich wirklich ggplot2
verwenden, um das gleiche Ergebnis zu erzielen. Ich habe versucht, die stat_contour
Plots, aber sie scheinen keine Funktionen zu übernehmen und wird nicht erlauben, nur eine Ebene zu wählen. Also:
- Gibt es eine Möglichkeit, eine Funktion in Form einer Gleichung zu plotten (wie ax + by = 0, aber wahrscheinlich komplexere) Form mit
ggplot
? - Kann ich eine solche geplottete Kurve zu meinem geom_point
ggplot
mit Datenpunkten hinzufügen?
EDIT: hier ist ein Codebeispiel meine Daten neu zu erstellen:
# data
x1 <- rnorm(200, 3, .28)
y1 <- rnorm(200, 3, .28)
x2 <- rnorm(100, 3.45, .15)
y2 <- rnorm(100, 3.35, .15)
x3 <- rnorm(100, 3.3, .15)
y3 <- rnorm(100, 2.4, .15)
groups <- c(rep("H",200), rep("A",100), rep("B",100))
data <- data.frame(x = c(x1,x2,x3), y = c(y1,y2,y3), group = groups)
# the working ggplot
windows()
ggplot(data, aes(x=x,y=y)) + xlim(2,4) + ylim(2,4) + geom_point(aes(color = group)) + scale_shape_manual(values=c(1,16))
# the old plot that I would like to plot with ggplot over the previous one with as well (doesn't work)
curve3d(1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98, xlim=c(2,4), ylim=c(2,4), sys3d="contour",levels=0, add=TRUE)
Also mit diesen Daten würde ich 1.91*(1/(1+exp(-(23.50+12.64*x-24.54*y))))-1.95*(1/(1+exp(-(73.51-12.36*x-10.01*y)))) + 0.98 = 0
die Funktion zeichnen möchten (oder jede andere implizite Funktion, wie 5x+2y=0
ohne umschreiben).
Es ist einfacher, Ihnen zu helfen, wenn Sie ein Beispiel liefern (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) Eingabewerte. Definieren Sie alle Variablen, damit wir versuchen können, das Diagramm neu zu erstellen, um mögliche Lösungen zu testen. – MrFlick
Ich verstehe, ich habe gerade ein Codebeispiel hinzugefügt. – sds