2013-08-05 39 views
5

Tôi đang tìm cách lật nhãn trên bảng mặt của 1 hàng và 5 cột sao cho các tiêu đề khía cạnh xuất hiện ở dưới cùng và trục x xuất hiện trên đầu các mặt.Lật nhãn mặt và trục x với ggplot2

Lý do là tôi muốn sử dụng lại các tiêu đề đó cho một bảng sẽ nằm ngay bên dưới biểu đồ.

Vì vậy, trong ví dụ này ...

library(ggplot2) 

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

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

tôi sẽ muốn "cắt" nhãn để hiển thị bên dưới bảng xếp hạng. Tôi đã nghĩ rằng facet_grid có thể giữ chìa khóa, nhưng chỉ là một phỏng đoán.

Bất kỳ ai biết cách thực hiện điều này?

+1

Tôi không biết câu trả lời cho câu hỏi này đã thay đổi kể từ [this] (http://stackoverflow.com/q/3261597/324364) hoặc [t của anh ấy] (http://stackoverflow.com/q/10058839/324364). – joran

+0

Có vẻ như tin xấu ... Có lẽ là tắt chủ đề, nhưng tôi tự hỏi liệu mạng có cung cấp chức năng này không. – wesmantooth

Trả lời

7

Lấy dải khía cạnh dưới đây cốt truyện rất dễ dàng,

library(gtable) 
g <- ggplotGrob(p) 

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

các trục, tuy nhiên, cần được chăm sóc hơn vì người ta phải đảo ngược vị trí của các dấu tick và nhãn. Bạn có lẽ có thể bắt đầu với điều này,

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: dựa trên trên, một "hoàn thành" giải pháp có thể là

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

(với hãy cẩn thận rõ ràng)

+1

kohske xuất bản một số thủ thuật cho các trục: http://rpubs.com/kohske/dual_axis_in_ggplot2 – baptiste

+0

Nếu tôi sử dụng '" strip_t "' và sau đó chạy 'dải' tôi nhận được đầu ra' TableGrob (6 x 5) "bố trí": 0 grobs'. Đây có phải là hiệu ứng dự định không? Tôi hỏi vì tôi cũng nhận được một lỗi trên đầu ra cuối cùng, 'Lỗi trong mmm wesmantooth

+1

bạn nên có 5 grobs trong gtable đó, đảm bảo 'p' là cốt truyện của bạn được cập nhật để bao gồm dòng thứ hai (' facet_wrap'). Tôi đã cập nhật mã để xử lý lỗi khác. – baptiste

Các vấn đề liên quan