Поле над заголовком в ggplot, созданном с помощью grid.arrange

У меня есть два ggplot, которые я могу создать следующим образом:

df1 = data.frame(x=1:10, y1=11:20, y2=21:30)
gg1 = ggplot(df1) + geom_point(aes(x=x, y=y1))
gg2 = ggplot(df1) + geom_point(aes(x=x, y=y2))
grid.arrange(gg1, gg2, top=textGrob("Here should be some space above",
                                    gp=gpar(fontsize=18,
                                            fontfamily="Times New Roman")))

Теперь вывод выглядит так:

введите здесь описание изображения

Здесь его не видно, так как он белый на белом, но я хотел бы создать больше места в выходном изображении над заголовком. И я не совсем уверен, как это сделать. Здесь описано, как добавить пространство между отдельными графиками Поля между графиками в grid.arrange , но мне не удалось просто добавить пробел над заголовком.


person Robin Kohrs    schedule 07.04.2021    source источник
comment
как насчет использования padding=unit(1, "cm"), который добавляет немного места вокруг аннотации   -  person user20650    schedule 07.04.2021


Ответы (2)


Используя arrangeGrob, вы можете добавить некоторое поле поверх заголовка с помощью zeroGrob следующим образом:

library(ggplot2)
library(gridExtra)
library(grid)

df1 = data.frame(x=1:10, y1=11:20, y2=21:30)
gg1 = ggplot(df1) + geom_point(aes(x=x, y=y1))
gg2 = ggplot(df1) + geom_point(aes(x=x, y=y2))

title <- textGrob("Here should be some space above",
                  gp=gpar(fontsize=18, fontfamily="Times New Roman"))

# Add a zeroGrob of height 2cm on top of the title
title <- arrangeGrob(zeroGrob(), title, 
                    widths = unit(1, 'npc'), 
                    heights = unit(c(2, 1), c('cm', 'npc')),
                    as.table = FALSE)
grid.arrange(gg1, gg2, top = title)

person stefan    schedule 07.04.2021

Можете ли вы жить с другим пакетом?

library(patchwork)

plot_spacer()/ (gg1 + ggtitle("there is now space above")) / gg2 + plot_layout(heights = c(.5,1,1)) 

Или установите поле заголовка на первом графике

gg1 = ggplot(df1) + geom_point(aes(x=x, y=y1)) +
  ggtitle("there is now space above") +
  theme(plot.title = element_text(margin = margin(t = 1, unit = "in")))

gg1 / gg2 

person tjebo    schedule 07.04.2021