Добавление графиков в список ggplot2
Я пытаюсь добавить графики 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 ответ
Ваша большая проблема в том, что вы 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
).