在geom_smooth

时间:2017-06-19 13:52:16

标签: r ggplot2

我有一个包含三个组的数据集(在本例中为土壤样本),每个组包含两个深度类别的测量值。我想为每个组使用相同的颜色,但深度不同的形状。我通过使用Depths进行着色和形状以及稍后组合传说来管理它。

但现在我想使用我用于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")。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

我们的目标似乎是按组着色点,并根据深度给出不同的形状。

如果我们添加:

<child [onClick]="timestamp"></child>
<button (click)="timestamp= new Date"></button>

将有两条蓝线,因为OP手动设置色标,前两个值为两个蓝色。为了解决这个问题,我们可以尝试:

+ geom_smooth(aes(color=Group), method="lm", show.legend = F) 

通过这种方式,点和颜色由相同的变量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中添加color = FALSE

结果如下: enter image description here