4

データフレームに10を超える一意の値を持つ変数の量に応じて、出力を印刷したい. これは、任意の数の変数である可能性があります。プロットウィンドウを変数の量に最適になるように設定するために、これを実装する方法を探しています。

次のようになります。

  • 2変数 -> 1×2
  • 3変数 -> 1×3
  • 4変数 -> 2×2
  • 5 変数 -> 2 x 3
  • 6 変数 -> 2 x 3
  • .....
  • .....
  • 16 変数 -> 4 x 4
  • 16+ vars -> 4 x 4

これには論理式がありますか。

これを成功させる方法はpar(mfrow=(c(x,y)))

また、パーリミットに達したことを確認する方法click、次のウィンドウでは、16 個を超えるとクリックできず、以前のグラフを上書きするだけです。

4

1 に答える 1

11

デバイスの行数と列数を取得する

はこのn2mfrow()目的のために設計されましたが、行は列よりも速く変化する傾向があるため、目的とは逆です。例えば:

> n2mfrow(2)
[1] 2 1

2 行 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)

同様のことは、16 番目以降のプロットでクリックを強制的に移動するために使用できますlocator(1)が、もう少し作業が必要です。

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)
于 2013-01-25T13:25:51.230 に答える