使用ggplot2绘制未确定数量的图

时间:2018-01-29 12:31:18

标签: r plot ggplot2 pca

我正在尝试使用 ggplot2 绘制主成分分析的内容。我想生成一个单独的pdf,其中包含用户指定数量的主要组件显示的所有图(因此,如果用户说3,它将绘制PC 1对2,1对3和2对3)。

我查看了 gridextra ,但在我不确切知道将选择多少组件时,并不完全确定如何添加多个图。

1 个答案:

答案 0 :(得分:0)

这是一个开始,获取用户输入( input_nPC ),获取组合然后循环并绘制数据子集:

library(ggplot2)

# example data
myPC <- data.frame(
  pc1 = runif(10),
  pc2 = runif(10),
  pc3 = runif(10),
  pc4 = runif(10))

# user input, e.g.: 3 out of 4 PCs
input_nPC <- 3

# check: must be at least 2 PCs
input_nPC <- max(c(2, input_nPC))

# get combination
combo <- combn(input_nPC, 2)

pdf("myOutput.pdf")

for(i in seq(ncol(combo))){
  d <- myPC[, combo[, i]]
  d_cols <- colnames(d)
  gg <- ggplot(d, aes_string(x = d_cols[1], y = d_cols[2])) +
    geom_point() +
    ggtitle(paste(d_cols, collapse = " vs "))
  print(gg)
}

dev.off()

如果我们需要将输出作为一页PDF,那么使用 cowplot 包:

ggList <-
  apply(combo, 2, function(i){

    d <- myPC[, i]
    d_cols <- colnames(d)
    ggplot(d, aes_string(x = d_cols[1], y = d_cols[2])) +
      geom_point() +
      ggtitle(paste(d_cols, collapse = " vs "))

  })

pdf("myOutput.pdf")
cowplot::plot_grid(plotlist = ggList)
dev.off()

或者我们可以使用GGally::ggpairs,如下所示:

library(GGally)

ggpairs(myPC[, 1:input_nPC])