2016-03-11 5 views
2

РАСКРЫТИЕ: Я не уверен, как сделать воспроизводимый пример для этого вопроса.распечатка списка грызунов

Я пытаюсь составить список грызунов с помощью пакета gridExtra.

У меня есть некоторый код, который выглядит следующим образом:

## Make Graphic Objects for Spec and raw traces 
for (i in 1:length(morletPlots)){ 
    gridplots_Spec[[i]]=ggplotGrob(morletPlots[[i]]) 
    gridplots_Raw[[i]]=ggplotGrob(rawPlot[[i]]) 
    gridplots_Raw[[i]]$widths=gridplots_Spec[[i]]$widths 
} 
names(gridplots_Spec)=names(morletPlots) 
names(gridplots_Raw)=names(rawPlot) 

## Combine spec and Raw traces 
g=list() 
for (i in 1:length(rawPlot)){ 
    g[[i]]=arrangeGrob(gridplots_Spec[i],gridplots_Raw[i],heights=c(4/5,1/5)) 
} 

numPlots = as.numeric(length(g)) 

##Plot both 
for (i in 1:numPlots){ 

    grid.draw(g[i],ncol=2) 
} 

Позвольте мне пройти через код.

morletPlots = список ggplots

rawplot = A список ggplots

gridplots_spec и gridplots_Raw = Список grobs из ggplots сделанных выше.

g = список двух гномов выше комбинированных, поэтому объединение gridplots_spec[1] и gridplots_raw[1] так далее и т. Д. Для длины списка.

теперь моей целью было бы два участка все из них на 2 столбца. Но всякий раз, когда я прохожу gridplots_spec[i] через петлю grid.draw я получаю сообщение об ошибке:

Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "list"

Я не могу unlist это еще потому, что просто превращается в длинный вектор символов. есть идеи?

Если это абсолютно важно, я могу потратить время на создание воспроизводимого примера, но я скорее всего просто не пропустил простой шаг.

+2

Посмотрите разницу между '[[' и '['. Попробуйте 'grid.draw (g [[i]])' – Roland

+0

Я сделал то, что получаю, 'Ошибка в gList (список (список (grobs = список (список (x = 0,5, y = 0,5, width = 1,: ) только «grobs» разрешено в «gList» ' –

+0

Ну, у вас такая же ошибка в предыдущем цикле' for'. – Roland

ответ

5

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

library(grid) 
library(gridExtra) 
library(ggplot2) 

morletPlots <- replicate(5, ggplot(), simplify = FALSE) 
rawplot <- replicate(5, ggplot(), simplify = FALSE) 

glets <- lapply(morletPlots, ggplotGrob) 
graws <- lapply(rawplot, ggplotGrob) 

rawlet <- function(raw, let, heights=c(4,1)){ 
    g <- rbind(let, raw) 
    panels <- g$layout[grepl("panel", g$layout$name), ] 
# g$heights <- grid:::unit.list(g$heights) # not needed 
    g$heights[unique(panels$t)] <- lapply(heights, unit, "null") 
    g 
} 

combined <- mapply(rawlet, raw = graws, let=glets, SIMPLIFY = FALSE) 

grid.newpage() 
grid.arrange(grobs=combined, ncol=2) 

enter image description here

Редактировать Я не могу сопротивляться этому озорной хак раскрашивать графики для иллюстрации; не стесняйтесь игнорировать его.

palette(RColorBrewer::brewer.pal(8, "Pastel1")) 
ggplot.numeric = function(i) ggplot2::ggplot() + 
    theme(panel.background=element_rect(fill=i)) 

morletPlots <- lapply(1:5, ggplot) 
rawplot <- lapply(1:5, ggplot) 

enter image description here

Смежные вопросы