gpt4 book ai didi

R 巧妙地决定函数中的 par-mfrow

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

我想根据数据框中具有 10 个以上唯一值的变量数量来打印输出。这可以是任意数量的变量。我正在寻找一种方法来实现这一点,以便将绘图窗口设置为适合变量数量。

它应该是这样的:

  • 2 vars -> 1 x 2
  • 3 vars -> 1 x 3
  • 4 vars -> 2 x 2
  • 5 vars -> 2 x 3
  • 6 变量 -> 2 x 3
  • .....
  • .....
  • 16 个变量 -> 4 x 4
  • 16+ 变量 -> 4 x 4

  • 对此是否有逻辑公式?

    如何使它成为一个成功的 par(mfrow=(c(x,y)))

    另外,如何确保何时达到标准限制,对于下一个窗口的 click,当我超过 16 时,我无法单击,而只是覆盖以前的图形。

    最佳答案

    获取设备的行数和列数
    n2mfrow() 就是为此目的而设计的,尽管它倾向于比列更快地改变行,因此与您想要的相反。例如:

    > n2mfrow(2)
    [1] 2 1

    表示 2 行 x 1 列。当然, rev() 很容易得到你想要的输出:
    > rev(n2mfrow(3))
    [1] 1 3

    这是 n2mfrow() 的输出,总共 2 到 16 个图,列变化更快:
    t(sapply(2:16, function(x) rev(n2mfrow(x))))

    > t(sapply(2:16, function(x) rev(n2mfrow(x))))
    [,1] [,2]
    [1,] 1 2
    [2,] 1 3
    [3,] 2 2
    [4,] 2 3
    [5,] 2 3
    [6,] 3 3
    [7,] 3 3
    [8,] 3 3
    [9,] 3 4
    [10,] 3 4
    [11,] 3 4
    [12,] 4 4
    [13,] 4 4
    [14,] 4 4
    [15,] 4 4

    使这个互动

    对于“16 后点击”位。如果在 for(i in numplots) 循环中进行绘图,当 i > 16 时调用 devAskNewPage(ask = TRUE),这将提示用户激活下一个绘图。

    例如:
    np <- 18 ## number of plots
    rc <- ifelse(np > 16, 16, np)
    op <- par(mfrow = rev(n2mfrow(rc)))
    for(i in seq_len(np)) {
    if(i == 2) {
    devAskNewPage(ask = TRUE)
    }
    plot(1:10)
    }
    par(op)
    devAskNewPage(ask = FALSE)

    可以使用 locator(1) 强制单击以在 16 个后的图上移动,但需要做更多工作:
    np <- 18 ## number of plots
    rc <- ifelse(np > 16, 16, np)
    op <- par(mfrow = rev(n2mfrow(rc)))
    for(i in seq_len(np)) {
    if((i %% 16) + 1 == 2 && i > 1) {
    message("Page filled. Click on device to continue...")
    locator(1)
    }
    plot(1:10)
    }
    par(op)

    关于R 巧妙地决定函数中的 par-mfrow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14522534/

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