如何调整ggarrange中ggplot的展示顺序为按行填充?
解决ggarrange按行优先排列绘图的问题
要实现ggarrange按行填满后再换列的排列方式,核心是重新调整绘图列表的顺序,让原本按列生成的绘图列表,变成按行优先的索引顺序排列。
关键思路
ggarrange的plotlist参数是按传入顺序依次填充矩阵(默认列优先),所以我们只需要生成一个「行优先」的索引序列,用这个序列重新提取绘图列表里的元素,再传入ggarrange即可。
对于n行n列的矩阵,操作步骤:
- 按列生成原顺序的索引矩阵
- 转置这个矩阵(行和列互换)
- 将转置后的矩阵按行展开成向量,得到行优先的索引顺序
修改后的完整代码
##### Import libraries library(ggplot2) library(ggpubr) ##### Initiating objects set.seed(1) df <- data.frame(matrix(rnorm(100), 25, 4)) listggplots <- list() k <- 0 vecColors <- rep(c("#21b78c", "#21a0b7", "#2143b7", "#b521b7"), each=4) ##### Filling list of ggplots for(i in 1:ncol(df)){ for(j in 1:ncol(df)){ k <- k + 1 dfTemp <- df[, c(i, j)] colnames(dfTemp) <- c("var1", "var2") listggplots[[k]] <- ggplot(dfTemp, aes(var1, var2)) + geom_point(size=10, color=vecColors[k]) + scale_x_continuous(name=colnames(df)[i]) + scale_y_continuous(name=colnames(df)[j]) + theme(legend.position="none", axis.title=element_text(size=12)) } } ##### 调整绘图顺序为行优先 n_row <- 4 n_col <- 4 # 生成行优先的索引序列 new_order <- as.vector(t(matrix(1:length(listggplots), nrow = n_row, ncol = n_col))) # 重新排序绘图列表 listggplots_row <- listggplots[new_order] ##### Display plots ggarrange(plotlist = listggplots_row, nrow = n_row, ncol = n_col)
效果说明
调整后的索引序列为c(1,5,9,13,2,6,10,14,3,7,11,15,4,8,12,16),刚好对应期望的矩阵排列顺序,每一列会显示同一种颜色的绘图。
内容的提问来源于stack exchange,提问作者Yacine Hajji
相关产品推荐
相关产品推荐

