【问题标题】:删除 ggplot2 中的额外图例
【发布时间】:2012-07-27 17:37:38
【问题描述】:

我有一个简单的数据框,我正在尝试使用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

如何让图例显示组颜色,而不是显示我的 alpha 设置的图例?

【问题讨论】:

    标签: r ggplot2 legend


    【解决方案1】:

    美学可以在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
    

    对于任何映射变量,您可以通过在适当的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 的评论很到位,我的回答更全面

    【讨论】:

    • 这是正确的方法,因为 OP 是在设置而不是映射美学,但通常您可以使用 g + scale_alpha(guide = "none") 之类的东西来抑制任何图例的出现。
    • 确实如此。答案已经详细说明。有一个全面的答案确实更有意义,而不仅仅是针对 OP 问题。
    • 非常感谢您的补充说明。这对帮助我理解 ggplot 的哲学大有帮助。
    • 我已经使用 ggplot 一年多了,但我从来没有理解映射变量或设置变量之间的区别。这是迄今为止我见过的最好的 SO 答案,恭喜。
    • @theforestecologist 那是因为group 美学本身不会产生任何尺度或指南。它总是在修改其他东西。你永远不会得到“群体”美学的传奇。
    【解决方案2】:

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

    我用colour_scale 尝试过,但没有成功。看来colour_scale_hue 项的工作方式类似于具有默认参数TRUE 的函数。我添加了scale_colour_hue(legend=FALSE),它起作用了。

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

    【讨论】:

    • scale_* 调用中使用legend 已被弃用,最好使用scale_colour_hue(guide = "none")
    • 考虑到legend=FALSE 已被弃用,正如@shujaa 评论所指出的那样,这实际上是一个重复的答案,即将guide = "none" 添加到scale_fill/color* 函数中。跨度>
    【解决方案3】:

    只需在不需要的部分后添加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)
    

    【讨论】:

    • 这比映射与设置美学更直观(尽管这也消除了很多误解)
    猜你喜欢
    • 2013-11-10
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多