首页 文章

删除ggplot2中的额外图例

提问于
浏览
73

我有一个简单的数据框,我正在尝试使用 ggplot2 进行组合线和点图 . 假设我的数据如下所示:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))

而我正试图制作一个情节:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g

结果看起来很好,有一个例外 . 它有一个额外的图例,显示我的 geom_point 图层的 alpha .

Extra Legend for geom_point transparency

如何保持图例显示组颜色,但不能显示我的alpha设置?

3 回答

  • 141

    可以在 ggplot 呼叫中设置或映射美学 .

    • aes(...) 中定义的美学从数据映射,并创建图例 .

    • 美学也可以通过在 aes() 之外定义来设置为单个值 .

    在这种情况下,您似乎希望设置 alpha = 0.8 并映射 colour = group .

    去做这个,

    alpha = 0.8 放在 aes() 定义之外 .

    g <- ggplot(df, aes(x = x, y = y, group = group))
    g <- g + geom_line(aes(colour = group))
    g <- g + geom_point(aes(colour = group), alpha = 0.8)
    g
    

    enter image description here

    对于任何映射变量,您可以在相应的 scale_... 调用中使用 guide = 'none' 来抑制图例的外观 . 例如 .

    g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
            geom_line(aes(colour = group)) +
            geom_point(aes(colour = group, alpha = 0.8))
    g2 + scale_alpha(guide = 'none')
    

    这将返回相同的情节

    编辑@Joran 's comment is spot-on, I' ve使我的答案更加全面

  • 20

    只需在不需要它的部分后添加 show.legend = F 代码即可 .

    g <- ggplot(df, aes(x=x, y=y, group=group))
    g <- g + geom_line(aes(colour=group))
    g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)
    
  • 0

    对于旧版本的ggplot2(2012年底发布的0.9.2之前的版本),这个答案应该有效:

    我用 colour_scale 尝试过这个并没有用 . 看来 colour_scale_hue 项的作用类似于具有默认参数 TRUE 的函数 . 我添加 scale_colour_hue(legend=FALSE) 并且它有效 .

    我不确定ggplot中的所有色标项是否都是这种情况

相关问题