[英]Setting an individual color palette for the group variable in geom_smooth
我有一个包含三组(在本例中为土壤样本)的数据集,每组都包含来自两个深度类别的测量值。 我想为每组使用相同的颜色,但深度使用不同的形状。 我通过使用深度进行着色和形状,然后结合图例来实现这一点。
但现在我想使用与 geom_point 相同的颜色设置一个额外的 geom_smooth。 对于 geom_smooth,我需要将 group 参数设置为样本组(不是深度),但我无法为 geom_smooth 设置新的 scale_col_manual。
df <- data.frame(X=runif(24, 0,1), Y=runif(24,80,100), Depth=as.factor(LETTERS[1:6]),
Group=as.factor(LETTERS[1:3]))
labels <- c("A", "A", "B", "B", "C", "C")
library(ggplot2)
p1 <- ggplot(df, aes(X,Y,shape=Depth, col=Depth)) +
geom_point() +
scale_colour_manual(labels = labels ,
values = c("blue", "blue", "red", "red", "green", "green")) +
scale_shape_manual(labels = labels,
values = c(0,15,1,16, 2, 17))
p1
p1 + geom_smooth(aes(group=Group), method="lm", show.legend = F)
根据上面使用的颜色,geom_smooth 显示的回归线应该使用c("blue", "red", "green")
。 有什么方法可以实现吗?
我们的目标似乎是按组着色点并根据深度给出不同的形状。
如果我们添加:
+ geom_smooth(aes(color=Group), method="lm", show.legend = F)
将有两条蓝线,因为 OP 已手动设置色标,前两个值有两个蓝色。 为了解决这个问题,我们可以尝试:
ggplot(df, aes(X,Y)) + geom_point(aes(shape=Depth, col=Group)) +
scale_colour_manual(values = c("blue", "red", "green")) +
scale_shape_manual(labels = labels, values = c(0,15,1,16, 2, 17)) +
geom_smooth(aes(group = Group, color=Group), method="lm", show.legend = FALSE) +
guides(
shape = guide_legend(
override.aes = list(color = rep(c('blue', 'red', 'green'), each = 2))
),
color = FALSE)
这样,点和颜色由同一个变量Group
着色,所以不会有冲突。 为了使形状具有相应的颜色,我们可以使用guide
来覆盖其默认颜色。 为了抑制点和线的颜色图例,我们必须在guides
添加color = FALSE
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.