仅改变一个方面(行)的 facet_grid() 高度是否可能?

Altering facet_grid() height only for one facet (row) is it possible?

我正在尝试改进 facet_grid 图形中的一个简单但重要的细节。

我玩过 facet_grid() 函数的比例和 space 参数。但我想增加高度 底面,以便能够读取图中截断的样本数(以红色突出显示)。参见图片 1。 使用的代码是:

    ggplot(salm_data, aes(x=SALM) ) + geom_bar(stat = "count", position = position_dodge())
 + facet_grid(YEAR ~ TYPE, scales = "free_x", space = "free") 
 +  geom_text(size=2.5, stat = "count", aes(label = after_stat(count)), vjust = -0.3) +theme_bw() + labs(y="Number of samples") + 
theme(panel.grid.minor = element_blank())+
 labs(x=expression(paste(italic("Klebsiella spp."), " ")))

图片 1: Image1

为了克服这个“问题”,我尝试包含下一个代码来放大 Y 轴:

scale_y_continuous(breaks = seq(from = 0, to = 300, by = 40))

但我无法改善这种情况(见图 2)。

图2: Image2

你能帮我一些想法来克服这种情况吗?

提前感谢您的help/comments、

贤士

网格图形使您能够修改 ggplot() 个对象的 widthsheights

示例代码:

library(grid)   



gg = ggplot(salm_data, aes(x=type) ) + 
      geom_bar(stat = "count", position = position_dodge())+ 
      facet_grid(year ~ type, scales = "free_x", space = "free")+
      geom_text(size=2.5, stat = "count", aes(label = after_stat(count)), vjust = -0.3) +
      theme_bw() + 
      labs(y="Number of samples") + 
      theme(panel.grid.minor = element_blank())+
      labs(x=expression(paste(italic("Klebsiella spp."), " ")))
    
    
    
gt = ggplot_gtable(ggplot_build(g))
gt$widths[7] = 4*gt$widths[7]  # modify panel-1-2 and panel-2-2  
gt$heights[7] = 4*gt$heights[7] #modify panel-1-2 and panel-2-2 
grid.draw(gt)

示例图:

示例数据:

salm_data<-structure(list(type = c("A", "B", "C", "D", "A", "B", "C", "D", 
"A", "B", "C", "D", "A", "C", "A", "B", "C", "D", "A", "B", "C", 
"D", "A", "B", "C", "D", "A", "C", "A", "B", "C", "D", "A", "B", 
"C", "D", "A", "B", "C", "D", "A", "C", "A", "B", "C", "D", "A", 
"B", "C", "D", "A", "B", "C", "D", "A", "C", "A", "B", "C", "D", 
"A", "B", "C", "D", "A", "B", "C", "D", "A", "C", "A", "B", "C", 
"D", "A", "B", "C", "D", "A", "B", "C", "D", "A", "C", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"
), year = c(2001, 2001, 2001, 2001, 2001, 2002, 2001, 2002, 2001, 
2002, 2001, 2002, 2002, 2002, 2001, 2001, 2001, 2001, 2001, 2002, 
2001, 2002, 2001, 2002, 2001, 2002, 2002, 2002, 2001, 2001, 2001, 
2001, 2001, 2002, 2001, 2002, 2001, 2002, 2001, 2002, 2002, 2002, 
2001, 2001, 2001, 2001, 2001, 2002, 2001, 2002, 2001, 2002, 2001, 
2002, 2002, 2002, 2001, 2001, 2001, 2001, 2001, 2002, 2001, 2002, 
2001, 2002, 2001, 2002, 2002, 2002, 2001, 2001, 2001, 2001, 2001, 
2002, 2001, 2002, 2001, 2002, 2001, 2002, 2002, 2002, 2001, 2001, 
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 
2001, 2001, 2001, 2001)), class = "data.frame", row.names = c(NA, 
-112L))

非常感谢@Rfanatic。这正是我想要的。

我按照您的指示从包 grid 创建了 gtable,但我也使用了库 gtable 来帮助我发现我的案例的面板编码。这是代码,如果将来也可以帮助某人:

gt <- ggplot_gtable(ggplot_build(gg))
gt$widths[14] = 1*gt$widths[14]    
gt$heights[14] = 4*gt$heights[14]  
grid.draw(gt)

我使用位置 14,因为它是我遇到问题的正方形的行位置编号:

library(gtable)
gtable_show_layout(gt)

但对我来说最好的是打印 TableGrob:

print(gt)
#17 1 (14-14,11-11) panel-4-4 gTree[panel-16.gTree.8635]

我对示例中的 panel-4-4 感兴趣(只是我在这里打印了 gt 输出的这一行)。此外,由于我要更改行高和宽度,所以我选择了 14 而不是 11。

谢谢。