Нарисуйте границу вокруг определенных строк, используя cowplot и ggplot2

Я хочу как-то указать, что определенные строки в многопанельном рисунке должны сравниваться вместе. Например, я хочу сделать этот сюжет:

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

Выглядит как этот график (с рамками вокруг панелей, сделанных с помощью PowerPoint):

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

Вот код, который я сделал для использования первого сюжета. Я использовал ggplot и cowplot:

require(cowplot)
theme_set(theme_cowplot(font_size=12)) # reduce default font size
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + 
  geom_point(size=2.5)
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
  theme(axis.text.x = element_text(angle=70, vjust=0.5))
plot.mpg2 <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + 
  geom_point(size=2.5)
plot.diamonds2 <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
  theme(axis.text.x = element_text(angle=70, vjust=0.5))
plot_grid(plot.mpg, plot.diamonds,plot.mpg2, plot.diamonds2, nrow=2,labels = c('A', 'B','C','D'))

Есть ли изменение, которое я могу внести в этот код, чтобы получить нужные мне границы? Или, может быть, я даже могу сделать так, чтобы панели A и B имели немного другой цвет, чем фон для панелей C и D? Это может быть даже лучше.


person user2917781    schedule 05.09.2018    source источник
comment
Возможно, связано с stackoverflow.com/q/36963349/3358272.   -  person r2evans    schedule 05.09.2018
comment
Кажется актуальным, но я до сих пор не уверен, как поместить границу только вокруг определенных строк на многопанельном графике. Пост кажется актуальным для того, чтобы поставить границу вокруг всего сюжета.   -  person user2917781    schedule 05.09.2018
comment
Да, именно поэтому я предложил связанный, а не дубликат. Извините, у меня не так много, но я предполагаю, что вам нужно будет разобраться с гробами и прочим, ничего ggplot2-родного.   -  person r2evans    schedule 05.09.2018


Ответы (1)


Поскольку результатом plot_grid() является объект ggplot, один из способов сделать это — использовать вложенные сетки графиков: по одной plot_grid() для каждой строки с соответствующей границей, добавленной через theme().

plot_grid(
  # row 1
  plot_grid(plot.mpg, plot.diamonds, nrow = 1, labels = c('A', 'B')) +
    theme(plot.background = element_rect(color = "black")),

  # row 2
  plot_grid(plot.mpg2, plot.diamonds2, nrow = 1, labels = c('C', 'D')) +
    theme(plot.background = element_rect(color = "black")), 

  nrow = 2)

сюжет

person Z.Lin    schedule 05.09.2018