我在使用ggplot绘图中遇到了一个问题,无法正确绘制图例。我已经在互联网上搜索了很久,但仍未找到解决方案。
我试图创建一个包含不同线条和多边形shapefile的ggplot。我使用函数geom_sf()绘制shapefile,绘制本身并没有问题。我的问题与图例创建有关。
目标是创建一个具有单个图例的绘图,并且将所有不同的shapefile类型以及它们的颜色或填充美学都包括在内。也就是说,线形状应该在图例中表示为简单的线条,而多边形形状应该在图例中表示为简单的多边形。我已经成功地完成了所有这些操作。
主要困难在于其中一个多边形形状(为了更好的可读性)不仅使用“fill”参数作为美学效果,而且还使用“color”参数。
如果我创建一个绘图,在该绘图中,所有polygonshapes始终使用fill参数作为美学效果,所有lineshapes始终使用color参数作为美学效果,则一切正常。但是一旦我在绘图中包含同时使用两个参数的polygonshape,它将破坏整个图例结构。在这种情况下,例如,用于线形shapefile的符号突然具有框架和/或背景,尽管它们不应该有这些。
使用ggplot无法构建这样的内容吗?还是我只是笨手笨脚?
总结:
类似于下面创建的最小示例,我想在此绘图中创建一个单个图例,其中:
- A = 没有边框的多边形符号(如图所示)
- B = 具有边框的多边形符号(如图所示),以及
- C = 没有边框或背景的简单线条(如图所示)。
我该怎么做才能实现这个目标?
library(ggplot2)
library(sf)
poly1 <- cbind(lon = c(5, 6, 7, 5), lat = c(52, 53, 51, 52))
poly2 <- cbind(lon = c(3, 5, 7, 3), lat = c(50, 52, 50, 50))
poly1 <- st_sf(st_sfc(st_polygon(list(poly1))))
poly2 <- st_sf(st_sfc(st_polygon(list(poly2))))
line <- st_sf(st_sfc(list(st_linestring(cbind(lon = c(5.5, 4.5), lat = c(53.5, 54.5))))))
ggplot() +
geom_sf(data = poly1,
aes(fill = "A"),
colour = NA,
show.legend = "polygon") +
geom_sf(data = poly2,
aes(fill = "B",
colour = "B"),
show.legend = "polygon") +
geom_sf(data = line,
aes(colour = "C"),
show.legend = "line") +
scale_fill_manual(name="Legend",
values = c("A" = "yellow", "B" = "green"),
guide = guide_legend(override.aes = list(linetype = c("blank","blank"), shape = NA))
) +
scale_colour_manual(name="Legend",values = c("B" = "blue", "C" = "purple"),
guide = guide_legend(override.aes = list(linetype = c(0, 1)))) +
theme_bw()