Tôi đang tạo hình ảnh bằng cách sử dụng facet_grid
để tạo thành một biến phân loại trên trục y. Tôi quyết định không sử dụng facet_wrap
vì tôi cần space = 'free'
và labeller = label_parsed
. Nhãn của tôi dài và tôi có một chú giải ở bên phải vì vậy tôi muốn di chuyển các nhãn từ bên phải của bảng điều khiển lên đầu bảng điều khiển.ggplot2: Sử dụng gtable để di chuyển các nhãn dải lên đầu bảng cho facet_grid
Dưới đây là ví dụ để hiển thị nơi tôi bị kẹt.
library(ggplot2)
library(gtable)
mt <- ggplot(mpg, aes(x = cty, y = model)) + geom_point() +
facet_grid(manufacturer ~ ., scales = 'free', space = 'free') +
theme_minimal() +
theme(panel.margin = unit(0.5, 'lines'), strip.text.y = element_text(angle = 0))
Bây giờ tôi muốn di chuyển văn bản dải từ bên phải của mỗi bảng để phía trên cùng của mỗi bảng. Tôi có thể lưu trữ các grobs cho nhãn dải và loại bỏ chúng khỏi những âm mưu:
grob <- ggplotGrob(mt)
strips.y <- gtable_filter(grob, 'strip-right')
grob2 <- grob[,-5]
Nhưng bây giờ tôi bị mắc kẹt khi nói đến rbind
-ing các grobs trở lại để các nhãn đi đến phía trên cùng của tấm.
Một giải pháp khác có thể là sử dụng facet_wrap
và sau đó kích thước lại các ô as discussed in another question, nhưng trong trường hợp đó, tôi sẽ phải thay đổi nhãn theo cách thủ công trên các mặt vì không có labeller = label_parsed
cho facet_wrap
.
Tôi muốn đánh giá cao các đề xuất về một trong hai cách tiếp cận!
Cảm ơn bạn đã đọc,
Tom
Điều này thật tuyệt vời, cảm ơn bạn.Tôi vừa thực hiện một vài thay đổi nhỏ cho phương pháp đầu tiên của bạn để tôi có thể biến nó thành một hàm: 'cho (i trong 1: length (strips $ t)) gt = gtable_add_grob (gt, stripText $ grobs [[i ]], t = các bảng $ t [i] -1, l = 4, r = 4) ' -> ' cho (i trong 1: độ dài (dải $ t)) gt = gtable_add_grob (gt, stripText $ grobs [[i]], t = tấm $ t [i] -1, l = min (bảng $ l), r = tối đa (bảng $ r)) ' để chèn các rãnh mới và ' gt = gt [ , -5] ' -> ' gt <- gt [, - c (min (dải $ l), tối đa (dải $ r))] ' để xóa các dải cũ. –