[R] How to shade area between lines in ggplot2

Luigi Marongiu m@rong|u@|u|g| @end|ng |rom gm@||@com
Fri Oct 23 11:10:53 CEST 2020


also from this site: https://plotly.com/ggplot2/geom_ribbon/
I get the answer is geom_ribbon but I am still missing something
```
#! plot
p = ggplot(data = trainset, aes(x=x, y=y, color=z)) +
  geom_point() + scale_color_manual(values = c("red", "blue"))
# show support vectors
df_sv = trainset[svm_model$index, ]
p = p + geom_point(data = df_sv, aes(x=x, y=y),
                   color="purple", size=4, alpha=0.5)
# show hyperplane (decision boundaries are off set by 1/w[2])
w = t(svm_model$coefs) %*% svm_model$SV  # %*% = matrix multiplication
slope_1 = -w[1]/w[2]
intercept_1 = svm_model$rho / w[2]
p = p + geom_abline(slope = slope_1, intercept = intercept_1, col =
"royalblue4")
p = p +     geom_ribbon(aes(ymin=intercept_1 - 1/w[2],
                            ymax=intercept_1 + 1/w[2],
                            x=x, fill = "band"), alpha = 0.3) +
  scale_fill_manual("",values="grey12")
```

On Fri, Oct 23, 2020 at 10:26 AM PIKAL Petr <petr.pikal using precheza.cz> wrote:
>
> Hi
>
> Did you try google? I got several answers using your question
>
> e.g.
> https://stackoverflow.com/questions/54687321/fill-area-between-lines-using-g
> gplot-in-r
>
> Cheers
> Petr
>
> > -----Original Message-----
> > From: R-help <r-help-bounces using r-project.org> On Behalf Of Luigi Marongiu
> > Sent: Friday, October 23, 2020 9:59 AM
> > To: r-help <r-help using r-project.org>
> > Subject: [R] How to shade area between lines in ggplot2
> >
> > Hello,
> > I am running SVM and showing the results with ggplot2. The results include
> > the decision boundaries, which are two dashed lines parallel to a solid
> line. I
> > would like to remove the dashed lines and use a shaded area instead. How
> > can I do that?
> > Here is the code I wrote..
> > ```
> > library(e1071)
> > library(ggplot2)
> >
> > set.seed(100)
> > x1 = rnorm(100, mean = 0.2, sd = 0.1)
> > y1 = rnorm(100, mean = 0.7, sd = 0.1)
> > y2 = rnorm(100, mean = 0.2, sd = 0.1)
> > x2 = rnorm(100, mean = 0.75, sd = 0.1)
> > df = data.frame(x = c(x1,x2), y=c(y1,y2),
> >                 z=c(rep(0, length(x1)), rep(1, length(x2)))) df$z =
> factor(c(rep(0,
> > length(x1)), rep(1, length(x2)))) df[, "train"] <- ifelse(runif(nrow(df))
> < 0.8, 1, 0)
> > trainset <- df[df$train == 1, ] testset <- df[df$train == 0, ] trainColNum
> <-
> > grep("train", names(df)) trainset <- trainset[, -trainColNum] testset <-
> testset[,
> > -trainColNum] head(trainset); str(df)
> >
> > svm_model<- svm(z ~ .,
> >                 data = trainset,
> >                 type = "C-classification",
> >                 kernel = "linear",
> >                 scale = FALSE)
> >
> > #! plot
> > p = ggplot(data = trainset, aes(x=x, y=y, color=z)) +
> >   geom_point() + scale_color_manual(values = c("red", "blue")) # show
> > decision boundaries w = t(svm_model$coefs) %*% svm_model$SV  # %*% =
> > matrix multiplication
> > slope_1 = -w[1]/w[2]
> > intercept_1 = svm_model$rho / w[2]
> > p = p + geom_abline(slope = slope_1, intercept = intercept_1) ### here we
> go:
> > can I use a shaded area between these two lines? ### p = p +
> > geom_abline(slope = slope_1, intercept = intercept_1 - 1/w[2],
> >                     linetype = "dashed") +
> >   geom_abline(slope = slope_1, intercept = intercept_1 + 1/w[2],
> >               linetype = "dashed")
> > print(p)
> >
> > ```
> >
> > Thank you
> >
> > --
> > Best regards,
> > Luigi
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-
> > guide.html
> > and provide commented, minimal, self-contained, reproducible code.



-- 
Best regards,
Luigi



More information about the R-help mailing list