Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中动态对齐打印(空间地图的自定义ggplot2图例)_R_Ggplot2_Legend - Fatal编程技术网

在R中动态对齐打印(空间地图的自定义ggplot2图例)

在R中动态对齐打印(空间地图的自定义ggplot2图例),r,ggplot2,legend,R,Ggplot2,Legend,我在R中使用sf库生成了许多地图,我希望有一个好看的图例。不幸的是,geom_sf()的标准图例似乎就是这些。我在ggplot2图例中找到的关于调整形状的唯一一篇文章是 这里使用的是指南(颜色=指南\图例(override.aes=列表(shape=16));但是,这似乎只适用于geom_point(),而不适用于geom_sf() 除非有人能提出改变图例对象形状的替代方法,否则我需要在Inkscape中设计一个自定义图例,并将其与各种地图对齐 下面是一段代码,展示我已经尝试过的内容: lege

我在
R
中使用
sf
库生成了许多地图,我希望有一个好看的图例。不幸的是,
geom_sf()
的标准图例似乎就是这些。我在
ggplot2
图例中找到的关于调整形状的唯一一篇文章是

这里使用的是
指南(颜色=指南\图例(override.aes=列表(shape=16))
;但是,这似乎只适用于
geom_point()
,而不适用于
geom_sf()

除非有人能提出改变图例对象形状的替代方法,否则我需要在Inkscape中设计一个自定义图例,并将其与各种地图对齐

下面是一段代码,展示我已经尝试过的内容:

legend <- image_read_svg('https://svgshare.com/i/FDV.svg')
p1 <- ggplot() + 
  geom_sf(data=otherroads, size = .45, aes(color=SUFTYPABRV)) + 
  geom_sf(data=allroads, size = .55, aes(color=SUFTYPABRV)) + 
  scale_color_manual(values = plotcolors, guide = "legend") + theme_map() +
  labs(title = "Sydney")

ggdraw() +
 draw_plot(p1) +
 draw_image(legend, width = 0.4, hjust = -0.75, vjust = 0.43)

legend此答案不是解决图例位置问题,而是更改图例图标。根据您的示例,我收集您的数据,生成一个默认情况下如下所示的图例:

# example from the geom_sf help page
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

# throwing in some random categorical data
nc$catvar <- sample(LETTERS[1:5], nrow(nc), replace = TRUE)

ggplot(nc) +
  geom_sf(aes(colour = catvar))

您可以使用此选项,将glyph设置为点,然后使用
override.aes
技巧获得所需的形状

ggplot(nc) +
  geom_sf(aes(colour = catvar), key_glyph = "point") +
  guides(colour = guide_legend(override.aes = list(size = 3, shape = c(15:19))))

它应该与ggplot中已有的所有常规图例放置工具配合使用。您可能必须为绘图指定特定的位置,但至少不必在添加图例之前先将图例导出到svg文件

ggplot(nc) +
  geom_sf(aes(colour = catvar), key_glyph = "point") +
  guides(colour = guide_legend(override.aes = list(size = 3, shape = c(15:19))))