r - 当需要“大小”美学和 geom_smooth 时更改图例外观
问题描述
我有一个带有连续 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()
.
解决方案
要将图例(在本例中为线型与大小)分开,您可以为它们指定不同的标题。这可能与在一个空格上添加一个空格一样微小的差异,例如"d"
and "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)))
推荐阅读
- azure - 跟踪 Azure DevOps 构建活动
- ruby-on-rails - 将日期字符串转换为时区特定格式
- email - google 应用程序脚本:file.setOwner() 未在 Google Drive 中转移所有权
- c# - 如何从查看 http post 将列表模型传递给控制器
- google-apps-script - 谷歌表格以模态嵌入谷歌表单
- c# - MVVM - 如何从父 ViewModel 引用子 ViewModel(ViewModel 在其视图中创建)?
- javascript - How to rotate an arc in canvas using context?
- java - 如果java中的字符串是不可变的,为什么我可以这样做?
- python - 尝试从 Mac 上的终端打开 Python3
- ruby-on-rails - 使用 redis 进行易碎测试