[R] How to shade area between lines in ggplot2

PIKAL Petr petr@p|k@| @end|ng |rom prechez@@cz
Mon Oct 26 07:30:18 CET 2020


Hi

Put fill outside aes

p+geom_ribbon(aes(ymin = slope_1*x + intercept_1 - 1/w[2],
ymax = slope_1*x + intercept_1 + 1/w[2]), fill = "blue", alpha=0.1)

The "hole" is because you have two levels of data (red and blue). To get rid 
of this you should put new data in ribbon call.
Something like

newdat <- trainset
newdat$z <- factor(0)
p+geom_ribbon(data=newdat, aes(ymin = slope_1*x + intercept_1 - 1/w[2],
ymax = slope_1*x + intercept_1 + 1/w[2]), fill = "yellow", alpha=0.1)

Cheers
Petr

> -----Original Message-----
> From: Luigi Marongiu <marongiu.luigi using gmail.com>
> Sent: Friday, October 23, 2020 3:30 PM
> To: PIKAL Petr <petr.pikal using precheza.cz>
> Cc: r-help <r-help using r-project.org>
> Subject: Re: [R] How to shade area between lines in ggplot2
>
> Thank you, but this split the area into two and distorts the shape of the 
> plot.
> (compared to ``` p + geom_abline(slope = slope_1, intercept = intercept_1 -
> 1/w[2],
>                     linetype = "dashed", col = "royalblue") +
>   geom_abline(slope = slope_1, intercept = intercept_1 + 1/w[2],
>               linetype = "dashed", col = "royalblue") ```
>
> Why there is a hole in the middle of the ribbon? and the color is not 
> grey...
>
> On Fri, Oct 23, 2020 at 2:35 PM PIKAL Petr <petr.pikal using precheza.cz> wrote:
> >
> > Hi
> >
> > What about something like
> >
> > p+geom_ribbon(aes(ymin = slope_1*x + intercept_1 - 1/w[2],
> > ymax = slope_1*x + intercept_1 + 1/w[2], fill = "grey70", alpha=0.1))
> >
> > Cheers
> > Petr
> >
> > > -----Original Message-----
> > > From: Luigi Marongiu <marongiu.luigi using gmail.com>
> > > Sent: Friday, October 23, 2020 11:11 AM
> > > To: PIKAL Petr <petr.pikal using precheza.cz>
> > > Cc: r-help <r-help using r-project.org>
> > > Subject: Re: [R] How to shade area between lines in ggplot2
> > >
> > > 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-lin
> > > > es-u
> > > > sing-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
>
>
>
> --
> Best regards,
> Luigi


More information about the R-help mailing list