ggplot2:修复屏幕设备上 ggplot 的绝对大小(RStudio 绘图窗格)

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

这感觉像是必须已经回答的最基本问题,但我已经在谷歌上搜索了几个小时,但没有找到可用的答案。

我将生成大量 3 英寸 x 3 英寸的图,这些图将全部使用 ggsave(..., width = 3, height = 3,units = "in") 保存。 我想确保它们始终在屏幕上(在 RStudio 绘图窗格中)显示为 3 英寸 x 3 英寸,以便我可以在保存它们之前快速检查它们是否正确。

但我似乎找不到办法做到这一点! 我尝试过的事情:

  1. egg::set_panel_size
    就是几乎了!! 这很棒,直到我为我的绘图添加一个标题,然后只有面板大小是固定的(因此整个绘图大于 3x3)。 但事实上,我可以修复面板的大小,这让我觉得也可以对整个图做同样的事情? 这正是我所需要的。 (虽然更好的办法是将绘图渲染为 3 英寸 x 3 英寸,无论屏幕大小如何,但这就可以了!)

  2. dev.new
    是可能的,但有点笨重,因为我必须打开一个单独的窗口,这使得我的图形的迭代细化相当缓慢和费力(而且对于我不小心调整大小的愚蠢时刻来说也不够鲁棒) ).

  3. cowplot::draw_plot
    允许我设置相对于窗口大小的绘图高度,但不是(据我所知?)绝对大小。

我尝试了很多其他事情(例如尝试破解 ggplotGrob 对象),但我似乎看不到一种方法来做到这一点。 需要明确的是,这不是以指定大小保存(这很容易),而是生成一个快速预览,看起来与我的 ggsaved 绘图相同。 谢谢! dev.new

r ggplot2 size
2个回答
1
投票

以下函数将允许以这种格式绘制 ggplot 对象,并具有您选择的尺寸:

draw <- function(plot, x_in = 3, y_in = 3) { grid::grid.newpage() grid::rectGrob(gp = grid::gpar(fill = "gray")) |> grid::grid.draw() grid::viewport(width = ggplot2::unit(x_in, "in"), height = ggplot2::unit(y_in, "in")) |> grid::pushViewport() ggplot2::ggplot_build(plot) |> ggplot2::ggplot_gtable() |> grid::grid.draw() }

例如:

library(ggplot2) p <- ggplot(iris, aes(Sepal.Width, Petal.Length, color = Species)) + geom_point() draw(p)

如果您不想每次都调用

draw(p)

,而只是让 ggplots 在交互式会话期间自动以这种方式绘制,您可以这样做

print.ggplot <- draw

定义上述函数后。

这会导致以下行为

ggplot(mtcars, aes(wt, mpg, color = factor(gear))) + geom_point()

创建于 2023-09-27,使用

reprex v2.0.2


0
投票

在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.