geom_sf 如何 trim 白色 space 不保存情节
geom_sf how to trim white space without saving plot
我正在尝试从使用 geom_sf()
创建的 ggplot 地图中 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
我正在尝试从使用 geom_sf()
创建的 ggplot 地图中 trim 白色 space。我发现有多个资源讨论在使用 ggsave()
保存绘图时删除白色 space。不过,我希望删除白色 space 而不必保存它。
使用 ggsave()
-
请在下面找到一个可重现的示例:
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()
(
如果您想将绘图放在白色的左下角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