【问题标题】:Plotting regression line equation (order of 2) in each plot在每个图中绘制回归线方程(2 阶)
【发布时间】:2019-06-16 14:13:29
【问题描述】:

我一直在编写一些代码,以根据数据框中的数据迭代创建散点图,并将具有二阶回归线的每个散点图导出到单个 PDF 文件,每个页面作为其自己的散点图。我想做的是生成回归线方程并将其放置在每次迭代的散点图的左上角。

library(gridExtra)
library(purrr)
library(tidyverse)

plot_5 <-
    Infil_Data2 %>% 
    split(.$Site_ID) %>% 
    map2(names(.),
         ~ggplot(.x, aes(Sqrt_Time.x, Cal_Vol_cm)) + 
         geom_point() +
         labs(title = paste(.y)) +
         theme(plot.title = element_text(hjust = 0.5)) + 
         stat_smooth(mapping = aes(x = Sqrt_Time.x, y = Cal_Vol_cm),
                     method = "lm", se = FALSE, 
                     formula = y ~ poly(x, 2, raw = TRUE),
                     color = "red") +
         theme(plot.margin = unit(c(1, 5, 1, 1), "cm")))


    pdf("allplots5.pdf", onefile = TRUE)
    walk(plot_5, print)
    dev.off()

这是我正在使用的 Infil_Data2 数据框的示例:

Infil_Data2 <-
    structure(list(Time = c(0L, 30L, 60L, 90L, 120L, 150L, 180L, 
    210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
    210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
    210L, 240L, 270L, 300L), Site_ID = c("H1", "H1", "H1", "H1", 
    "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H2", "H2", "H2", "H2", 
    "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H3", "H3", "H3", "H3", 
    "H3", "H3", "H3", "H3", "H3", "H3", "H3"), Vol_mL = c(63, 62, 
    60, 59, 58, 56, 54, 52.5, 50, 48.5, 46.5, 82, 77, 73, 68, 65, 
    51, 56, 52, 47.5, 42.5, 37.5, 69, 67, 65, 63, 61, 60, 58, 56, 
    54, 51.5, 49), Sqrt_Time.x = c(0, 5.477225575, 7.745966692, 9.486832981, 
    10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
    16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
    10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
    16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
    10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
    16.43167673, 17.32050808), Cal_Vol_cm = c(0, 0.124339799, 0.373019398, 
    0.497359197, 0.621698996, 0.870378595, 1.119058194, 1.305567893, 
    1.616417391, 1.80292709, 2.051606688, 0, 0.621698996, 1.119058194, 
    1.74075719, 2.113776588, 3.854533778, 3.232834782, 3.730193979, 
    4.289723076, 4.911422072, 5.533121068, 0, 0.248679599, 0.497359197, 
    0.746038796, 0.994718394, 1.119058194, 1.367737792, 1.616417391, 
    1.865096989, 2.175946488, 2.486795986)), row.names = c(NA, 33L
    ), class = "data.frame")

