r - 使用 geom_colour_manual 获取图例,其中 ggplot 包括回归线和 ab 线
问题描述
我有一个 geom_point 图,我在其中添加了 geom_smooth 回归线(我想显示为灰色虚线)和 geom_abline(我想显示为实心黑线)。我可以这样做,但是当我尝试包含标识两条线的图例时,问题就出现了。
我花了四个多小时查看每个看起来不太相关的 stackoverflow 问题,以及 scale_XXX_manual 和 legends 的 R 食谱部分,我觉得我明白需要什么,即使用 aes 中的虚拟变量指定颜色和线型相关的几何图形,然后使用选项在 scale_XXXX_manual 语句中定义这些虚拟变量,values=
就像我在以下代码中所做的那样
df <- data.frame(xvar=c(1, 1.7, 2, 2.47, 3.47),
yvar=c(-0.543, 0.326, 0.147, 0.554, 1.180),
wtvar=c(167, 43, 965, 841, 84))
ggplot(df, aes(x=xvar, y=yvar))+
geom_point()+
geom_smooth(method="lm",
mapping = aes(weight = wtvar, colour="A", linetype="B"))+
geom_abline(slope=1, intercept = (-1.3), aes(colour="C", linetype="D"), size=1)+
ylim(-1,2.5)+
theme_classic()+
scale_colour_manual(name="Legend",
labels=c("regression", "benchmark"),
values=c(A="grey85", C="black"))+
scale_linetype_manual(name="Legend",
labels=c("regression", "benchmark"),
values=c(B="dashed", D="solid"))
我收到以下错误:
错误:ggplot2 不知道如何处理 uneval 类的数据
非常感谢解释为什么我所做的事情不起作用以及正确解决方案的指导。
更新:按照建议聚合 geom_smooth 中的两个 aes 语句(感谢 Z. Lin - 我认为映射选项仅与回归有关,但我现在明白这都是美学)停止错误消息并更接近期望的结果。情节本身看起来应该如此,但谜题中缺少的部分是图例中包含基准线。我得到一个图例,只有灰色虚线被标识为回归线。
解决方案
试着把slope
andintercept
放在里面geom_abline
aes
ggplot(df, aes(x=xvar, y=yvar))+
geom_point()+
geom_smooth(method="lm",
aes(weight = wtvar, colour="A", linetype="B"))+
geom_abline(aes(slope=1, intercept = (-1.3), colour="C", linetype="D"), size=1)+
ylim(-1,2.5)+
theme_classic()+
scale_colour_manual(name="Legend",
labels=c("regression", "benchmark"),
values=c(A="grey85", C="black"))+
scale_linetype_manual(name="Legend",
labels=c("regression", "benchmark"),
values=c(B="dashed", D="solid"))
推荐阅读
- visual-studio-code - 如何创建 VS Code 的任务来执行当前文件,并将其文件夹设置为当前工作目录?
- java - 编写扩展 ArrayList 的类的构造函数
- glut - GlutKeyboardFunc 回调在 openGL 中不起作用
- ruby-on-rails - 无法启动 Rails 项目地址与请求的协议不兼容
- javascript - “没有可用的互联网”时如何显示自定义页面加载错误?
- perl - 需要帮助理解 Perl 脚本
- amazon-web-services - 推送通知配置解析 AWS 上的 Bitnami API 工作
- java - 服务被销毁时如何创建通知
- r - 如何从另一个 XTS 创建虚拟变量的 XTS?
- typescript - 找不到以下指针的任何 GraphQL 类型定义:src/**/*.graphql