这感觉像是必须已经回答的最基本问题,但我已经在谷歌上搜索了几个小时,但没有找到可用的答案。
我将生成大量 3 英寸 x 3 英寸的图,这些图将全部使用 ggsave(..., width = 3, height = 3,units = "in") 保存。 我想确保它们始终在屏幕上(在 RStudio 绘图窗格中)显示为 3 英寸 x 3 英寸,以便我可以在保存它们之前快速检查它们是否正确。
但我似乎找不到办法做到这一点! 我尝试过的事情:
egg::set_panel_size
就是几乎了!! 这很棒,直到我为我的绘图添加一个标题,然后只有面板大小是固定的(因此整个绘图大于 3x3)。 但事实上,我可以修复面板的大小,这让我觉得也可以对整个图做同样的事情? 这正是我所需要的。 (虽然更好的办法是将绘图渲染为 3 英寸 x 3 英寸,无论屏幕大小如何,但这就可以了!)
dev.new
是可能的,但有点笨重,因为我必须打开一个单独的窗口,这使得我的图形的迭代细化相当缓慢和费力(而且对于我不小心调整大小的愚蠢时刻来说也不够鲁棒) ).
cowplot::draw_plot
允许我设置相对于窗口大小的绘图高度,但不是(据我所知?)绝对大小。
我尝试了很多其他事情(例如尝试破解 ggplotGrob 对象),但我似乎看不到一种方法来做到这一点。 需要明确的是,这不是以指定大小保存(这很容易),而是生成一个快速预览,看起来与我的 ggsaved 绘图相同。 谢谢! dev.new
以下函数将允许以这种格式绘制 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,使用