geom_sf 如何 trim 白色 space 不保存情节

geom_sf how to trim white space without saving plot

我正在尝试从使用 geom_sf() 创建的 地图中 trim 白色 space。我发现有多个资源讨论在使用 ggsave() 保存绘图时删除白色 space。不过,我希望删除白色 space 而不必保存它。

使用 ggsave() -

去除白色 space

请在下面找到一个可重现的示例:

library(spData); library(sf); library(ggplot2)
library(cowplot)
data("us_states", package = "spData")

north_carolina = read_sf(system.file("shape/nc.shp", package = "sf"))

nc_plot <- ggplot() + geom_sf(data = north_carolina)

现在,我希望 nc_plot 出现在 ggdraw() 图的左下角。 ggdraw() 图的坐标从左下角开始。所以,x = 0, y = 0 应该是左下角。

ggdraw() + draw_plot(nc_plot, x = 0, y = 0)

正如你所看到的,情节一直在左边,但没有一直在底部。这是因为剧情上下都有白色space。我想从绘图中删除白色 space,这样我就可以在左下角看到地图。

可以分享更多关于您正在努力完成的事情吗?你说你想删除 whitespace,但你还希望绘图位于 whitespace 的左下角。你在这里的最终目标是什么?如果我遗漏了什么,请告诉我。

我相信白色space 是根据您的图形设备和 ggplot 边距添加到您的 ggplot 之外的。您可以在 theme() () 中控制 ggplot 边距。您可以通过将图形设备定义为与 ggplot 对象相同的尺寸来删除白色space。

如果您想将绘图放在白色的左下角space,您可以定义图形设备space,然后使用您最喜欢的绘图布局工具之一在该区域内绘图。例如:

g <- ggplotGrob(nc_plot)
ggplot() + theme_void() + xlim(0,10) + ylim(0,10) +
  annotation_custom(
    grob = g,
    xmin = -0.5,
    xmax = 3,
    ymin = -2,
    ymax = 5)

编辑:绘图和绘图边距(蓝色区域)和图形设备的作用示例。请注意,图形设备根据设备的大小将绘图 window 填充为白色 space。总地块面积以蓝色显示。

  geom_sf(data = north_carolina) + 
  theme(panel.background=element_blank(),
        panel.spacing = unit(c(0, 0, 0, 0), "cm"),       
        plot.background = element_rect(fill = "lightblue",colour = NA),
        plot.margin = unit(c(0, 0, 0, 0), "null"),  # Edited code
        legend.position = 'none')
plot(p)

我可以调整 window 的大小以删除白色space:

要完成@Skaqqs 的回答并为您提供替代解决方案,您还可以通过修改最后一行代码继续使用 cowplot 包,如下所示:

  • 代码
library(sf)
library(ggplot2)
library(cowplot)


ggdraw() + draw_plot(nc_plot, x = -0.24, y = -0.34, scale = 0.5)
  • 可视化

reprex package (v2.0.1)

创建于 2022-01-11