geom_label_repel 和 geom_label 的图例错误

Wrong legend with geom_label_repel and geom_label

我在 ggplot 地图中使用 geom_point、geom_label 和 geom_label_repel 用不同变量标记地图。

一切正常,但遗憾的是我无法为 geom_label_repel(蓝色标签)添加图例,我尝试使用:scale_fill_manual,但没有解决我的问题,我的代码示例和问题:

library(ggplot2) 
library(maps)
library(ggrepel)

 county_df <- map_data('county') 
 ny <- subset(county_df, region=="new york")  
 ny <- ny[c(1:10, 30:40),]

ggplot(ny, aes(long, lat, group=group)) +  
    geom_polygon(colour='black', fill=NA)+
     geom_point(data = ny, aes(long, lat, size=group, color=order))+
     geom_label_repel(data = ny, aes(long, lat, label=subregion), 
                      fill = "#0033FF", box.padding = unit(.8, "lines"))+
     geom_label(data = ny, aes(long+.01, lat+.05, label=region, 
               fill="#FF3399"), colour = "White", fontface = "bold")+
     scale_fill_manual("Variable:", values=c("#FF3399", "#0033FF"), 
                  labels = c('Region', "Subregion"))

这个命令给了我这张地图,你只能看到粉红色标签(区域)的图例,而不是蓝色标签(子区域)的图例:

我尝试使用命令:show.legend = T,但遗憾的是,这给了我一个错误的 geom_point(组)图例,并且没有显示蓝色标签(子区域)的图例。这个命令是:

ggplot(ny, aes(long, lat, group=group)) +  
    geom_polygon(colour='black', fill=NA)+
     geom_point(data = ny, aes(long, lat, size=group, color=order))+
     geom_label_repel(data = ny, aes(long, lat, label=subregion), 
                      fill = "#0033FF", box.padding = unit(.8, "lines"),
                      show.legend = T)+
     geom_label(data = ny, aes(long+.01, lat+.05, label=region, 
               fill="#FF3399"), colour = "White", fontface = "bold")+
     scale_fill_manual("Variable:", values=c("#FF3399", "#0033FF"), 
                  labels = c('Region', "Subregion"))

此地图:

看起来你的 fill 次区域审美超出了它的 aes() 所以它在技术上不是 'mapped' 因此没有出现在指南中。以下解决了我认为的问题:

library(ggplot2) 
library(maps)
library(ggrepel)

county_df <- map_data('county') 
ny <- subset(county_df, region=="new york")  
ny <- ny[c(1:10, 30:40),]

ggplot(ny, aes(long, lat, group = group)) +
  geom_polygon(colour = 'black', fill = NA) +
  geom_point(data = ny, aes(long, lat, size = group, color = order)) +
  geom_label_repel(
    data = ny,
    aes(long, lat, label = subregion, fill = "#0033FF"),
    box.padding = unit(.8, "lines")
  ) +
  geom_label(
    data = ny,
    aes(long + .01, lat + .05, label = region, fill = "#FF3399"),
    colour = "White",
    fontface = "bold"
  ) +
  scale_fill_manual(aesthetics = "fill",
    "Variable:",
    values = c("#FF3399", "#0033FF"),
    labels = c('Region', "Subregion")
  )