如何放大地图的多个点并将它们全部包含在单独的面板中?
How to zoom in on multiple points of a map and include them all in separate panels?
我有多个多边形和一个栅格构成我的地图。我想“放大”这些多边形中的每一个,以便更好地可视化每个多边形中的栅格信息。我想我最终可以使用 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")
我知道 raster
和 terra
包都有 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)
我有多个多边形和一个栅格构成我的地图。我想“放大”这些多边形中的每一个,以便更好地可视化每个多边形中的栅格信息。我想我最终可以使用 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")
我知道 raster
和 terra
包都有 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)