【问题讨论】:

  • 对于这样的问题,你应该提供一个可重现的小例子; Infil_Data 未定义并且您没有提供您正在使用的库(例如,用于您正在调用的 walk 命令的库)。另外,mytable 已定义但未使用,这应该与Infil_Data 相同吗?
  • 谢谢 steveb,我还有什么需要补充或澄清的吗?
  • 如果您的代码示例中使用了一个函数,您应该包含library(ggplot2)library(purrr) 等行。如果未使用\mytable`,您应该删除它,因为它没有与问题有关。如果您还有其他问题,那就应该去那里。
  • 好的,我会删除它。我只是把它放在那里,因为它是我整体代码的一部分,并且与我提供的图片相关联。感谢 cmets 如何让我的问题变得更好。
  • 您能否运行dput(Infil_Data) 并将结果替换为您所拥有的tibble::tribble(......)。所以你可以将Infil_Data 设置为dput 的结果。

标签: r ggplot2 regression


【解决方案1】:

根据您所做的和Adding Regression Line Equation and R2 on graph 的帖子,下面的代码会生成一个 pdf,其中每页一个图,图中的方程式。即使比例发生变化,方程也会出现在绘图上的相同相对位置。问题中的原始代码非常接近,下面的代码只添加了对stat_smooth_func的调用。

# Input data.
Infil_Data2 <-
structure(list(Time = c(0L, 30L, 60L, 90L, 120L, 150L, 180L, 
210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
210L, 240L, 270L, 300L), Site_ID = c("H1", "H1", "H1", "H1", 
"H1", "H1", "H1", "H1", "H1", "H1", "H1", "H2", "H2", "H2", "H2", 
"H2", "H2", "H2", "H2", "H2", "H2", "H2", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3"), Vol_mL = c(63, 62, 
60, 59, 58, 56, 54, 52.5, 50, 48.5, 46.5, 82, 77, 73, 68, 65, 
51, 56, 52, 47.5, 42.5, 37.5, 69, 67, 65, 63, 61, 60, 58, 56, 
54, 51.5, 49), Sqrt_Time.x = c(0, 5.477225575, 7.745966692, 9.486832981, 
10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
16.43167673, 17.32050808), Cal_Vol_cm = c(0, 0.124339799, 0.373019398, 
0.497359197, 0.621698996, 0.870378595, 1.119058194, 1.305567893, 
1.616417391, 1.80292709, 2.051606688, 0, 0.621698996, 1.119058194, 
1.74075719, 2.113776588, 3.854533778, 3.232834782, 3.730193979, 
4.289723076, 4.911422072, 5.533121068, 0, 0.248679599, 0.497359197, 
0.746038796, 0.994718394, 1.119058194, 1.367737792, 1.616417391, 
1.865096989, 2.175946488, 2.486795986)), row.names = c(NA, 33L
), class = "data.frame")

绘制代码

# For the "stat_smooth_func", use the Laurae package.
# devtools::install_github("Laurae2/Laurae")

library(gridExtra)
library(purrr)
library(tidyverse)
library(Laurae)

plot_5 <-
    Infil_Data2 %>% 
    split(.$Site_ID) %>% 
    map2(names(.),
         ~ggplot(.x, aes(Sqrt_Time.x, Cal_Vol_cm)) + 
         geom_point() +
         labs(title = paste(.y)) +
         theme(plot.title = element_text(hjust = 0.5)) + 
         stat_smooth(mapping = aes(x = Sqrt_Time.x, y = Cal_Vol_cm),
                     method = "lm", se = FALSE, 
                     formula = y ~ poly(x, 2, raw = TRUE),
                     color = "red") +
         theme(plot.margin = unit(c(1, 5, 1, 1), "cm")) +
         stat_smooth_func(geom="text", method = "lm", hjust=0, parse=TRUE))


pdf("allplots5.pdf", onefile = TRUE)
walk(plot_5, print)
dev.off()

【讨论】:

  • 我添加了单行,但出现错误:“geom_text 需要以下缺失的美学:标签”。
  • 几件事。您是否从我的帖子中剪切/粘贴到您的 R 会话中,包括 Infil_Data2 的设置?此外,可能值得重新启动 R(在菜单 Session 下,RStudio 中有 Restart R 选项)。
  • 是的,我从您的帖子中剪切/粘贴。 Infil_Data2 的设置是什么意思?我也重新启动了 R.
  • 使用Laurae 包查看我的编辑。显然我的环境中有stat_smooth_func,但它没有包含在我的代码中。如果这不能解决您的问题,那么可能存在与我们的环境不同的其他问题。
  • 对于“Infil_Data2 的设置”,我的意思是从帖子中剪切/粘贴,以确保 Infil_Data2 与帖子中的内容相匹配。本质上,我建议从“干净”的环境开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2017-01-18
  • 1970-01-01
  • 2018-07-10
  • 2017-02-05
  • 2021-07-18
  • 1970-01-01
相关资源
最近更新 更多