在ggplot2中明确设置面板大小(而不仅仅是绘图大小)

18

在ggplot中是否可以显式设置面板大小(即灰色网格面板)?我想象(但找不到)有一些ggplot扩展可以使用类似 panel.width = unit(3, "in"), panel.height = unit(4, "in") 的参数。

我已经看到了关于设置整个图的大小或使用egg包来对齐多个图的解决方案。但没有任何东西让我可以显式地设置面板的大小。

library(dplyr)
library(ggplot2)
library(tibble)

ds_mt <- mtcars %>% rownames_to_column("model")
mt_short <- ds_mt %>% arrange(nchar(model)) %>% slice(1:4)
mt_long <- ds_mt %>% arrange(-nchar(model)) %>% slice(1:4)

p_short <- 
    mt_short %>% 
    ggplot(aes(x = model, y = mpg)) + 
    geom_col() + 
    coord_flip()

p_short

这里输入图片描述


你在寻找 ggsave 吗? - jan-glx
@jan-glx,ggsave()可以设置整个图形的尺寸,但我想控制图形中面板的尺寸。 - Joe
你所说的“panel”是指通常为灰色的区域吗? - jan-glx
@jan-glx 是的,感谢你澄清,我已经更新了问题以反映这一点。 - Joe
1
我知道如果有人知道答案,那一定是@baptiste。答案链接 - jan-glx
显示剩余2条评论
2个回答

17

ggh4x包有一个类似于其他答案中所示的egg解决方案的类似函数。 稍微方便的是,使用该函数后绘图仍然是有效的ggplot对象,因此可以与ggsave()一起使用,并且可以在之后添加其他图层。(免责声明:我写了ggh4x)

library(dplyr)
library(ggplot2)
library(tibble)
library(ggh4x)

ds_mt <- mtcars %>% rownames_to_column("model")
mt_short <- ds_mt %>% arrange(nchar(model)) %>% slice(1:4)
mt_long <- ds_mt %>% arrange(-nchar(model)) %>% slice(1:4)

mt_short %>% 
  ggplot(aes(x = model, y = mpg)) + 
  geom_col() + 
  coord_flip() +
  force_panelsizes(rows = unit(4, "in"),
                   cols = unit(3, "in"))

2021-04-21由reprex包(v1.0.0)创建


1
就像ggh4x包成为几乎所有未解决的ggplot问题的解决方案一样 :) - tjebo
3
这可能是因为ggh4x是我解决自己的ggplot问题的出口:p - teunbrand
2
我喜欢这个,因为它可以与ggsave一起使用。 - Zhiqiang Wang

13
你可以使用egg包中的set_panel_size()函数。该函数与面板大小相关。
library(tibble)
library(dplyr)
library(ggplot2)

ds_mt <- mtcars %>% rownames_to_column("model")
mt_short <- ds_mt %>% arrange(nchar(model)) %>% slice(1:4)
mt_long <- ds_mt %>% arrange(-nchar(model)) %>% slice(1:4)

p_short <- 
  mt_short %>% 
  ggplot(aes(x = model, y = mpg)) + 
  geom_col() + 
  coord_flip()

library(egg)
library(grid)
p_fixed <- set_panel_size(p_short,
                          width  = unit(10, "cm"),
                          height = unit(4, "in"))
grid.newpage()
grid.draw(p_fixed)

这篇文章是由reprex包(v0.2.1.9000)于2018年11月13日创建的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接