微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动将文本放置在ggplot2中

如何解决自动将文本放置在ggplot2中

我需要相互绘制许多变量。在每张图中,我想自动将线性回归模型中的信息放置在图的左上角

以mtcars数据集为例,我想使用一段代码,无论我使用什么变量,该代码都会为我提供图形左上角的线性回归模型的R2和p值互相图谋。我已经提出了解决方案,在标题中标出了R2和P,但是由于我需要另一个标题,所以它不是最佳的。

ggplotRegression <- function (fit) {
  
  require(ggplot2)
  
  ggplot(fit$model,aes_string(x = names(fit$model)[2],y = names(fit$model)[1])) + 
    geom_point() +
    stat_smooth(method = "lm",col = "red") +
    labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared,1)," P =",signif(summary(fit)$coef[2,4],1)))
    }

disp_vs_wt_cyl4 <- mtcars %>%
  filter(cyl=="4") 

ggplotRegression(lm(disp ~ wt,data = disp_vs_wt_cyl4)) +
  geom_point(size = 3.74,colour = "#0c4c8a") +
  theme_bw()

解决方法

您可以在情节中使用annotation_custom,这将使您拥有一个单独的标题。在此示例中,我们允许将标题传递给您的函数:

ggplotRegression <- function (fit,title) {
  
  require(ggplot2)
  lab <- grid::textGrob(label = paste0(
    as.character(as.expression(fit$call$formula)),"\n","Adj R\u00b2 = ",signif(summary(fit)$adj.r.squared,1),",p = ",signif(summary(fit)$coef[2,4],1)),x = unit(0.05,"npc"),y = unit(0.9,just = "left",gp = grid::gpar(size = 14,fontface = "bold"))
  ggplot(fit$model,aes_string(x = names(fit$model)[2],y = names(fit$model)[1])) + 
    ggtitle(title) +
    geom_point() +
    stat_smooth(method = "lm",col = "red") +
    annotation_custom(lab)
}

所以我们可以这样做:

disp_vs_wt_cyl4 <- mtcars %>% filter(cyl=="4") 

ggplotRegression(lm(disp ~ wt,data = disp_vs_wt_cyl4),"My Title") +
  geom_point(size = 3.74,colour = "#0c4c8a") +
  theme_bw()

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。