[英]How can I create a legend for confidence interval and line of best fit for a stat_smooth in a lm (ggplot2)
嗨,我有一个很棒的回归图,具有 95% 的置信区间和最佳拟合线,但是似乎无法添加图例,我已经在各个位置尝试了 aes、scale_colour_manual,但都无济于事。 到目前为止我的代码是
ggplot(bats, aes(x=Days, y=AI))+geom_point(size=2, alpha=0.5) +
xlab("Number of survey days") +
ylab("Bat Activity Index")+
stat_smooth( method = "lm", formula = y~x,
size = 1, col = "red", level = 0.95, alpha=0.5)+
theme_light() +
ggtitle("Regression test between Bat Activity Index and number of survey days")
我想要一个图例来显示置信区间(阴影区域)和最佳拟合线(红色)。
提前致谢!
在ggplot2
,创建图例的方法是在aes()
指定您的美学。 在这种情况下,您需要标记两种不同的美学: color
应包含一个标记为“最佳拟合线”的值, fill
包含一个标记为“置信区间”的值。
您的数据集中没有一列适用于这两种美学,但是如果您在aes(color=..., fill=...)
输入字符串,则该字符串将用作标签美学将为您创造。 当我使用与您自己的格式匹配的虚构数据集时,请观察下面的工作原理。 特别注意col="red"
已从原始代码中删除。 如果它没有被删除,它将覆盖我们放置在aes()
的color=
。
library(ggplot2)
set.seed(1234)
bats <- data.frame(
Days=sample(1:30, 200, replace=TRUE),
AI=rnorm(200, mean=50, sd=20)
)
p <-
ggplot(bats, aes(x=Days, y=AI))+geom_point(size=2, alpha=0.5) +
xlab("Number of survey days") +
ylab("Bat Activity Index")+
stat_smooth(
aes(color="Line of Best Fit", fill="Confidence Interval"),
method = "lm", formula = y~x, size = 1,
level = 0.95, alpha=0.5
)+
theme_light() +
ggtitle("Regression test between Bat Activity Index and number of survey days")
p
好吧,现在我们有了传说,但这可能看起来不像预期的那样。 颜色图例有一条红线和一条灰色背景,而填充图则有一条红线和一条蓝线! 这是因为ggplot2
认识到"Line of Best Fit"
和"Confidence Interval"
不是同一个字符串,因此为两者创造了不同的审美价值。 在任何情况下,您都需要指定正确的color
和fill
值。
指定颜色:如果您在geom_smooth()
指定fill=
和color=
,它将覆盖我们在aes()
中geom_smooth()
color=
,您将删除图例。 因此,我们将使用scale_color_manual()
和scale_fill_manual()
指定值。 我们也不想要图例的标题,因此也可以将其删除。
更改关键字形的外观:您还想更改图例的外观。 对于“最佳拟合线”,您希望从该图例图标(称为“关键字形”)中删除填充。 对于“置信区间”,我们要删除该行并仅显示灰色框。 我们可以使用guides()
和guide_legend()
的override.aes=
参数来完成所有这些。
图例的位置:最后,我们希望将图例移到底部以获得更好的整体外观,可通过theme()
的legend.position=
元素访问。 如果您想让它们保持在右侧,您可能需要修改legend.spacing
和legend.margin
的theme()
元素,使它们更接近一些。
将所有这些放在一起,我们得到以下内容:
p +
scale_fill_manual(NULL, values = 'gray') +
scale_color_manual(NULL, values = 'red') +
guides(
color=guide_legend(override.aes = list(fill=NA), order=1),
fill=guide_legend(override.aes = list(color=NA), order=2)
)+
theme(legend.position = "bottom")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.