R ggplot的更紧凑使用:网格意大利面图

R ggplot的更紧凑使用:网格意大利面图,r,ggplot2,reshape2,R,Ggplot2,Reshape2,下面的代码绘制了几个模型的预测概率与时间的关系图。但是,一个图形上的所有绘图都不可读,因此我将结果划分为一个网格 我想知道是否有可能只有一个ggplot和所有的模型,然后用grid.arrange指定哪个去哪里 当前: p2.dat1 <- select(ppf, EXPOSURE, predp.glm.gen,predp.glm1, predp.glm2,predp.glm3,predp.glm4 ) mdf1 <- melt(p2.dat1 , id.vars="EXPOSURE

下面的代码绘制了几个模型的预测概率与时间的关系图。但是,一个图形上的所有绘图都不可读,因此我将结果划分为一个网格

我想知道是否有可能只有一个ggplot和所有的模型,然后用grid.arrange指定哪个去哪里

当前:

p2.dat1 <- select(ppf, EXPOSURE, predp.glm.gen,predp.glm1, predp.glm2,predp.glm3,predp.glm4 )
mdf1 <- melt(p2.dat1 , id.vars="EXPOSURE")
plm.plot.all1 <- ggplot(data = mdf1,
                                             aes(x = EXPOSURE, y = value, colour = variable)) +
                                             geom_line()

p2.dat2 <- select(ppf, EXPOSURE, predp.glm.gen, predp.glm5,predp.glm.step )
mdf2 <- melt(p2.dat2 , id.vars="EXPOSURE")
plm.plot.all2 <- ggplot(data = mdf2,
                                                aes(x = EXPOSURE, y = value, colour = variable)) +
                                                geom_line() 

grid.arrange(plm.plot.all1, plm.plot.all2, nrow=2)

p2.dat1您可以使用
grid执行此操作。通过编写一些辅助函数来排列
。它可以更简洁地完成,但我更喜欢可以与管道一起使用的小型聚焦函数

library(tidyverse)
library(gridExtra)

# Helper Functions ----
plot_function <- function(x) {

  ggplot(x, aes(x = EXPOSURE, y = value, colour = variable)) +
    geom_line() +
    labs(title = unique(x$variable)) +
    theme(legend.position = "none")
}

grid_plot <- function(x, selection) {

  order <- c(names(x)[grepl(selection,names(x))], names(x)[!grepl(selection,names(x))])

  grid.arrange(grobs = x[order], nrow = 2)
}

# Actually make the plot ----
ppf %>% 
  select(EXPOSURE, predp.glm.gen,predp.glm1, predp.glm2,predp.glm3,predp.glm4,predp.glm5,predp.glm.step) %>% 
  gather(variable, value, -EXPOSURE) %>% 
  split(.$variable) %>% 
  map(plot_function) %>% 
  grid_plot("predp.glm3")

你能通过
dput(head(ppf,20))
发布你的数据样本吗?@Jake给你:我意识到我从来没有看到过你的答案。这确实是我一直在寻找的贴面包装。谢谢真的很晚了。但是谢谢。
library(tidyverse)
library(gridExtra)

# Helper Functions ----
plot_function <- function(x) {

  ggplot(x, aes(x = EXPOSURE, y = value, colour = variable)) +
    geom_line() +
    labs(title = unique(x$variable)) +
    theme(legend.position = "none")
}

grid_plot <- function(x, selection) {

  order <- c(names(x)[grepl(selection,names(x))], names(x)[!grepl(selection,names(x))])

  grid.arrange(grobs = x[order], nrow = 2)
}

# Actually make the plot ----
ppf %>% 
  select(EXPOSURE, predp.glm.gen,predp.glm1, predp.glm2,predp.glm3,predp.glm4,predp.glm5,predp.glm.step) %>% 
  gather(variable, value, -EXPOSURE) %>% 
  split(.$variable) %>% 
  map(plot_function) %>% 
  grid_plot("predp.glm3")
library(tidyverse)

selection <- "predp.glm3"

plot_data <- ppf %>% 
  select(EXPOSURE, predp.glm.gen,predp.glm1, predp.glm2,predp.glm3,predp.glm4,predp.glm5,predp.glm.step) %>% 
  gather(variable, value, -EXPOSURE) %>% 
  mutate(variable = fct_relevel(variable, c(selection, levels(variable)[-grepl(selection, levels(variable))])))

ggplot(plot_data, aes(x = EXPOSURE, y = value, colour = variable)) +
  geom_line() +
  facet_wrap( ~variable, nrow = 2) +
  theme(legend.position = "none")