【问题标题】:Setting canvas size in ggsave to a fixed width while maintaining aspect ratio of plots将 ggsave 中的画布大小设置为固定宽度,同时保持绘图的纵横比
【发布时间】:2019-02-26 18:40:07
【问题描述】:

长话短说,我为我的学生制作 youtube 视频,并制作了很多图形。到目前为止,我已经将图像导入到 Premiere 中,调整了它们的大小,然后在 ggplot 图形后面放置了一个单独的白色背景图像。这有点乏味,我希望能够直接从 R 导出到适当的大小(1920x1080 p),这样我就不必调整大小和添加背景图像。

我可以调整图形的大小,但现在它会拉伸它:

我希望它看起来像这样(我将框放在图像和画布周围,以使绘图结束和背景画布开始的位置更清晰):

我知道我可以指定外部边距(请参阅How can I control the canvas size in ggplot?),但这需要我设置每个地块的外部边距;有时我的地块比它们的高度更宽,有时我的地块比它们的宽度更高。 ggsave 似乎尊重纵横比并最大化一个维度或另一个维度。

那么如何在保持正确纵横比的同时设置外边距?

【问题讨论】:

  • 快速提问:你是否使用 coord_fixed() 来控制纵横比?
  • 目前没有。我想过做这样的事情,但不幸的是我经常合并绘图(例如,使用 cowplot::plot_grid),我不知道如何修复每个绘图的纵横比

标签: r ggplot2 plot


【解决方案1】:

您可以将面板大小设置为特定值,

library(egg)
library(ggplot2)
library(grid)

p <- ggplot() + labs(x = 'x title', y = 'y title')

ggsave('notset.png', p, width = 6.4, height = 3.6, units = 'in', dpi = 300)

ggsave('set.png', egg::set_panel_size(p, width=unit(4, "in"), height=unit(3, "in")), 
       width = 6.4, height = 3.6, units = 'in', dpi = 300)

【讨论】:

  • 感谢您的意见。问题是必须指定 set_panel_size。该值会因地而异,我不知道如何自动化。
  • 我不清楚你想要的情节大小。一方面您不想指定绘图边距,但您也不想指定面板大小。那么计算机如何知道您希望该固定设备区域内的绘图大小是多少?还是您只关心纵横比并希望绘图缩放以填充高度或宽度?
  • "或者你只是关心纵横比并且希望绘图缩放以填充高度或宽度?" -- 这正是我想要的:保持纵横比,将高度(或宽度)填充到最大尺寸,然后为另一个放置适量的空白。这有意义吗?
猜你喜欢
  • 2019-05-18
  • 2012-01-03
  • 2019-01-08
  • 1970-01-01
  • 2015-01-21
  • 2015-05-06
  • 2013-07-07
  • 2017-02-13
  • 2015-12-02
相关资源
最近更新 更多