我正在繪製幾個ggparcoord(從GGally包)子圖到一個大的陰謀。一般來說,除了其中一個子圖來自同一個數據集(x),最後一個來自不同的數據集(y)。使用grid.arrange與多個圖
我希望每個子圖都是不同的顏色。奇怪的是,我能得到這個,當我這樣做不是在一個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))
但是,我得到一個錯誤:
Error in arrangeGrob(..., as.table = as.table, clip = clip, main = main, :
input must be 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)
並得到了一個錯誤:
Error in mget(c(plot_1[[1]], plot_1[[2]], plot_2)) :
invalid first argument
這就像一個魅力。我想知道我是否可以在這裏問:是否可以在plot_1 [[1]]和plot_1 [[2]]中不使用硬編碼來調用它?原因是,我並不總是在plot_1中有兩個子圖(儘管plot_2中總是有一個子圖)。 –
例如,我會定義一個變量nPlots。在上面的例子中,nPlots = 2。我試着做的事情不會在數字2中明確硬編碼,例如:1)p = do.call(「grid.arrange」,c(list(plot_clusters,plot_filtered),ncol = 1)),2)p = do.call(「grid.arrange」,c(list(paste0(「plot_clusters [[」,1:nPlot,「]]」,sep =「,」),plot_filtered), NcoI位= 1))。 –