如何从 R 导出没有边距且无需手动指定宽度和高度的绘图?

问题描述 投票:0回答:1

我正在 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。我的主要问题是我不想手动指定绘图的宽度和高度,因为绘图都有不同的纵横比,我想自动化。

我可以改变什么来接收周围没有空白的绘图?

r ggplot2 svg export png
1个回答
0
投票

您可以使用

plotscale
中的 devsize() 包来计算您需要根据所需的绘图尺寸创建的图形设备的尺寸。您需要提供宽度和高度,但该函数检测到绘图具有固定的纵横比,并让高度相应变化。

library(plotscale)

dev <- devsize(plt, width = 7, height = 7)
ggsave("plt.png", plt, width = dev$width, height = dev$height)
© www.soinside.com 2019 - 2024. All rights reserved.