假设我使用以下数据生成两个条形图作为多重绘图:
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)))
结果情节如下:
如果你看看&#34; g&#34;在情节标题中,它有点削减。然而,我试图增加多重标题的标题与每个标题的标题之间的距离,但是没有找到一种方法在&#34; ggarange&#34;中进行。有人知道我怎么能在ggarange / textGrob中做到这一点
答案 0 :(得分:2)
网格总是有点特殊。 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"))