首页 > 解决方案 > ggplot 与 ggsave(width=x, height=y) 具有相同的宽度和高度

问题描述

在 R-Studio 中,我使用 生成图ggplot,然后将它们保存以ggsave()供进一步使用(我知道,不理想,但现在不是可选的)。

我的问题是,当我在保存之前生成绘图时,R 会以特定大小向我显示它。用ggsave,我设置widthheight,所以元素显示移位等。我只在保存绘图后看到这个。

我想让 R 以前给我看。因此,我假设我需要在ggplot()某处设置绘图的大小,而不是在ggsave().

我怎样才能以最简单的方式做到这一点?

library(ggplot2)

ggplot(mtcars, aes(mpg,disp)) + geom_point() +
  labs(title="Rocket science title that will get cut by ggsave")

ggsave("rocketScience.png", width=10, height=7, unit="cm")

标签: rggplot2rstudio

解决方案


您可以使用egg包中的set_panel_size()函数。使用此功能,您可以固定绘图的面板大小。这在创建多个绘图时非常有用,这些绘图应该具有完全相同的绘图区域,但使用不同的轴标签或类似的东西,通常会稍微改变面板尺寸。对于具有无缝动画或出版物的演示文稿特别有用。它还确保预览和保存的绘图中的尺寸相同。

p <- ggplot(mtcars, aes(mpg,disp)) +
      geom_point() +
      labs(title="Rocket science title that will get cut by ggsave")

#to view the plot
gridExtra::grid.arrange(egg::set_panel_size(p=p, width=unit(5, "cm"), height=unit(7, "cm")))

#to save the plot
ggsave(filename = "myplot.pdf", plot = egg::set_panel_size(p=p, width=unit(5, "cm"), height=unit(7, "cm")))

在 ggsave 中,您仍然可以操纵保存的整个“页面”的大小,但这只会影响绘图周围的空白量。实际面板尺寸将保持不变。上面的示例图,宽度为 5cm 或 15cm: 在此处输入图像描述 在此处输入图像描述


推荐阅读