首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为lm中的stat_smooth (ggplot2)创建信任间隔和最佳匹配线的图例

如何为lm中的stat_smooth (ggplot2)创建信任间隔和最佳匹配线的图例
EN

Stack Overflow用户
提问于 2020-08-24 18:28:39
回答 1查看 1.4K关注 0票数 0

嗨,我有一个伟大的回归图与95%的置信区间和最佳拟合线,但似乎不能添加一个传奇,我尝试了aes,scale_colour_manual,在不同的地点,但没有任何效果。到目前为止我的代码是

代码语言:javascript
复制
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")

我想要一个传奇,以显示信心间隔(阴影区域)和线的最佳契合(红色)。

提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-08-24 19:09:24

ggplot2中,创建图例的方法是在aes()中指定美学。在这种情况下,您需要标记两个独立的美学:color应该包含一个标记为“最佳匹配线”的值,而fill包含一个标记为“置信区间”的值。

您的dataset中没有一列可以应用于这两种美学,但是如果您将一个字符串输入到aes(color=..., fill=...)中,那么该字符串将被用作标签,并且将为您创建美学。当我使用与您自己的格式匹配的组合数据集时,请注意下面的工作方式。特别要注意的是,col="red"已从原始代码中删除。如果它没有被删除,它将覆盖我们放置在color=中的aes()

代码语言:javascript
复制
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"不是同一个字符串,因此为两者创造了不同的审美价值。在任何情况下,您都希望指定正确的colorfill值。

指定颜色:--如果您在geom_smooth()中指定了fill=color=,它将覆盖我们在aes()中生成的一个,然后您将删除图例。因此,我们将使用scale_color_manual()scale_fill_manual()指定值。我们也不想要标题的传说,所以可以删除它也。

更改关键符号的外观:,您还想要改变传说的外观。对于“最佳匹配线”,您希望从该传奇图标(称为“键字形”)中移除填充。对于“置信区间”,我们要删除这条线,只显示灰色框。我们可以使用guides()override.aes=参数在guide_legend()中完成所有这些操作。

传奇的位置:,最后,我们希望将图例移到底部,以获得更好的整体外观,通过theme()中的legend.position=元素访问。如果希望将它们保持在右边,则可能需要修改legend.spacinglegend.marginlegend.spacing元素,使它们更加接近。

把这一切结合在一起,我们得到了以下几点:

代码语言:javascript
复制
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")

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63566719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档