目标:为geom_point
创建一个颜色图例,每个组用不同的颜色点表示,并为geom_abline
创建一个图例,每条线用不同的颜色表示。
我做错了什么?有没有解决方案?
# data: mtcars + some made-up straight lines
library(ggplot2)
df = data.frame(Intercept = c(2,3,4), Slope = c(0,0,0), Group = factor(c(1, 2, 3)))
#1的评论: 基本情节没有什么特别之处,但是我已经将数据分组在aes()
内,并使颜色成为一个 aes()
。我认为在aes()
中同时使用“group”和“color”是标准的做法,以实现分组和着色。
# 1. my basic plot
ggplot(data = mtcars, aes(x = mpg, y = wt, group = vs, color = factor(vs))) +
geom_point() -> p
关于#2的评论: 明显我的ggplot
设置不正确,无法正确处理图例。我还尝试在aes
中添加group = Group
。但是有一个更严重的问题: geom_point
形成了2个组,geom_abline
形成了3个组,但是图例只显示了4种颜色/线条组合。其中一个已经被合并了(绿色的)。我做错了什么?
# 2. my naive attempt to add ablines of 3 different colours
p + geom_abline(data = df, aes(intercept = Intercept, slope = Slope,
colour = Group))
关于#3的评论:虽然图例中去掉了ablines,但点仍然不对。从这里开始会变得越来越绝望。
# 3. Suppress the ab_line legend?
p + geom_abline(data = df, aes(intercept = Intercept, slope = Slope,
colour = Group), show.legend = FALSE)
#4的评论:目前我正在努力达成这个目标。比错误的图例好的多。不过失去颜色还是有点遗憾。
# 4. Remove the geom_abline legend AND colors
p + geom_abline(data = df, aes(intercept = Intercept, slope = Slope))
评论 #5:我不知道我在这里希望什么......如果我在geom_point()
的调用中定义数据和aes,而不是在ggplot()
中定义,那么geom_abline()
似乎不会劫持颜色和图例,但实际上并没有任何区别。
# 5. An attempt to set the aes inside geom_point() instead of ggplot()
ggplot() +
geom_point(data = mtcars, aes(x = mpg, y = wt, group = vs, color = factor(vs))) +
geom_abline(data = df, aes(intercept = Intercept, slope = Slope, color = "groups")) +
scale_color_manual(values = c("red", "blue", "black"))
mtcars
中,您有0-1变量vs
,而在您的数据df
中,则有级别为1、2、3的Group
。当您将df
中的Group
级别更改为例如 A、B、C 时,您将获得5种不同的颜色。这是一种巧妙的解决方案,因为我希望geom_abline
和geom_point
可以使用不同的数据集。 - Adeladroplevels
)。 - Roman Luštrik