Добавление графиков в список ggplot2 - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь добавить графики ggplot2 в список, чтобы я мог использовать функцию ggarrange из ggpubr, чтобы организовать их на нескольких страницах.

Поскольку существует несколько сотен графиков, я использую функцию для генерации и сохранения графиков, но не могу получить ее, чтобы вернуть графики в среду или записать имена в список.

Я вполне уверен, что это что-то простое, что мне не хватает, но я не могу это обнаружить.

Используемая мной функция построения графика:

histFacet.plot <- function(x, results, info, ...) {

  md<- names(x) %in% c("rn","Taxa","year","rep","block","column",
                       "range", "entity_id")
  traits <- names(x[ , !md])
  for (i in traits) {
    i <-ggplot(data = x, aes_string(x = i)) + 
      geom_histogram(colour="black", fill="white") + 
      #facet_grid(x$year ~ .) +
      theme_bw() +
      xlab(paste0(i)) +
      ylab("Frequency") +
      theme(panel.grid.major = element_blank()) +
      theme(panel.grid.minor = element_blank()) +
      theme(axis.text = element_text(size = 15)) +
      theme(axis.title = element_text(size = 15)) +
      theme(strip.text = element_text(size = 15)) 
    #ggsave(paste0(i,"_",info,".pdf"),path=paste(results, sep=''))
    plotList<- list(plotList, list(i))
    print(i)

  }
  return(i)
}

histFacet.plot(pd,'~/Dropbox/Research_Poland_Lab/AM Panel/Figures/Hist/',
               "_raw_2018")

1 Ответ

0 голосов
/ 03 декабря 2018

Ваша большая проблема в том, что вы return(i) вместо return(plotList).Переназначение i внутри цикла for с использованием i, как в итераторе, странно.Особенно, когда график использует i в качестве строки ... Я бы попробовал это:

histFacet.plot <- function(x, results, info, ...) {

  md <- names(x) %in% c("rn","Taxa","year","rep","block","column",
                       "range", "entity_id")
  traits <- names(x[ , !md])
    plotList = list()
    for (i in traits) {
        thisPlot <- ggplot(data = x, aes_string(x = i)) + 
          geom_histogram(colour="black", fill="white") + 
          #facet_grid(x$year ~ .) +
          theme_bw() +
          xlab(i) +
          ylab("Frequency") +
          theme(panel.grid.major = element_blank()) +
          theme(panel.grid.minor = element_blank()) +
          theme(axis.text = element_text(size = 15)) +
          theme(axis.title = element_text(size = 15)) +
          theme(strip.text = element_text(size = 15)) 

        plotList[[i]] = thisPlot
        print(i)

      }
      return(plotList)
}

Не проверено, конечно, поскольку вы не предоставили пример данных.Рад провести тестирование / отладку, если вы предоставите небольшой, воспроизводимый пример набора данных.

Я не совсем уверен, хотите ли вы, чтобы print(i) печатал график на графическом устройстве (если это так, измените на print(thisPlot)) или вывести текущую черту на консоль, чтобы обновить ход выполнения цикла (если это так, измените значение на message(i), чтобы его было легко отключить).

Несколько других замечаний: если вы не уверены, используйтеyear ~ . в качестве формулы, а не x$year ~ ..Если i уже является символом, то paste0(i) совпадает с i (в вашем xlab).

...