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

时间:2016-12-26 20:06:42

标签: 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")
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.dat <- select(ppf, EXPOSURE, predp.glm.gen,predp.glm1, predp.glm2,predp.glm3,predp.glm4,predp.glm5,predp.glm.step)
mdf <- melt(p2.dat , id.vars="EXPOSURE")
plm.plot.all <- ggplot(data = mdf1,
                                             aes(x = EXPOSURE, y = value, colour = variable)) +
                                             geom_line()

grid.arrange(plm.plot.all[some_selection_somehow], plm.plot.all[same], nrow=2)

谢谢,

1 个答案:

答案 0 :(得分:2)

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

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")

enter image description here

或者您可以使用ggplotfacet_wrap执行此操作,并将变量列分解为正确的顺序。这具有跨越图的共享轴的益处,这便于比较。您可以在第一种方法中更改辅助函数以明确设置轴以实现相同的效果,但更容易将其保存在ggplot中。

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")

enter image description here