【问题标题】:How can I remove the legend title in ggplot2?如何删除 ggplot2 中的图例标题?
【发布时间】:2011-08-26 17:53:08
【问题描述】:

我对 ggplot2 中的图例有疑问。

假设我有一个关于两个农场两种不同颜色的胡萝卜平均长度的假设数据集:

carrots<-NULL
carrots$Farm<-rep(c("X","Y"),2)
carrots$Type<-rep(c("Orange","Purple"),each=2)
carrots$MeanLength<-c(10,6,4,2)
carrots<-data.frame(carrots)

我做了一个简单的条形图:

require(ggplot2)
p<-ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
geom_bar(position="dodge") +
opts(legend.position="top")
p

我的问题是:有没有办法从图例中删除标题(“类型”)?

谢谢!

【问题讨论】:

标签: r ggplot2 legend


【解决方案1】:

@pascal 在comment 中将比例函数的name 参数(例如scale_fill_discrete)设置为NULL 的解决方案对我来说是最佳选择。它允许删除标题以及使用"" 时保留的空白空间,同时允许用户有选择地删除标题,这是theme(legend.title = element_blank()) 方法无法实现的。

由于它隐藏在评论中,因此我将其发布为可能增加其知名度的答案,并向@pascal 致敬。

TL;DR(用于复制粘贴):

scale_fill_discrete(name = NULL)

【讨论】:

    【解决方案2】:

    我发现最好的选择是使用+ theme(legend.title = element_blank()),正如用户“gkcn”所说。

    对于我(2015 年 3 月 26 日)使用之前建议的 labs(fill="")scale_fill_discrete("") 删除一个标题,只添加另一个图例,这没有用。

    【讨论】:

    • 最佳答案,因为 name = "" 只是放了一个空格,而 scale_manual 是一个更一般的答案
    • 这对我有用。其他的没有,因为他们添加了一个额外的图例。
    【解决方案3】:

    您已经有两个不错的选择,所以这里有另一个使用scale_fill_manual()。请注意,这还可以让您轻松指定条形的颜色:

    ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
      geom_bar(position="dodge") +
      opts(legend.position="top") +
      scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))
    

    如果您使用的是最新(截至 2015 年 1 月)版本的 ggplot2(版本 1.0),那么以下内容应该可以工作:

    ggplot(carrots, aes(y = MeanLength, x = Farm, fill = Type)) +
      geom_bar(stat = "identity", position = "dodge") +
      theme(legend.position="top") +
      scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))
    

    【讨论】:

    • 谢谢,@Chase。它不仅有效,而且是我见过的最漂亮的配色方案:)
    • +1:这是一个重要的选项,因为当使用多个刻度时(例如scale_fill_manualscale_color_manualscale_shape_manual),它们需要相同的name,否则会出现多个图例。
    • @Chase,这会用一个非零高度的空字符串替换标题,从而在图例框的顶部创建一个垂直空间(当有一个时),还是会表现得像theme(legend.title = element_blank()) 狼吞虎咽?在我的非 mwe 上,它看起来有额外的空间,但可能是其他事情。
    • @PatrickT - 好问题。这个答案在这一点上几乎 100% 过时了...opts 自从0.9.1 以来就没有使用过,现在 scales 包已经从ggplot2 等中分离出来,等等。我会回去并在我有机会时更新它,但我的直觉是你的建议可能是今天的首选解决方案。如果您尝试一下并且有效,请随时相应地编辑我的答案。
    • @PatrickT - 这是一个非常公平的问题,我认为我没有答案......可能这里的 R 社区应该考虑并提出一个解决方案...我经常遇到同样的问题,因为我在 3 多年前查找现在如何做某事时找到了自己的答案...令人沮丧!
    【解决方案4】:

    您可以通过将图例标题作为第一个参数传递给比例来修改图例标题。例如:

    ggplot(carrots, aes(y=MeanLength, x=Farm, fill=Type)) + 
      geom_bar(position="dodge") +
      theme(legend.position="top", legend.direction="horizontal") +
      scale_fill_discrete("")
    

    为此还有一个快捷方式,即labs(fill="")

    由于您的图例位于图表顶部,您可能还希望修改图例方向。您可以使用opts(legend.direction="horizontal") 执行此操作。

    【讨论】:

    • 谢谢@Andrie,效果很好。有趣的是,您提到了 legend.direction="horizo​​ntal"。我想这样做,但它不适用于我在旧笔记本电脑上使用的旧 R 版本(R 2.11.1,我真丢脸),但该功能似乎在 R 2.13.1 中工作!跨度>
    • 使用NULL而不是""根本不会尝试绘制标题,否则当图例框可见时标题的空间会有点太大
    【解决方案5】:

    对我有用的唯一方法是使用legend.title = theme_blank(),我认为与labs(fill="")scale_fill_discrete("") 相比,它是最方便的变体,在某些情况下也可能有用。

    ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
    geom_bar(position="dodge") +
    opts(
        legend.position="top",
        legend.direction="horizontal",
        legend.title = theme_blank()
    )
    

    附: documentation 中有更多有用的选项。

    【讨论】:

    • opts() 和 theme_blank 现在已过时。改用:“+ theme(legend.title = element_blank())”。
    • 在设置空字符串的选项上使用legend.title = element.blank() 是图例上方没有多余的空白区域。
    【解决方案6】:

    你可以使用labs

    p + labs(fill="")
    

    【讨论】:

    • 原来的标题会有空格,如果你不想要空格,请使用 Yuriy 的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2014-10-07
    • 2020-05-30
    • 2013-01-24
    相关资源
    最近更新 更多