在 geom 中指定数据时在地图上组合图例

Combine legends on a map when data is specified in a geom

我正在使用 ggplot2 绘制地图并在地图上点。这包括绘制地图,然后使用 geom_point() 放置点。此外,这些点的大小根据另一个变量而变化。当我绘制它时,它会产生多个图例。

ggplot(mapdata, aes(x=long, y=lat)) + 
geom_map(map=mapdata, aes(map_id=region),  fill="#ffffff", color="black", size=0.15) +
xlim(4, 15) + 
ylim(47, 55) +
geom_point(data = dat, aes(long, lat, size = feature, alpha = 0.2, colour = "#007f3f")) +
scale_colour_manual(values = "#007f3f") 

this question (and also 中所述)这通常可以通过对两个尺度使用相同的 namelabels 值来实现,但是我不确定当数据不正确时如何应用它在主 ggplot 调用中指定(即不在 geom 中)并以大小作为图例。我已经尝试了很多这样的迭代:

ggplot(mapdata, aes(x=long, y=lat)) + 
  geom_map(map=mapdata, aes(map_id=region),  fill="#ffffff", color="black", size=0.15) +
  xlim(4, 15) + ylim(47, 55) +
  geom_point(data = dat, aes(long, lat, size = feature, alpha = 0.2, colour = "#007f3f")) +
  scale_color_manual(name = "feature", values = "#007f3f", labels=c("1.0", "1.5", "2.0", "2.5", "3.0")) +
  scale_size_manual(name = "feature", values = c(1.0, 1.5, 2.0, 2.5, 3.0), labels=c("1.0", "1.5", "2.0", "2.5", "3.0"))

如何组合图例?

你得到了多个图例,因为你在 aes 中有多个参数。在您的示例中,唯一因变量而异的美学是 size,其余(coloralpha)不需要映射。

这个:

ggplot(mapdata, aes(long, lat)) + 
    geom_map(map = mapdata, 
             aes(map_id = region),
             fill="#ffffff",
             color="black",
             size=0.15) +
    geom_point(data = dat, 
               aes(long, lat, size = feature), 
               alpha = 0.2, 
               colour = "#007f3f")+
    xlim(4, 15) + 
    ylim(47, 55)

会给你一个图例,已经合并了。