r - 当需要 "size"美学和 geom_smooth 时更改图异常(exception)观

标签 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()

上面的代码为“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/

相关文章:

r - 如何在绘图上以相同的顺序关联聚类标签和树状图

r - 在 R 曲线中绘制 Logscale()

如果您已经熟悉 R,则学习 SAS 的资源

r - 使用ggplot2以任意顺序手动设置填充条的顺序

r - 如何在 ggplot2 中使用 facet_grid 制作 donut chart ?

r - ggplot : how to plot heatmap regardless of the number of variables

r - 如何使用 r 中的 if 条件基于其他列创建新列

r - 在 R 中创建多元 Q-Q 图

r - ggrepel:结合使用 position_dodge 和 geom_label_repel

r - 仅在R中将ggplot上的x轴显示为月