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 at gmail.com>
Sent: Friday, October 23, 2020 3:30 PM
To: PIKAL Petr <petr.pikal at precheza.cz>
Cc: r-help <r-help at 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 at 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 at gmail.com>
Sent: Friday, October 23, 2020 11:11 AM
To: PIKAL Petr <petr.pikal at precheza.cz>
Cc: r-help <r-help at 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 at precheza.cz>
-----Original Message-----
From: R-help <r-help-bounces at r-project.org> On Behalf Of Luigi
Marongiu
Sent: Friday, October 23, 2020 9:59 AM
To: r-help <r-help at 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
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 =
length(x1)), rep(1, length(x2)))) df[, "train"] <-
ifelse(runif(nrow(df))
trainset <- df[df$train == 1, ] testset <- df[df$train == 0, ]
trainColNum
grep("train", names(df)) trainset <- trainset[, -trainColNum]
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) %*%
%*% = 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
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