嗨,我有一个伟大的回归图与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")

我想要一个传奇,以显示信心间隔(阴影区域)和线的最佳契合(红色)。
提前谢谢!
发布于 2020-08-24 19:09:24
在ggplot2中,创建图例的方法是在aes()中指定美学。在这种情况下,您需要标记两个独立的美学:color应该包含一个标记为“最佳匹配线”的值,而fill包含一个标记为“置信区间”的值。
您的dataset中没有一列可以应用于这两种美学,但是如果您将一个字符串输入到aes(color=..., fill=...)中,那么该字符串将被用作标签,并且将为您创建美学。当我使用与您自己的格式匹配的组合数据集时,请注意下面的工作方式。特别要注意的是,col="red"已从原始代码中删除。如果它没有被删除,它将覆盖我们放置在color=中的aes()。
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()中生成的一个,然后您将删除图例。因此,我们将使用scale_color_manual()和scale_fill_manual()指定值。我们也不想要标题的传说,所以可以删除它也。
更改关键符号的外观:,您还想要改变传说的外观。对于“最佳匹配线”,您希望从该传奇图标(称为“键字形”)中移除填充。对于“置信区间”,我们要删除这条线,只显示灰色框。我们可以使用guides()和override.aes=参数在guide_legend()中完成所有这些操作。
传奇的位置:,最后,我们希望将图例移到底部,以获得更好的整体外观,通过theme()中的legend.position=元素访问。如果希望将它们保持在右边,则可能需要修改legend.spacing和legend.margin的legend.spacing元素,使它们更加接近。
把这一切结合在一起,我们得到了以下几点:
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")

https://stackoverflow.com/questions/63566719
复制相似问题