Получение количества строк и столбцов для устройства
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)
То же самое можно сделать с помощью 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)
person
Gavin Simpson
schedule
25.01.2013
mfrow
делает с устройством построения графиков. - person Gavin Simpson   schedule 25.01.2013locator(1)
в цикле, если индекс цикла > 16, 32 и т. д., заставит пользователя щелкнуть график.devAskNewPage()
можно использовать для подсказки в консоли. - person Gavin Simpson   schedule 25.01.2013locator
можно использовать. Я знал, что должно быть что-то вродеdevAskNewPage
, но не мог найти. Спасибо! - person Marc in the box   schedule 25.01.2013