Отразить метку фасета и ось x с помощью ggplot2

Я хочу перевернуть надписи на граненой панели из 1 строки и 5 столбцов, чтобы заголовки фасетов отображались внизу, а ось x - сверху фасетов.

Причина в том, что я хочу повторно использовать эти заголовки для таблицы, которая будет находиться непосредственно под графиком.

Так что в этом примере...

library(ggplot2)

my.hist<-ggplot(diamonds, aes(clarity)) + geom_bar()

my.hist + facet_wrap( ~ cut, ncol=5) + coord_flip()

Я бы хотел, чтобы метки "вырезать" отображались под графиком. Я думал, что facet_grid может содержать ключ, но это только предположение.

Кто-нибудь знает, как этого добиться?

1 ответ

Решение

Получить фасетные полосы ниже графика легко,

library(gtable)
g <- ggplotGrob(p)

strips <- gtable_filter(g, "strip_t", trim=FALSE)
grid.newpage()
grid.draw(rbind(g, strips[3,], size="first"))

однако оси требуют большей осторожности, поскольку необходимо поменять положение меток и меток. Вы можете начать с этого,

tweak_axis <- function(a){
  inner <- a[["children"]]["axis"][[1]]
  inner[["grobs"]] <- rev(inner[["grobs"]])
  inner$grobs[[2]]$y <- inner$grobs[[2]]$y - unit(0.15, "cm")
  a[["children"]]["axis"][[1]] <- inner
  a
}

axes <- gtable_filter(g, "axis_b", trim=FALSE)
axes$grobs <- lapply(axes$grobs, tweak_axis)
grid.newpage()
grid.draw(axes)

Изменить: на основе вышеизложенного, "полное" решение может быть

grid.newpage()
g2 <- g
new_axes <- lapply(g2$grobs[grepl("axis_b", g2$layout$name)], tweak_axis)
g$grobs[grepl("strip_t", g$layout$name)] <- new_axes 
g$grobs[grepl("axis_b", g$layout$name)] <- g2$grobs[grepl("strip_t", g2$layout$name)] 
# heights should be changed too, but it's kind of ok here
xlab <- 7; title <- 1:2
grid.draw(rbind(g[xlab,], g[-c(title, xlab), ], size="last"))

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

(с очевидными оговорками)

Другие вопросы по тегам