Составление списка гробов

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

Я пытаюсь составить список гробов, используя 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 = Список ggplots

gridplots_spec а также gridplots_Raw = список гробов из ggplots, сделанных выше.

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

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

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

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

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

1 ответ

Решение

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

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)

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

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

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)

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

Другие вопросы по тегам