为 geom_raster 和 geom_path 添加单独的图例

Posted

技术标签:

【中文标题】为 geom_raster 和 geom_path 添加单独的图例【英文标题】:Add separate legend for geom_raster and geom_path 【发布时间】:2022-01-15 12:02:27 【问题描述】:

我正在绘制一个栅格并用两个多边形覆盖它。我想分别为每个 shapefile 绘制图例(即缓冲区图例和每个多边形的一个图例)。我在geom_path 中使用了show.legend = TRUE,但它并没有给我想要的东西。我正在使用此代码。

gplot(pfiles) + 
  geom_raster(aes(fill = factor(value))) +
  geom_path(data=ward, aes(long, lat, group=group), color = "black") +
  geom_path(data=buffer, aes(long, lat, group=group), color = "red") +
  facet_wrap(~ variable, ncol = 4) +
  scale_fill_manual(values = c("darkorchid", "chartreuse3", "cornflowerblue", "goldenrod2"), 
                      na.value="transparent", na.translate = F) +
  guides(fill = guide_legend(title = "Buffer Zones")) +
  #scale_color_identity(guide = "legend") +
  theme_bw() +
  theme(axis.text = element_blank(), legend.position = "right", legend.direction = "vertical",
        axis.title = element_blank(),
        legend.key.height = unit(2, "cm"), legend.key.width = unit(1, "cm"),
        legend.title = element_text(size = 22, face = "bold"), legend.text = element_text(size = 20), 
        strip.text = element_text(size = 18, face = "bold"),
        plot.title = element_text(size = 20, face = "bold"),
        plot.subtitle = element_text(size = 15), plot.caption = element_text(size = 12, face = "bold.italic"),
        panel.background = element_rect(fill = "transparent")) +
  labs(title = "Variables for Identification of Potential Urban Development Zones",
       subtitle = "Land Price and Ground Water Level represent price and water depth respectively; Others represent Euclidean Distance") +
  coord_equal()

【问题讨论】:

【参考方案1】:

在 ggplot2 geoms 中没有图例。相反,传说反映了美学或尺度。 geom 仅确定图例中使用的键的形状,例如geom_point 将被描述为一个点,geom_path 将被描述为一条线,...这就是说,如果你想要一个图例,你必须在美学上进行映射。

要获得描绘不同颜色geom_paths 的图例,您可以在color 美学上映射一个常量值,然后使用scale_color_manual 将您想要的颜色分配给这些常量。

以下代码未经测试,但应该会给您想要的结果:

ggplot(pfiles) +
  geom_raster(aes(fill = factor(value))) +
  geom_path(data = ward, aes(long, lat, group = group, color = "ward")) +
  geom_path(data = buffer, aes(long, lat, group = group, color = "buffer")) +
  scale_color_manual(values = c(ward = "black", buffer = "red"))

【讨论】:

以上是关于为 geom_raster 和 geom_path 添加单独的图例的主要内容,如果未能解决你的问题,请参考以下文章

R:我正在从矩阵制作热图,但 ggplot2 geom_raster 将(数字)值重新排序为字母

geom_raster() 在地图顶部产生白色表面

ggplot2 未正确保存 geom_raster() 绘图

如何更改 ggplot2 geom_raster 中的插值/平滑

ggplot2折线图给出“geom_path:每个组只包含一个观察值。你需要调整组审美吗?”

没有数据时如何避免geom_line或geom_path中的连接线?