R ggplot2控制图例列

R ggplot2控制图例列,r,ggplot2,R,Ggplot2,我想使用ggplot命令guides(fill=guide\u图例(ncol=3))在图例中的三列中显示我的离散类别 但理想情况下,我想 (强)>以一种有意义的方式组织图例键列< /强>(下面是所有否定类别左,0个单独在中间,右列中所有正值) b) 理想情况下,每列都有一个列标题(例如“正”、“无”、“负”) 目前,正如您所看到的,这些列只是按照因子级别的顺序组织的。 有什么办法吗 非常感谢你的帮助 library(tidyverse) map_data("world")

我想使用
ggplot
命令
guides(fill=guide\u图例(ncol=3))
在图例中的三列中显示我的离散类别

但理想情况下,我想

(强)>以一种有意义的方式组织图例键列< /强>(下面是所有否定类别左,0个单独在中间,右列中所有正值)

b) 理想情况下,每列都有一个列标题(例如“正”、“无”、“负”)

目前,正如您所看到的,这些列只是按照因子级别的顺序组织的。 有什么办法吗

非常感谢你的帮助

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")

您可以尝试
ggnewscale
软件包的
new\u scale\u fill
功能

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')
库(ggnewscale)

pal_rdbu为了使列对齐,您可以在0之前和之后向因子添加空级别,以强制1和2到第三列。你必须使用
刻度填充手册
并在那些额外的级别上使用NA。