ggplot图例:geom_abline干扰

时间:2017-11-07 10:32:57

标签: r ggplot2

目标:为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中同时具有“组”和“颜色”以实现分组和着色是标准的。

# 1. my basic plot
ggplot(data = mtcars, aes(x = mpg, y = wt, group = vs, color = factor(vs))) + 
    geom_point() -> p

关于#2的评论:很明显,我没有设置ggplot权限来正确处理图例。我还尝试在{a}中添加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))

enter image description here

关于#3 的评论:图例中的删除已被删除,但这些点仍然不对。从这里开始,它变得越来越绝望。

# 3. Suppress the ab_line legend?
p + geom_abline(data = df, aes(intercept = Intercept, slope = Slope,
                           colour = Group), show.legend = FALSE)

enter image description here

关于#4的评论:这就是我现在要做的。没有传说而不是错误的传说。关于失去颜色的耻辱。

# 4. Remove the geom_abline legend AND colors
p + geom_abline(data = df, aes(intercept = Intercept, slope = Slope))

enter image description here

评论#5 :我不知道我在这里希望...如果我在调用geom_point()而不是{{1}中定义数据和aes不知何故,ggplot()不会劫持颜色和图例,但不会,它似乎没有什么区别。

geom_abline())

enter image description here

2 个答案:

答案 0 :(得分:4)

一种选择是为mtcars数据使用填充形状,然后您可以使用fill比例和colour比例,而不是两个colour比例。如果您不想要黑色轮廓,可以在colour="white"语句中添加geom_point等选项,以便更改点边缘的颜色。

library(ggplot2)
df = data.frame(Intercept = c(2,3,4), Slope = c(0,0,0), Group = factor(c(1, 2, 3)))
ggplot(data = mtcars, aes(x = mpg, y = wt, group = vs, fill = factor(vs))) + 
           geom_point(shape=21, size=2) +
           geom_abline(data = df, aes(intercept = Intercept, slope = Slope,
                              colour = Group))

enter image description here

答案 1 :(得分:0)

如果您需要或想要图例中的水平线,您可以考虑使用此代码:

library(ggplot2)
df = data.frame(Intercept = c(2,3,4), Slope = c(0,0,0),
Group = factor(c(1, 2, 3)))
ggplot(data = mtcars,
   aes(x = mpg, y = wt, group = vs, fill = factor(vs))) + 
geom_point(shape=21, size=2) +
geom_hline(data = df,
          aes(yintercept = Intercept,colour = Group))

plot with geom_hline