我正在 R 中创建几个具有不同纵横比的绘图,旨在稍后在 Latex 中使用。
我有类似的情节:
library(ggplot2)
library(sf)
map <- st_sf(geometry = st_sfc(st_point(c(0, 0)), st_point(c(1, 2))))
plt <- ggplot(map) +
geom_sf(aes(), linewidth = 0.2, alpha = 0.4) +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5),
plot.margin = margin(0,0,0,0),
axis.ticks.length = unit(0, "pt"),
plot.background = element_rect(fill = "yellow")
) +
theme(legend.position = "none")
并尝试了以下导出选项:
ggsave(
"whatever.svg",
plot = plt)
png("whatever.png")
plot(plt)
dev.off()
对于这两个选项,绘图本身的左侧和右侧都有白色边距。如何在不手动指定宽度和高度且没有白边距的情况下导出绘图?
我还尝试使用
从绘图本身(ChatGPT 解决方案)中提取绘图宽度和高度p_built <- ggplot_build(plt)
width <- diff(p_built$panel$ranges[[1]]$x.range)
height <- diff(p_built$panel$ranges[[1]]$y.range)
但是,我收到的结果是 NULL,但无法。
我确实对矢量图形有一点偏好,但我也愿意导出为 .png。我的主要问题是我不想手动指定绘图的宽度和高度,因为绘图都有不同的纵横比,我想自动化。
我可以改变什么来接收周围没有空白的绘图?
您可以使用
plotscale中的
devsize()
包来计算您需要根据所需的绘图尺寸创建的图形设备的尺寸。您需要提供宽度和高度,但该函数检测到绘图具有固定的纵横比,并让高度相应变化。
library(plotscale)
dev <- devsize(plt, width = 7, height = 7)
ggsave("plt.png", plt, width = dev$width, height = dev$height)