You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整ggarrange中ggplot的展示顺序为按行填充?

解决ggarrange按行优先排列绘图的问题

要实现ggarrange按行填满后再换列的排列方式,核心是重新调整绘图列表的顺序,让原本按列生成的绘图列表,变成按行优先的索引顺序排列。

关键思路

ggarrange的plotlist参数是按传入顺序依次填充矩阵(默认列优先),所以我们只需要生成一个「行优先」的索引序列,用这个序列重新提取绘图列表里的元素,再传入ggarrange即可。

对于n行n列的矩阵,操作步骤:

  1. 按列生成原顺序的索引矩阵
  2. 转置这个矩阵(行和列互换)
  3. 将转置后的矩阵按行展开成向量,得到行优先的索引顺序

修改后的完整代码

##### 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:45:38