我有一个包含连续 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()
时,我也希望得到第一个代码生成的图例。
最佳答案
要将图例分开(在本例中为线型与尺寸),您可以为它们指定不同的标题。这可能与向其中添加一个空格一样微小,例如 "d"
和 "d "
,尽管这可能不是最好的主意。
我给线型赋予了自己的标题,所以它有自己单独的图例。我还从尺寸图例的 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)))
关于r - 当需要 "size"美学和 geom_smooth 时更改图异常(exception)观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56153226/