Сгенерируйте несколько графиков решетки на сетке, используя lapply в R

Как построить несколько графиков решетки на одном графике решетки, где графики генерируются с использованием функции перекрытия?

Ниже приводится демонстрация того, что я пробовал до сих пор, используя встроенный набор данных mtcars.

require(lattice)

response <- c("cyl","disp","hp","drat")

par(mfrow=c(2,2))

lapply(response, function(variable) {
  print(xyplot(mtcars$mpg ~ mtcars[variable]))
})

Это дает желаемые сюжеты. Однако, похоже, он игнорирует инструкцию par(mfrow=c(2,2)) и строит каждый график отдельно.


person user2109248    schedule 20.05.2013    source источник
comment
lapply предназначен для перебора списка с применением функции, где каждое возвращаемое значение используется как запись в возвращаемом списке. Если вы не возвращаете значение, for более подходит.   -  person Matthew Lundberg    schedule 20.05.2013
comment
да. grid функции построения графиков игнорируют par(mfrow=.). Прочтите страницу справки для ?Lattice более внимательно.   -  person IRTFM    schedule 20.05.2013


Ответы (3)


Если вы действительно не хотите использовать встроенные параметры фасетирования или области просмотра решетки, вы можете воспроизвести поведение par(mfrow) следующим образом:

require(lattice)

response <- c("cyl","disp","hp","drat")

# save all plots in a list
pl <- lapply(response, function(variable) {
  xyplot(mtcars$mpg ~ mtcars[variable])
})

library(gridExtra)
# arrange them in a 2x2 grid
do.call(grid.arrange, c(pl, nrow=2))
person baptiste    schedule 20.05.2013

Ваш пример не соответствует тому, как lattice предназначен для использования (grid было бы более подходящим).

Вот lattice решение:

xyplot(mpg ~ cyl+disp+hp+drat,
       data=mtcars,
       groups=cyl+disp+hp+drat,
       scales=list(relation="free"),
       col="blue"
)

введите описание изображения здесь

person Matthew Lundberg    schedule 20.05.2013
comment
Я понимаю, что не использую решетку в полной мере. Однако фактическая функция, которую я использую для построения графика, очень сложна, а встроенных возможностей фасетной графики в решетке недостаточно для моей цели. Однако пакет grid решает мою проблему. - person user2109248; 21.05.2013

Я много раз использовал функцию multiplot на этой странице получить несколько сюжетных объектов на одной странице.

person zap2008    schedule 20.05.2013