Сетка из нескольких графиков ggplot2, которые были сделаны в цикле for
как новый пользователь ggplot2, я немного потерял количество возможностей и изо всех сил пытаюсь найти в сети простой ответ на то, что я считаю простой проблемой.
Я хотел бы отображать несколько графиков из ggplot2 на одном листе, но зная, что эти графики поступают из цикла for.
Следующий пример не компилируется, это только для иллюстрации:
for(i in c(1:n)){
for(j in c(1:m)){
.......... # some data production
p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}}
Здесь p перезаписывается, но я хотел бы иметь вместо него матрицу или список, в который я могу поместить все p, когда они будут созданы, а затем простую функцию типа
display_in_a_grid(list_of_ggplot_plots)
Но насколько я пробовал, мне не удалось составить список матриц сюжета, ни найти функцию, которая принимает только один аргумент для ввода.
О вещах, на которые я смотрел:
"организоватьGrob" из пакета gridExtra не работает, потому что для каждого графика требуется явное имя (например: p1, p2, p3,...), как в http://code.google.com/p/gridextra/wiki/arrangeGrob
"фасет" метод ggplot2 не адаптирован для организации моего набора данных (или наоборот: p)
У вас будет простой способ справиться с этим?
Спасибо,
Франсуа
Ответы
Ответ 1
Я был бы склонен согласиться с Ричи, но если вы хотите устроить их самостоятельно:
library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- qplot(1:10,10:1,main=i)
}
do.call(grid.arrange,p)
взгляните на примеры в конце ?arrangeGrob
для способов полного исключения цикла for:
plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
require(gridExtra)
do.call(grid.arrange, plots)