Упорядочить граненые графики в сетке - как полностью удалить метки фасетов, чтобы избежать наложения - PullRequest
0 голосов
/ 08 января 2019

Я немного застрял в следующем: я хочу расположить несколько (gg) графиков в сетке с cowplot::plot_grid. Ниже приведен пример с двумя ggplots (g_bottom и g_top), оба граненые. В нижней части метки фасетов удалены, поскольку они являются избыточными. Тем не менее, кажется, что остается контур фона или около того, действуя как вырезание белой линией на верхнем графике (см. Изображение ниже).

Как я мог это исправить?

Что я пробовал до сих пор:

Вместо strip.background = element_blank() Я также попытался strip.background = element_rect(fill = NA, color = NA) в theme, но безуспешно.

Если я установлю rect = element_blank(), это как-то работает, но я теряю всю границу графика. Я тогда прыгал, что rect = element_rect(fill = "transparent", colour = NA) сделает это, но все равно безуспешно. Я также только что попробовал colour = NULL или colour = "transparent" также безуспешно.

library(ggplot2)
library(cowplot)

g <- ggplot(mpg, aes(class)) + 
    geom_bar() + 
    facet_grid(. ~ year) +
    theme_bw()

g_bottom <- g +
    theme(
        strip.text = element_blank(),
        strip.background = element_blank(), 
        # strip.background = element_rect(fill = NA, color = NA) # didn't work either
        # Was hoping that this will do the trick, bot no success:
        rect = element_rect(fill = "transparent", color = NA)
    )

g_top <- g +
    labs(x = element_blank()) +
    theme(
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank()
    )

plot_grid(g_top, NULL, g_bottom, 
          # used NULL to be able to tweak spacing between plots with rel_heights
          align = "hv",
          nrow = 3,
          rel_heights = c(1, -0.2, 1))

enter image description here Я мог бы обойти проблему, не оглядываясь и не создавая каждый из 4 графиков по отдельности, но, возможно, есть более простое решение с некоторым аргументом theme, который я слишком ослепил, чтобы видеть что-либо еще ...

1 Ответ

0 голосов
/ 08 января 2019

В конце концов, использование rect = element_blank() в theme при создании g_bottom с последующим добавлением panel.border = element_rect(colour = "black"), кажется, помогает. Я до сих пор не понимаю, почему первые испытания не сработали, как ожидалось.

library(ggplot2)
library(cowplot)

g <- ggplot(mpg, aes(class)) + 
    geom_bar() + 
    facet_grid(. ~ year) +
    theme_bw()

g_bottom <- g +
    theme(
        strip.text = element_blank(),
        rect = element_blank(),
        panel.border = element_rect(colour = "black")
    )

g_top <- g +
    labs(x = element_blank()) +
    theme(
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank()
    )

plot_grid(g_top, NULL, g_bottom + theme(panel.border = element_rect(colour = "black")),
          align = "hv",
          nrow = 3,
          rel_heights = c(1, -0.2, 1))
...