我是一个绝对的初学者,自从我开始使用ggplot2
以来已经过了2-3天。到目前为止,我一直使用Excel进行图形处理。 ggplot2真的杀了我,所以我想在这里发帖子。
昨晚,我讨论了如何将geom_smooth()
与其他图层进行对比,比如说geom_point()
这将在此讨论:Scale for aesthetics used in the plot | ggplot2
接下来,我考虑尝试多个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")
除了我添加了另一个geom_smooth().
输出结果为:
我也看了Format legend for multiple layers ggplot2似乎我可以手动覆盖颜色。
正如我们所看到的,第三层仍然覆盖了第二层的颜色(在图例中)。
所以,这就是我的所作所为:
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")
内使用geom_smooth()
。我们为什么要做这个?我相信如果我们使用aes(..)
我在这里没有明确的假设,所以我会避免猜测。我很感激你的想法。
更新:我的问题是关于发布的解决方案。
我们不能使用任何其他形状的散点图吗?已发布的解决方案建议将形状更改为大小= 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"))
然而,在运行此代码之后,我们将看到lm和loess的颜色已重置为蓝色,散点图的图例不再是实体类型。我能够改变形状,但不能改变颜色问题和图例问题。有什么想法吗?
答案 0 :(得分:8)
使用fill
和geom_point的空心形状,以及geom_smooth的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'))
但是,我还要指出,如果您希望颜色信息用于区分点类,那么平滑线条的不同颜色会让人分心。我认为最好将两条流畅的线条留空 - 线型足以区分它们