gpt4 book ai didi

ggplot2 - 按列在绘图网格中绘制ggplots——cowplot包的plot_grid()函数

转载 作者:行者123 更新时间:2023-12-04 09:22:34 24 4
gpt4 key购买 nike

我正在使用 cowplot 包的 plot_grid() 函数在网格中绘制 ggplots,想知道是否有办法按列而不是按行绘制图?

library(ggplot2)
library(cowplot)

df <- data.frame(
x = c(3,1,5,5,1),
y = c(2,4,6,4,2)
)

# Create plots: say two each of path plot and polygon plot
p <- ggplot(df)
p1 <- p + geom_path(aes(x,y)) + ggtitle("Path 1")
p2 <- p + geom_polygon(aes(x,y)) + ggtitle("Polygon 1")
p3 <- p + geom_path(aes(y,x)) + ggtitle("Path 2")
p4 <- p + geom_polygon(aes(y,x)) + ggtitle("Polygon 2")

plots <- list(p1,p2,p3,p4)
plot_grid(plotlist=plots, ncol=2) # plots are drawn by row
我想在第一列中绘制 P1 和 P2,在第二列中绘制 p3 和 p4,例如:
plots <- list(p1, p3, p2, p4) # plot sequence changed
plot_grid(plotlist=plots, ncol=2)
实际上我可以有 4、6 或 8 个图。绘图网格中的行数会有所不同,但总是有 2 列。在每种情况下,我都希望按列(垂直)填充绘图网格,以便我的前 2、3 或 4 个绘图(视情况而定)相互重叠。如果我可以指定像 par(mfcol = c(n,2)) 这样的东西,我想避免对这些不同的排列进行硬编码。

最佳答案

正如您所观察到的,plot_grid()按行绘制图。我不相信有任何方法可以改变它,所以如果你想保持使用 plot_grid() (这可能是最方便的),那么一种方法可能是更改绘图列表中项目的顺序以匹配 plot_grid() 所需的内容。 ,给定列数的知识。
这是我编写的一个函数,可以做到这一点。基本思想是:

  • 为列表中的项目数创建索引列表(即 1:length(your_list) ),
  • 将索引号放入具有指定行数的矩阵中,
  • 按列将该矩阵读回另一个索引向量
  • 根据新排序的索引重新排序您的列表

  • 即使您的列表中的项目数不能被预期的列数整除(例如排列在 3 列中的 8 个项目的列表),我也试图以一种方式来构建这项工作。
    reorder_by_col <- function(myData, col_num) {
    x <- 1:length(myData) # create index vector
    length(x) <- prod(dim(matrix(x, ncol=col_num))) # adds NAs as necessary
    temp_matrix <- matrix(x, ncol=col_num, byrow = FALSE)
    new_x <- unlist(split(temp_matrix, rep(1:ncol(temp_matrix), each=row(temp_matrix))))
    names(new_x) <- NULL # not sure if we need this, but it forces an unnamed vector
    return(myData[new_x])
    }
    这一切都是在谷歌的帮助下写的,特别是对发布的问题的回答 herehere .
    您现在无需重新排序即可看到差异:
    plots <- list(p1,p2,p3,p4)
    plot_grid(plotlist=plots, ncol=2)
    enter image description here
    ...并使用新方法重新排序:
    newPlots <- reorder_by_col(myData=plots, col_num=2)
    plot_grid(plotlist=newPlots, ncol=2)
    enter image description here

    关于ggplot2 - 按列在绘图网格中绘制ggplots——cowplot包的plot_grid()函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63074633/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com