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)
使用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)
我知道你正在寻找使用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