当需要“大小”美观和geom_smooth时,更改图例外观

时间:2019-05-15 15:46:50

标签: r ggplot2

我有一个带有连续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()

上面的代码会生成想要的“大小”图例。

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

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

图例的大小现在与子弹头重叠。

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

1 个答案:

答案 0 :(得分:0)

要分隔图例(在本例中为线型与大小),可以给它们指定不同的标题。与在"d""d "之类的空格中添加空格相比,这可能是微小的区别,尽管这可能不是最好的主意。

我给线型赋予了自己的标题,因此它得到了自己的单独图例。我还通过将线型设置为aesNA也应使用)从尺寸图例的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)))