如何放大地图的多个点并将它们全部包含在单独的面板中?

How to zoom in on multiple points of a map and include them all in separate panels?

我有多个多边形和一个栅格构成我的地图。我想“放大”这些多边形中的每一个,以便更好地可视化每个多边形中的栅格信息。我想我最终可以使用 facet_gridggdraw 的某种组合来制作最终地图,但现在我需要帮助创建地图的“放大”部分。

示例:

#Raster layer
library(terra)
library(raster)
library(sf)

f <- system.file("ex/elev.tif", package="terra")
r <- rast(f)

#polygons
v <- vect(system.file("ex/lux.shp", package="terra"))
v <- v[c(1:10)] 

#Base plot
ggplot() +
  geom_raster(data = r, aes(x = x, y = y, fill = elev)) +
  geom_sf(data = v, fill = NA, col = "red") 

我知道 rasterterra 包都有 zoom 函数,但我无法将它与 ggplot 一起使用。欢迎任何指导,谢谢!

我无法让您的示例数据正常工作,但是您可以使用以下任一方法放大 ggplot 的部分:

your_plot+
   coord_cartesian(
      xlim = c(xmin, xmax), 
      ylim = c(ymin, ymax)
   )

your_plot+
   xlim(xmin, xmax)+
   ylim(ymin, ymax)

your_plot+
   scale_x_continuous(limits = c(xmin, xmax))+
   scale_y_continuous(limits = c(ymin, ymax))

请注意,后两个示例实际上 'cut off' 数据点位于 'zoomed' 区域之外,因此,例如延伸到缩放区域之外的线或多边形看起来会有所不同。 coord_cartesian 不会截断点,在这种情况下可能就是您想要的。这在 ggplot2 备忘单 found here

中有很好的解释

此外,如果您正在使用 geom_sf() 绘制 sf 对象,您还可以使用 coord_sf(),它旨在处理空间数据,并且不 'cut off' 超出绘图区域的数据。

your_plot+
   coord_sf(
      xlim = c(xmin, xmax), 
      ylim = c(ymin, ymax)
   )

一个提示:在指定限制时确保 min 值小于 max 值。这听起来很明显,但是例如在澳大利亚,我们的纬度(y 值)都是负的。因此,很容易不小心将 'smaller' 数字与 'larger' 数字混淆。

将您的各个缩放图合并为一个的一种方法是使用 cowplot::plot_grid (cowplot documentation here)。作为一个非常基本的示例,您只需向它提供 ggplot 个要排列在一起的对象(参见文档)

plot_grid(p1, p2, p3, p4)