2012-09-21 37 views
13

Tôi đang sử dụng lưới lpackage để đặt đồ thị của tôi mà tôi thực hiện với ggplot2:ggplot huyền thoại riêng biệt và cốt truyện

library(ggplot2) 
library(grid) 

Layout <- grid.layout(nrow = 4, ncol = 4, 
      widths = unit(1, "null"), 
      heights = unit(c(0.4, 0.8, 1.2, 1.2), c("null", "null", "null"))) 
grid.show.layout(Layout) 

plot1 = ggplot(diamonds, aes(clarity, fill = color)) + 
      geom_bar() + 
      facet_wrap(~cut, nrow = 1) 
print(plot1 + theme(legend.position = "none"), 
vp = viewport(layout.pos.row = 3, layout.pos.col = 1:4)) 

Vấn đề là tôi muốn đưa những âm mưu trên hàng thứ ba (3,1) - (3,4) và đặt chú giải ở vị trí (4,4). Thật không may, tôi thực sự không thể tìm ra cách để tạo ra một biến truyền thuyết. Tôi đã tìm kiếm trực tuyến và gần nhất mà tôi nhận được bằng cách sử dụng cũ hơn + opts(keep = "legend_box") nhưng điều đó đã không được chấp nhận.

older solution.

Trả lời

24

Bạn có thể lấy chú thích từ đối tượng grob của ggplot. Sau đó, bạn có thể sử dụng chức năng grid.arrange để định vị mọi thứ.

library(gridExtra) 
g_legend<-function(a.gplot){ 
    tmp <- ggplot_gtable(ggplot_build(a.gplot)) 
    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box") 
    legend <- tmp$grobs[[leg]] 
    legend 
} 

legend <- g_legend(plot1) 

grid.arrange(legend, plot1+ theme(legend.position = 'none'), 
    ncol=2, nrow=1, widths=c(1/6,5/6)) 

Có rất nhiều ví dụ trên web bằng chức năng g_legend.

HTH

+0

Cảm ơn vì điều đó. Tôi vẫn chưa có những thay đổi mới. –

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