Вы можете разделить ваш фрейм данных на Month
(используйте group_split
), а затем перебрать этот список, используя map
& plot_function()
library(tidyverse)
theme_set(theme_minimal(base_size = 14))
plot_function <- function(df) {
p <- ggplot(df, aes(x = Month, y = value, fill = Type))
p <- p + geom_col() +
scale_fill_manual("",
values = c('Cargo ship' = '#7570b3',
'Fishing' = '#1b9e77',
'Tanker'='#d95f02'))
return(p)
}
# Save all plots in a list
plot_list <- All %>%
mutate(Month = factor(Month, levels = c("Jan", "Feb", "Mar", "Nov", "Dec"))) %>%
group_split(Month) %>%
map(~ plot_function(.x))
# Combine all plots into one
cowplot::plot_grid(plotlist = plot_list,
nrow = 3,
align = 'hv',
axis = 'tblr')
Редактировать : оставить только 1 общую легенду
# remove all legends
all_plot <- cowplot::plot_grid(plotlist =
lapply(seq_along(plot_list), function(x) {plot_list[[x]] + theme(legend.position = 'none')}),
nrow = 3,
align = 'hv',
axis = 'tblr')
# extract legend from one plot
common_legend <- cowplot::get_legend(plot_list[[1]] + theme(legend.position = 'bottom'))
# combine plot and legend
p <- cowplot::plot_grid(all_plot, common_legend,
nrow = 2,
rel_heights = c(3, .3))
p
Создано в 2019-05-10 пакетом представить (v0.2.1)