我正在将几个 ggparcoord(来自 GGally 包)子图绘制成一个大图。一般来说,除了一个子图之外的所有子图都来自相同的数据集 (x),而最后一个子图来自不同的数据集 (y)。
我希望每个子图都是不同的颜色。奇怪的是,当我不在 for 循环中执行它时,我可以让它工作,如下所示(在这种情况下,我有 3 个子图):
library(GGally)
library(ggplot2)
library(gridExtra)
set.seed(1)
colList = scales::hue_pal()(3)
plot_i = vector("list", length=2)
x = data.frame(a=runif(100,0,1),b=runif(100,0,1),c=runif(100,0,1),d=runif(100,0,1))
x$cluster = "color"
x$cluster2 = factor(x$cluster)
plot_i[[1]] = ggparcoord(x, columns=1:4, groupColumn=6, scale="globalminmax", alphaLines = 0.99) + xlab("Sample") + ylab("log(Count)") + scale_colour_manual(values = c("color" = colList[1]))
plot_i[[2]] = ggparcoord(x, columns=1:4, groupColumn=6, scale="globalminmax", alphaLines = 0.99) + xlab("Sample") + ylab("log(Count)") + scale_colour_manual(values = c("color" = colList[2]))
y = data.frame(a=runif(100,5,6),b=runif(100,5,6),c=runif(100,5,6),d=runif(100,5,6))
y$cluster = "color"
y$cluster2 = factor(y$cluster)
plot_i[[3]] = ggparcoord(y, columns=1:4, groupColumn=6, scale="globalminmax", alphaLines = 0.99) + xlab("Sample") + ylab("log(Count)") + scale_colour_manual(values = c("color" = colList[3]))
p = do.call("grid.arrange", c(plot_i, ncol=1))
但是,我正在尝试自动化来自同一数据集 (x) 的所有子图,并且遇到了困难。在上面的示例中,这只有 2 个子图。但我会增加这个数字。然而,无论如何,最后一个子图将始终来自另一个数据集 (y)。出于这个原因,我试图创建一个循环来遍历数据集 (x) 的许多子图。
library(ggplot2)
library(GGally)
library(gridExtra)
set.seed(1)
colList = scales::hue_pal()(3)
plot_1 = vector("list", length=2)
plot_2 = vector("list", length=1)
plot_1 <- lapply(1:2, function(i){
x = data.frame(a=runif(100,0,1),b=runif(100,0,1),c=runif(100,0,1),d=runif(100,0,1))
x$cluster = "color"
x$cluster2 = factor(x$cluster)
ggparcoord(x, columns=1:4, groupColumn=6, scale="globalminmax", alphaLines = 0.99) + xlab("Sample") + ylab("log(Count)") + theme(legend.position = "none", axis.title=element_text(size=12), axis.text=element_text(size=12)) + scale_colour_manual(values = c("color" = colList[i]))
})
p = do.call("grid.arrange", c(plot_1, ncol=1))
y = data.frame(a=runif(100,5,6),b=runif(100,5,6),c=runif(100,5,6),d=runif(100,5,6))
y$cluster = "color"
y$cluster2 = factor(y$cluster)
plot_2 = ggparcoord(y, columns=1:4, groupColumn=6, scale="globalminmax", alphaLines = 0.99) + xlab("Sample") + ylab("log(Count)") + theme(legend.position = "none", axis.title=element_text(size=12), axis.text=element_text(size=12)) + scale_colour_manual(values = c("color" = colList[3]))
p = do.call("grid.arrange", c(plot_1[[1]], plot_1[[2]], plot_2, ncol=1))
但是,我收到一个错误:
安排Grob(...,as.table = as.table,clip = clip,main = main,:输入必须是grobs!
我尝试了类似的想法(grid.arrange using list of plots):
plist <- mget(c(plot_1[[1]], plot_1[[2]], plot_2))
do.call(grid.arrange, plist, ncol = 1)
并收到一个错误:
mget(c(plot_1[[1]], plot_1[[2]], plot_2)) 中的错误:第一个参数无效