R:ggarange增加了多个地块的标题和每个地块的标题之间的距离

时间:2018-04-29 20:27:36

标签: r plot

假设我使用以下数据生成两个条形图作为多重绘图:

quarter1

    variable value merge1
1      h=4     3     no
2      h=7     2    yes
3      h=8     3     no
4     h=21     2     no

quarter2

   variable value merge2
1      h=6     1     no
2      h=7     2    yes
3     h=10     1     no
4     h=12     3     no
5     h=13     1     no
6     h=16     1     no
7     h=17     1     no

两个地块的代码:

bar_q <- ggplot(quarter1, aes(x=variable, y=value, fill=merge1)) + geom_bar(stat="identity")
bar_qf <- bar_q  + ggtitle("k = 0") + 
theme(axis.text=element_text(size=24, color="gray0"), axis.title=element_blank()) + 
scale_y_continuous(breaks= function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))) + 
scale_fill_manual(values= grp_colors, guide=F) + 
theme(plot.title = element_text(hjust = 0.5, size=24))

bar2_q <- ggplot(quarter2, aes(x=variable, y=value, fill=merge2)) + geom_bar(stat="identity") 
bar2_qf <- bar2_q + ggtitle(expression(k %in% group("[", "1;4", "]"))) + theme(axis.text=element_text(size=24 , color="gray0"), axis.title=element_blank()) + 
scale_y_continuous(limits=c(0,3), breaks=seq(3)) + 
scale_fill_manual(values= grp_colors, guide=F) +  
theme(plot.title = element_text(hjust = 0.5, size=24))

用:

生成多重绘图
plot_quarter <- egg::ggarrange(bar_qf,bar2_qf, ncol=2, top=textGrob("Quartalsdaten:Häufigkeiten", gp=gpar(fontsize=28,font=2)))

结果情节如下:

enter image description here

如果你看看&#34; g&#34;在情节标题中,它有点削减。然而,我试图增加多重标题的标题与每个标题的标题之间的距离,但是没有找到一种方法在&#34; ggarange&#34;中进行。有人知道我怎么能在ggarange / textGrob中做到这一点

1 个答案:

答案 0 :(得分:2)

在评估textGrob高度时,

网格总是有点特殊。 ggplot2最近推出了一个titleGrob来更加一致地处理这个问题;不幸的是,这是一个私人功能,不适合在外部使用。

我能想到的两个最简单的解决方法是:

library(ggplot2)
p1 <- p2 <- ggplot()

library(grid)
# create a new class and give it a more generous height
tg <- grobTree(textGrob("Quartalsdaten:Häufigkeiten", gp=gpar(fontsize=28,font=2)), cl='title')
heightDetails.title <- function(x) grobHeight(x$children[[1]]) + unit(2,"line")
egg::ggarrange(p1,p2, ncol=2, top=tg)


library(gridExtra)
# wrap the text in a dummy gtable
tg <- gridExtra::tableGrob("Quartalsdaten:Häufigkeiten", 
                           theme = ttheme_minimal(base_size = 28, padding = unit(c(0, 2), "line"),
                                                  core = list(fg_params=list(font=2))))
egg::ggarrange(p1,p2, ncol=2, top=tg)

编辑:实际上,正如评论中指出的那样,ggarrange为此目的有一个填充参数,

egg::ggarrange(p1,p2, ncol=2, top=textGrob("Quartalsdaten:Häufigkeiten", gp=gpar(fontsize=28,font=2)), padding = unit(1,"line"))