使用for循环和grid.arrange在一个页面上使用多个ggplots

时间:2015-09-08 15:06:32

标签: r ggplot2

我试图在一个页面上绘制多个变量相关图 - 但是当我使用for循环时,这些点没有正确绘制。如果我单独创建每个绘图,它们都很好。

我有一个名为sig_df的数据框,其中包含变量名称,回归线的截距和斜率,以及相关性的p值:

> sig_df
                 x                 y  intercept     slope      p_value
1 Share.incentives     User.profiles -0.1667891 0.5826598 0.0003577163
2 Share.incentives       Translation  2.2689199 0.4790595 0.0005928465
3      Translation  User.interaction  1.4696970 0.5757576 0.0008921255

以及包含每个变量的x和y值的主数据帧,样本为26

> master
   Share.incentives User.profiles Translation User.interaction
1                 5             4           5                5
2                 4             1           3                4
3                 6             4           5                5
4                 6             4           4                4
5                 4             1           5                3
..              ...           ...         ...              ...

我使用for循环查看sig_df中的每一行,在master中查找变量名并制作相关图。我已将这些图存储在一个列表中,然后使用grid.arrange在页面上绘制它们 - ablines正确绘制,但每个图上的点与我列表中的最终图相同! 当我不使用for循环时,这不会发生。 有谁知道可能导致这种行为的原因是什么?

plot_list<- list()

for(i in 1:nrow(sig_df)){
  y <- (sig_df$y[[i]])
  x <- (sig_df$x[[i]])
  slope <- (sig_df$slope[[i]])
  intercept <- (sig_df$intercept[i])
  plot_list[[i]] <- ggplot(data=master, aes(get(x), get(y))) + geom_point() + geom_abline(slope=slope, intercept=intercept) 

}

do.call(grid.arrange, c(plot_list, ncol=4))

谢谢, KP

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。这是我的解决方案:在功能ggplot中将mapping参数更改为aes_string()

  plot_list[[i]] <- ggplot(data=master, aes_string(get(x), get(y))) + geom_point() + geom_abline(slope=slope, intercept=intercept)

希望这会有所帮助。