Расположение нескольких легенд - распространенная проблема при подготовке графиков в R. Функция theme()
в пакете ggplot2 позволяет расположить несколько легенд в горизонтальном или вертикальном направлении. Однако в некоторых случаях одни легенды длинные, а другие короткие. Предпочтительно складывать короткие легенды в ряд или столбец, а длинные легенды оставлять в другой отдельной строке или столбце. Единственные два варианта: горизонтальный или вертикальный в функции theme()
неудовлетворительны.
Другой способ - извлекать легенды из графиков с помощью функции get_legend()
в пакете cowplot. Однако поля между надписями не могут быть уменьшены после упорядочивания функцией plot_grid()
. Как я могу уменьшить границы (серую зону) между легендами?
Воспроизводимые примеры показаны ниже:
p1 <- ggplot(mtcars) +
geom_bar(aes(x=as.factor(am), fill=as.factor(am))) +
theme(legend.margin = margin(0,unit="pt"))
p2 <- ggplot(mtcars) +
geom_bar(aes(x=as.factor(vs), fill=as.factor(vs))) +
theme(legend.margin = margin(0,unit="pt"))
p3 <- ggplot(mtcars) +
geom_bar(aes(x=as.factor(carb),fill=as.factor(carb))) +
scale_fill_manual(breaks = c(1,2,3,4,5,6,7,8),values = c('#f7fcfd','#e5f5f9','#ccece6','#99d8c9','#66c2a4','#41ae76','#238b45','#005824'))+
theme(legend.margin = margin(0,unit="pt"))
leg1 <- get_legend(p1+theme(legend.background = element_rect(fill="white")))
leg2 <- get_legend(p2+theme(legend.background = element_rect(fill="white")))
leg3 <- get_legend(p3+theme(legend.background = element_rect(fill = "white")))
leg12 <- plot_grid(leg1,leg2,nrow=2)+theme(plot.background = element_rect(fill="grey"))
leg123 <- plot_grid(leg3,leg12,nrow = 1)+theme(plot.background = element_rect(fill="grey"))
ggdraw(leg123)
Я бы хотел, чтобы это выглядело так: