【问题标题】:Remove vertical line in legend caused by geom_vline in ggplot删除由ggplot中的geom_vline引起的图例中的垂直线
【发布时间】:2019-02-14 09:51:43
【问题描述】:

我正在尝试修复一个图例,以免ggplot 中的geom_vline 引起交叉。 我知道我的示例作为情节没有多大意义,但只是想要一个快速可重现的示例。

library(ggplot2)
ggplot(diamonds)+
  geom_point(aes(x = carat, y = depth, colour = "depth"), pch = 4)+
  geom_line(aes(x = carat, y = table, colour = "table"))+
  geom_vline(aes(xintercept = 2, colour = "x = 2"))+
  guides(colour = guide_legend(override.aes = list(linetype=c(0,1,1), shape=c(4,NA,NA))))

我知道我可以使用guide_legend(override.aes = …) 来解决每个图例项上都出现点和线的问题,但这似乎无法删除由geom_vline() 创建的垂直线

我发现几个问题正在寻找解决方案(如下),但它们似乎都通过使用不同的 aes(线型或使用填充的颜色)分隔 vline 来解决它。有没有办法可以保留colour aes 但我的传奇不会像这样?

R - combined geom_vline and geom_smooth in legend

Legend showing an unexpected black line with geom_vline

【问题讨论】:

  • 我不确定你想用颜色实现什么。您使用 aes 映射到 depthtable 变量,但随后将这些变量名称放在引号中,这不会映射到变量,而是赋予它们离散的颜色。
  • 只想指出,geom_linerange 也会出现此图例交叉问题。为 geom_linerange 设置 'show.legend=F' 并保持其他几何图例可见也对我有用。

标签: r ggplot2 aes legend


【解决方案1】:

这似乎适用于这个例子。不确定您的实际数据。

library(ggplot2)
ggplot(diamonds)+
  geom_point(aes(x = carat, y = depth, colour = "depth"), pch = 4)+
  geom_line(aes(x = carat, y = table, colour = "table"))+
  geom_vline(aes(xintercept = 2, colour = "x = 2"), show.legend = F)+
  guides(colour = guide_legend(override.aes = list(linetype=c(0,1,1), shape=c(4,NA,NA))))

reprex package (v0.2.0) 于 2018 年 9 月 9 日创建。

【讨论】:

  • 完美!我绝对认为如果我将 show.legend 设置为 FALSE,它根本不会出现在图例中,我认为那里的术语有点奇怪,但很高兴知道。谢谢。
  • 老实说,我也会这么想。我刚试了一下,看起来不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多