0

我有多个多边形和一个栅格来组成我的地图。我想“放大”每个多边形,以便更好地可视化每个多边形内的栅格信息。我想我最终可以将facet_grid和的某种组合ggdraw用于最终地图,但现在我需要帮助创建地图的“放大”部分。

例子:

#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 一起使用。欢迎任何指导,谢谢!

4

1 回答 1

2

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

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))

请注意,后两个示例实际上“切断”了“缩放”区域之外的数据点,因此例如延伸到缩放区域之外的线或多边形看起来会有所不同。coord_cartesian不切分,在这种情况下可能是你想要的。这在此处找到的 ggplot2 备忘单中得到了很好的解释

在此处输入图像描述

此外,如果您sf使用 绘制对象geom_sf(),您还可以使用coord_sf(),它旨在处理空间数据,并且不会“切断”延伸到绘图区域之外的数据。

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

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

将您的单个缩放图排列成一个的一种方法是使用cowplot::plot_grid此处为 cowplot 文档)。作为一个非常基本的示例,您只需为其提供ggplot要排列在一起的对象(请参阅文档)

plot_grid(p1, p2, p3, p4)
于 2021-08-22T08:32:21.417 回答