2013-08-05 4 views
5

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

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

Таким образом, в этом примере ...

library(ggplot2) 

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

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

Я хотел бы «вырезать» метки, чтобы показать ниже таблице. Я думал, что facet_grid может держать ключ, но это только предположение.

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

+1

Я не знаю, как ответ на этот вопрос изменился с тех пор [this] (http://stackoverflow.com/q/3261597/324364) или [t его] (http://stackoverflow.com/q/10058839/324364). – joran

+0

Похоже на плохие новости ... Вероятно, вне темы, но мне интересно, предлагает ли решетка эту функциональность. – wesmantooth

ответ

7

Получение фасетов полос ниже сюжет легко,

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) 

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

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")) 

enter image description here

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

+1

kohske опубликовал некоторые трюки для осей: http://rpubs.com/kohske/dual_axis_in_ggplot2 – baptiste

+0

Если я использую '' strip_t'', а затем запускаю 'strips', я получаю вывод' TableGrob (6 x 5) «layout»: 0 grobs'. Является ли это предполагаемым эффектом? Я спрашиваю, потому что я также получаю ошибку на конечном выходе, 'Ошибка в ммм <каждый: сравнение этих типов не реализовано'. Тем не менее, я заменяю 'p' в вашем коде' my.plot' из моего. Правильно ли это? – wesmantooth

+1

у вас должно быть 5 гп в этой gtable, убедитесь, что 'p' - ваш сюжет обновлен, чтобы включить вторую строку (' facet_wrap'). Я обновил код, чтобы позаботиться о другой ошибке. – baptiste

Смежные вопросы