sf使用小面包和秤自由

首先,我知道这个答案:使用facet wrap在R中映射不同的状态
但我与库sf对象工作。
看起来facet_wrap(scales = "free")不适用于在ggplot2中用geom_sf绘制的对象。 我收到这条消息:

Erreur:只有coord_cartesian()coord_flip()支持自由尺度

有没有我错过的选择?
任何人都可以解决问题,而不必被迫使用cowplot (或任何其他gridarrange)?

的确,这是一个例子。 我想在各个方面分别展示不同的法国地区,但有自己的X / Y限制。

没有scale =“free”的结果

比例是用整个地图的范围来计算的。

FRA <- raster::getData(name = "GADM", country = "FRA", level = 1)
FRA_sf <- st_as_sf(FRA)

g <- ggplot(FRA_sf) +
  geom_sf() +
  facet_wrap(~NAME_1)

具有geom_sf的构面区域

使用cowplot的结果

我需要使用ggplots列表,然后可以将它们组合起来。 这是目标输出。 它更干净。 但我也想要一个干净的方式来添加一个图例。 (我知道在这个其他SO问题中可能有一个常见的图例:小平面包装在R中扭曲了状态图)

g <- purrr::map(FRA_sf$NAME_1,
           function(x) {
             ggplot() +
               geom_sf(data = filter(FRA_sf, NAME_1 == x)) +
               guides(fill = FALSE) +
               ggtitle(x)
           })

g2 <- cowplot::plot_grid(plotlist = g)

具有geom_sf和cowplot的构面区域


我知道你正在寻找使用ggplot2的解决方案,但我发现tmap包可能是一个取决于你的需要的选择。 tmap的语法类似于ggplot2 ,它也可以采用sf对象。 以您的FRA_sf为例,我们可以做这样的事情。

library(tmap)

tm_shape(FRA_sf) +
  tm_borders() +
  tm_facets(by = "NAME_1")

在这里输入图像描述

或者我们可以使用geom_spatial包中的ggspatial ,但geom_spatial只能使用Spatial*对象。

library(ggplot2)
library(ggspatial)

ggplot() +
  geom_spatial(FRA) + # FRA is a SpatialPolygonsDataFrame object
  facet_wrap(~NAME_1, scales = "free")

在这里输入图像描述

链接地址: http://www.djcxy.com/p/40995.html

上一篇: sf using facet wrap and scales free

下一篇: Difference between &mut and ref mut for trait objects