R ggplot2 управляет столбцами условных обозначений

#r #ggplot2

#r #ggplot2

Вопрос:

Я хотел бы использовать ggplot команду guides(fill = guide_legend(ncol=3)) для отображения моих отдельных категорий в трех столбцах в моей легенде.

Но в идеале я хотел бы

a) Упорядочить ключевые столбцы условных обозначений осмысленным образом (ниже будут все отрицательные категории слева, только 0 посередине и все положительные значения в правом столбце)

б) В идеале также иметь заголовок столбца для каждого столбца (например, «положительный», «ничего», «отрицательный»)

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

Большое спасибо за вашу помощь!

 library(tidyverse)

map_data("world") %>% 
  distinct(region) -> regions
  
set.seed(1)
regions %>% 
  mutate(value = sample(-3:3,rep(nrow(regions)),replace=TRUE),
         value = factor(value)) %>% 
  full_join(map_data("world"),by="region") -> world
  

ggplot(world)  
  geom_polygon(aes(x=long,y=lat,group=group,fill=value))  
  guides(fill=guide_legend(ncol=3))   
  coord_quickmap()   
  theme_void()  
  scale_fill_brewer(palette = "RdBu") 
  theme(legend.position = "bottom")
  

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

Комментарии:

1. Быстрый способ выровнять столбцы: вы можете добавить пустые уровни к своему коэффициенту до и после 0, чтобы принудительно поместить 1 и 2 в третий столбец. И вам придется использовать a scale_fill_manual и использовать NA на этих дополнительных уровнях.

Ответ №1:

Вы можете попробовать new_scale_fill функцию ggnewscale пакета.

 library(ggnewscale)

pal_rdbu <- scales::brewer_pal(palette = "RdBu")(7)

ggplot(world)  
  geom_polygon(aes(x=long,y=lat,group=group,fill=value))  
  coord_quickmap()   
  theme_void()  
  scale_fill_manual(name = "positive", breaks = 3:1,
                    values=c(NA,NA,NA,NA,pal_rdbu[5:7])) 
  new_scale_fill()  
  geom_polygon(aes(x=long,y=lat,group=group,fill=value))  
  scale_fill_manual( name = "neutral", breaks = 0,
                     values=c(NA,NA,NA,pal_rdbu[4],NA,NA,NA))  
  new_scale_fill()  
  geom_polygon(aes(x=long,y=lat,group=group,fill=value))  
  scale_fill_manual( name = "negative", breaks = -1:-3,
                     values=c(pal_rdbu[1:3],NA,NA,NA,NA))  
  theme(legend.position = "bottom",
        legend.direction = 'vertical')
  

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