R 在图例中为多个图层显示正确的颜色

R 在图例中为多个图层显示正确的颜色,r,ggplot2,R,Ggplot2,我是一个绝对的初学者,从我开始使用ggplot2到现在已经有2-3天了。到目前为止,我一直使用Excel来绘制图表。ggplot2真的让我很痛苦,所以我想把我的查询发布在这里 昨晚,我讨论了如何用另一层绘制geom_smooth(),比如geom_point()这里讨论了这一点: 在继续这篇文章的过程中,我考虑尝试使用多个geom\u smooth() 以下是我所做的: ggplot(mpg, aes(displ, hwy)) + geom_point(aes(color = c

我是一个绝对的初学者,从我开始使用
ggplot2
到现在已经有2-3天了。到目前为止,我一直使用Excel来绘制图表。ggplot2真的让我很痛苦,所以我想把我的查询发布在这里

昨晚,我讨论了如何用另一层绘制
geom_smooth()
,比如
geom_point()
这里讨论了这一点:

在继续这篇文章的过程中,我考虑尝试使用多个
geom\u smooth()

以下是我所做的:

   ggplot(mpg, aes(displ, hwy)) +
     geom_point(aes(color = class)) +
     geom_smooth(method = "loess", se = FALSE, color = "black", aes(linetype = "loes")) +
     geom_smooth( method = "lm", se = FALSE, color = "red", aes(linetype = "lm",color = "green")) +
     labs(colour = "Method")
   ggplot(mpg, aes(displ, hwy)) +
     geom_point(aes(color = class)) +
     geom_smooth(method = "loess", se = FALSE, color = "123", aes(linetype = "loes")) +
     geom_smooth( method = "lm", se = FALSE, color = "345", aes(linetype = "lm",color = "green")) +
    scale_colour_manual(values=c("coral", "chocolate", "cornsilk", "papayawhip", "blanchedalmond","red","black","yellow","pink")) +
     labs(colour = "Method") 
除了我添加了另一个
geom_smooth()。

输出为:

我还看了看,似乎我可以手动覆盖颜色

如我们所见,第三层仍然覆盖第二层的颜色(在图例中)

下面是我所做的:

   ggplot(mpg, aes(displ, hwy)) +
     geom_point(aes(color = class)) +
     geom_smooth(method = "loess", se = FALSE, color = "black", aes(linetype = "loes")) +
     geom_smooth( method = "lm", se = FALSE, color = "red", aes(linetype = "lm",color = "green")) +
     labs(colour = "Method")
   ggplot(mpg, aes(displ, hwy)) +
     geom_point(aes(color = class)) +
     geom_smooth(method = "loess", se = FALSE, color = "123", aes(linetype = "loes")) +
     geom_smooth( method = "lm", se = FALSE, color = "345", aes(linetype = "lm",color = "green")) +
    scale_colour_manual(values=c("coral", "chocolate", "cornsilk", "papayawhip", "blanchedalmond","red","black","yellow","pink")) +
     labs(colour = "Method") 
第三层仍然覆盖第二层的颜色(在图例中)。谢谢你的帮助

我有两个问题:

问题1:我上面发布的问题是否有解决方案?如果有任何想法,我将不胜感激。这有什么解决办法吗?如果有任何想法,我将不胜感激

问题2:我注意到有时人们使用
aes(linetype=“lm”)
,而有时他们只是在
内部使用
(linetype=“lm”)
。我们为什么要这样做?我相信如果我们使用aes(…)
我在这里没有一个明确的假设,所以我会避免猜测。我很感激你的想法


更新:我的问题是关于发布的解决方案

散点图不能使用其他形状吗?发布的解决方案建议将形状更改为size=21,这让我有点不舒服

我更改了其他形状的代码(在下面的解决方案中),如下所示:

 huron <- data.frame(year = 1875:1972, level = as.numeric(LakeHuron))
   ggplot(mpg, aes(displ, hwy)) +
     # map geom_point class to 'fill'
     geom_point(shape=5, aes(color = class)) +
     # use color and linetype for geom_smooth
     geom_smooth(method = "loess", se = FALSE,
                 aes(linetype = "loess", color = 'loess')) +
     geom_smooth(method = "lm", se = FALSE, 
                 aes(linetype = "lm", color = "lm")) +
     # merge linetype and color legends by giving them the same name
     scale_linetype_discrete(name = "Method") +   
     scale_color_manual(name = "Method", values = c("red", "black","coral", "chocolate", "cornsilk", "papayawhip", "blanchedalmond","red","black"))

huron使用
fill
和空心形状表示几何图形点,使用
color
表示几何图形平滑

huron <- data.frame(year = 1875:1972, level = as.numeric(LakeHuron))
ggplot(mpg, aes(displ, hwy)) +
  # map geom_point class to 'fill'
  geom_point(shape=21, aes(fill = class), color = NA) +
  # use color and linetype for geom_smooth
  geom_smooth(method = "loess", se = FALSE,
              aes(linetype = "loess", color = 'loess')) +
  geom_smooth(method = "lm", se = FALSE, 
              aes(linetype = "lm", color = "lm")) +
  # merge linetype and color legends by giving them the same name
  scale_linetype_discrete(name = "Method") +   
  scale_color_manual(name = "Method", values = c('red', 'black'))

huron如果您不介意的话,我有两个后续问题:Q1 aes(线型)与linetype=“x”之间的区别是什么。我很感激你的想法。问题2:我修改了你的帖子(只是为了检查我的概念),看看我是否能像你一样将形状改为5(非填充颜色)。我成功了,除了两个图例(geom_smooth())和散点图同名。如果你愿意,我可以在上面添加我的代码和图表。我做了
geom_point(shape=5,aes(color=class))+…
然后,当您使用
aes(linetype=x)
时,我手动添加颜色
scale_color\u手动(name=“Method”,values=c(“red”,…)
1)将线型映射到数据元素x(即使x是文字值)
linetype=x
(即
(aes=…)
之外)始终在不映射的情况下分配文字值。只有贴图美学才受比例和图例的影响。2)注意,在我的帖子中,我使用的是
geom_点(aes(fill=class))
而不是
aes(color=class)
。我们保持了
颜色
的美观性,使
几何图形平滑
,这样它就可以有单独的图例中心,我注意到您使用的是shape=21(可填充的形状)。请原谅我的无知。那么,公平地说,如果我们使用aes(颜色=变量)
,我们不能有两组图例——一组用于两个
geom_smooth()
,一组用于
geom_point()
?基本上,唯一的方法是使用可填充形状,例如
shape=21
,然后应用
aes(fill=variable)
。我走对了吗?我很感激你的想法。我只是想确保我的概念是正确的。你想让我发布修改过的代码吗?我不确定我的帖子是否清晰。请让我知道。“我们不能为散点图使用任何其他形状吗?发布的解决方案建议将形状更改为size=21,这让我有点不舒服。”您可以使用具有
fill
属性、值为21到25 I的任何形状believe@arvi1000再次感谢您的评论。我想如果你能帮我做除
[21,25]
以外的任何形状,那就太好了。当形状为“可填充”时,即当它属于
[21,25]
时,我对您的特定解决方案感到满意。非常感谢您的帮助。。。