'ggpairs, color by group but single regression line
Given the following ggpairs plotting:
data(iris)
ggpairs(iris[1:4],
lower=list(
mapping = aes(color=iris$Species),
continuous = wrap("points", size=0.7)
)
)
How can I add single regression lines to each of the scatter plots without the regression line also being mapped to the grouping as would occur when adding continuous = wrap("smooth")?
I would like the points to be colored by group but the regression line for the relationship between the x and y variable overall.
I can't figure out where to place the aes mapping so that it only affects 'points' and not 'smooth'.
Solution 1:[1]
You need to create your own function if you want specialized plots like this. It must be in a particular format, taking a data, mapping and ... argument, and create a ggplot from these:
library(GGally)
my_func <- function(data, mapping, ...) {
ggplot(data, mapping) +
geom_point(size = 0.7) +
geom_smooth(formula = y~x, method = loess, color = "black")
}
ggpairs(iris[1:4],
lower=list(
mapping = aes(color=iris$Species),
continuous = my_func
)
)
If you are looking for a straight regression line, then just modify my_func as appropriate. For example,
my_func <- function(data, mapping, ...) {
ggplot(data, mapping) +
geom_point(size = 0.7) +
geom_smooth(formula = y~x, method = lm, color = "black", se = FALSE,
linetype = 2)
}
Gives you:
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Allan Cameron |



