Используя R, я хотел построить некоторые точки данных и кривую над ними (что является границей принятия решений, обученной нейронной сети). Сначала я сделал это с обычными функциями графика, но теперь я хочу, чтобы он выглядел более причудливым, используя ggplot2
.R ggplot2: как мне построить неявную функцию (контурная линия только на одном уровне)?
Это то, что она выглядит без ggplot (обратите внимание на кривую особенно, точки не слишком актуальны):
Plotting точки с ggplot
не является проблемой, но теперь я хочу добавить кривая а, которая описывается следующей функцией:
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
это просто функция с двумя переменными приравнены к нулю, как и 3x-2y = 0, например. Как вы можете видеть, это сложно переписать в форме ay = ..., поэтому я хотел бы построить уравнение, используя график контура на уровне = 0. Он работал с использованием curve3d поверх моего диаграммы рассеяния:
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)
Теперь я действительно хочу использовать ggplot2
для достижения того же результата. Я пробовал графики stat_contour
, но они, похоже, не выполняют функции и не позволят выбрать только один уровень. Таким образом:
- Есть ли способ построить функцию в форме уравнения (например, ax + by = 0, но, вероятно, более сложную), используя
ggplot
? - Могу ли я добавить такую графическую кривую в свою геометрию
ggplot
с точками datapoints?
EDIT: вот пример кода воссоздании мои данные:
# 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)
Так что с этими данными, я хотел бы построить график функции 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
(или любой другой неявной функции, как 5x+2y=0
без переписать его).
Это поможет вам, если вы предоставите [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) с образцом входные значения. Определите все переменные, чтобы мы могли попытаться воссоздать график для проверки возможных решений. – MrFlick
Насколько я понимаю, я просто добавил пример кода. – sds