使用美学和 geom_text 时从图例中删除“a”

Posted

技术标签:

【中文标题】使用美学和 geom_text 时从图例中删除“a”【英文标题】:Remove 'a' from legend when using aesthetics and geom_text 【发布时间】:2013-08-22 15:47:18 【问题描述】:

如何从该代码生成的图例中删除字母“a”?如果我删除geom_text,那么'a' 字母将不会显示在图例中。不过,我想保留geom_text

ggplot(data = iris, aes(x = Sepal.Length, y=Sepal.Width, 
                        shape = Species, colour = Species)) + 
   geom_point() + 
   geom_text(aes(label = Species))

【问题讨论】:

【参考方案1】:

geom_text中设置show.legend = FALSE

ggplot(data = iris,
       aes(x = Sepal.Length, y = Sepal.Width, colour = Species,
           shape = Species, label = Species)) + 
    geom_point() +
    geom_text(show.legend = FALSE)

参数show_guideggplot2 2.0.0 (see release news) 中更名为show.legend


ggplot2 2.0.0:

show_guide = FALSE 就像这样......

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width , colour = Species,
                        shape = Species, label = Species ), size = 20) + 
geom_point() +
geom_text(show_guide  = FALSE)

【讨论】:

ggplot2 3.2.1 中将show.legend 设置为FALSE 将完全删除图例!【参考方案2】:

我遇到了类似的问题,我试图用geom_text_repel 标记的不同颜色的点后面出现一个“a”。要删除“a”,以便它只显示后面没有“a”的点,我必须在 geom_text_repel 中添加 show.legend=FALSE 作为参数。

希望这对可能遇到相同问题的任何人都有意义!

【讨论】:

【参考方案3】:

您还可以在geom_label_repel() 的参数中使用show.legend = FALSE 来删除图例中的“a”。 所以,而不是

ggplot(d, aes(wt, mpg)) +
  geom_point() +
  theme_classic(base_size = 18) +
  geom_label_repel(
    aes(label = rownames(d), fill = factor(cyl)),
    size = 5, color = "white"
  )+ guides(
  fill = guide_legend(
    title = "Legend Title",
    override.aes = aes(label = "")
  )
)

你可以的,

ggplot(d, aes(wt, mpg)) +
  geom_point() +
  theme_classic(base_size = 18) +
  geom_label_repel(
    aes(label = rownames(d), fill = factor(cyl)),
    size = 5, color = "white",
    show.legend = FALSE  )

【讨论】:

【参考方案4】:

我们可以使用guide_legend(override.aes = aes(...))来隐藏图例中的'a'。

下面是一个简短的例子,说明如何使用guide_legend()

library(ggrepel)
#> Loading required package: ggplot2

d <- mtcars[c(1:8),]

p <- ggplot(d, aes(wt, mpg)) +
  geom_point() +
  theme_classic(base_size = 18) +
  geom_label_repel(
    aes(label = rownames(d), fill = factor(cyl)),
    size = 5, color = "white"
  )

# Let's see what the default legend looks like.
p

# Now let's override some of the aesthetics:
p + guides(
  fill = guide_legend(
    title = "Legend Title",
    override.aes = aes(label = "")
  )
)

由reprex package (v0.2.1) 于 2019 年 4 月 29 日创建

【讨论】:

我认为这是一个比公认的更好的解决方案,因为它允许专门从图例中删除“a”字母,而如果需要,其他美学可以保持不变。【参考方案5】:

就像尼克说的

以下代码仍会产生错误:

geom_text(aes(x=1,y=2,label="",show_guide=F))

而:

geom_text(aes(x=1,y=2,label=""),show_guide=F)

在 aes 参数之外消除了图例上的 a

【讨论】:

有没有办法将“a”自定义为“r”之类的其他东西?【参考方案6】:

我有一个similar problem。西蒙的解决方案对我有用,但需要稍微改变一下。我没有意识到我需要在 geom_text 的参数中添加“show_guide = F”,而不是用它替换现有的参数 - 这是西蒙的解决方案所显示的。对于像我这样的 ggplot2 菜鸟来说,这并不是那么明显。一个合适的例子会使用 OP 的代码,然后像这样添加缺少的参数:

..
geom_text(aes(label=Species), show_guide = F) +
..

【讨论】:

以上是关于使用美学和 geom_text 时从图例中删除“a”的主要内容,如果未能解决你的问题,请参考以下文章

删除 ggplot 中的“组”图例

向 ggplot geom_tile 添加多个图例

获取 ggplot2 图例以在 r 中显示百分比符号

如何在ggplot2中全局定义彩条指南的美学?

R语言可视化及作图7--ggplot2之标签、图例和标题绘制

在ggplot的图例中设置最小/最大尺寸