【问题标题】:Change legend appearance when both "size" aesthetic and geom_smooth are required当需要“大小”美学和 geom_smooth 时更改图例外观
【发布时间】:2019-05-16 00:19:31
【问题描述】:

我有一个带有连续 x 和 y 变量的图,第三个连续变量映射到“大小”美学,第四个离散变量映射到“形状”美学。如果我只指定geom_point(),则“大小”比例的图例会显示不同大小的子弹,这很好,但如果我还指定geom_smooth,则图例会在子弹上显示一条线,这不是我想要的。指定geom_smooth() 时,有没有办法在图例中只保留项目符号?

我尝试使用

guides(size=guide_legend(override.aes=list(shape="circle")))

但这没有用

这是一个 MRE:

df <- tibble(a=rnorm(100), b=rnorm(100), c=rnorm(100), d=rep(c("A", "B"), 50))
ggplot(df, aes(x=a, y=b, shape=d, size=c)) + 
  geom_point()

上面的代码为“size”生成了想要的图例。

我想要的是按组添加平滑线,具有不同的线型:

ggplot(df, aes(x=a, y=b, shape=d, size=c)) + 
  geom_point() + 
  geom_smooth(method="lm", aes(linetype=d), color="black")

大小图例现在有与项目符号重叠的线条。

当我添加geom_smooth() 时,我也希望得到第一个代码产生的图例。

【问题讨论】:

  • 在您的geom_smooth 中添加show.legend = F 将使其不会显示在任何图例中
  • 谢谢,但我确实希望显示 geom_smooth 的图例,以便读者了解线条所属的组。

标签: r ggplot2


【解决方案1】:

要将图例(在本例中为线型与大小)分开,您可以为它们指定不同的标题。这可能与在一个空格上添加一个空格一样小,例如"d""d ",尽管这可能不是最好的主意。

我给 linetype 自己的标题,所以它有自己的独立图例。我还从尺寸图例的aes 中删除了线型,为其提供了NA 的线型(NULL 也应该可以使用)。

library(ggplot2)

set.seed(515)
df <- tibble::tibble(a=rnorm(100), b=rnorm(100), c=rnorm(100), d=rep(c("A", "B"), 50))
ggplot(df, aes(x=a, y=b, shape=d, size=c)) + 
  geom_point() + 
  geom_smooth(method="lm", aes(linetype=d), color="black") +
  guides(linetype = guide_legend(title = "d - line"),
         size = guide_legend(title = "c", override.aes = list(linetype = NA)))

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多