使用 facet wrap 和 scales free 映射 geom_sf 的不同状态
Mapping different states with geom_sf using facet wrap and scales free
首先,我知道这个答案:
但是我使用库的对象 sf
.
似乎 facet_wrap(scales = "free")
不适用于 ggplot2 中使用 geom_sf
绘制的对象。我收到此消息:
Erreur : Free scales are only supported with coord_cartesian()
and
coord_flip()
有没有我遗漏的选项?
任何人都可以在不被迫使用 cowplot
(或任何其他 gridarrange)的情况下解决问题?
的确,这里有一个例子。我想在方面分别显示不同的法国地区,但有自己的 x/y 限制。
没有刻度的结果="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 问题中一样:
)
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")
或者我们可以使用 ggspatial
包中的 geom_spatial
,但是 geom_spatial
只需要 Spatial*
个对象。
library(ggplot2)
library(ggspatial)
ggplot() +
geom_spatial(FRA) + # FRA is a SpatialPolygonsDataFrame object
facet_wrap(~NAME_1, scales = "free")
首先,我知道这个答案:
但是我使用库的对象 sf
.
似乎 facet_wrap(scales = "free")
不适用于 ggplot2 中使用 geom_sf
绘制的对象。我收到此消息:
Erreur : Free scales are only supported with
coord_cartesian()
andcoord_flip()
有没有我遗漏的选项?
任何人都可以在不被迫使用 cowplot
(或任何其他 gridarrange)的情况下解决问题?
的确,这里有一个例子。我想在方面分别显示不同的法国地区,但有自己的 x/y 限制。
没有刻度的结果="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 问题中一样:
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")
或者我们可以使用 ggspatial
包中的 geom_spatial
,但是 geom_spatial
只需要 Spatial*
个对象。
library(ggplot2)
library(ggspatial)
ggplot() +
geom_spatial(FRA) + # FRA is a SpatialPolygonsDataFrame object
facet_wrap(~NAME_1, scales = "free")