我正在尝试使用 ggplot2 绘制主成分分析的内容。我想生成一个单独的pdf,其中包含用户指定数量的主要组件显示的所有图(因此,如果用户说3,它将绘制PC 1对2,1对3和2对3)。
我查看了 gridextra ,但在我不确切知道将选择多少组件时,并不完全确定如何添加多个图。
答案 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])