2012-12-04 72 views
6

Tôi sắp xếp các ô được tạo bởi ggplot2. Tôi phải sử dụng in để in ra các ô và grid.draw để hiển thị chú giải.Cách thay đổi vị trí của grid.draw

Sample Code:

p0 <- ggplot(data = iris, geom = 'blank', 
     aes(y = Petal.Width, x = Petal.Length, color = Species)) + geom_point() + 
     theme(axis.title.x = element_blank(), 
      axis.title.y = element_blank(), 
      legend.position = "none") 

p1 <- ggplot(data = iris, geom = 'blank', 
     aes(y = Petal.Length, x = Petal.Width, color = Species)) + geom_point() + 
     theme(axis.title.x = element_blank(), 
      axis.title.y = element_blank(), 
      legend.position = "none") 

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]] 
    return(legend) 
} 

p <- ggplot(data = iris, geom = 'blank', 
     aes(y = Petal.Width, x = Petal.Length, color = Species)) + geom_point() 


grid.newpage() 
pushViewport(viewport(layout = grid.layout(2, 4))) 
print(p0,vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) 
print(p0,vp = viewport(layout.pos.row = 1, layout.pos.col = 2:3)) 
print(p1,vp = viewport(layout.pos.row = 2, layout.pos.col = 2:3)) 
grid.text("This is x label",gp=gpar(fontsize = 14), vjust = 11, 
      vp = viewport(layout.pos.row = 2, layout.pos.col = 2)) 
grid.text("This is y label",gp=gpar(fontsize = 14), vjust = -11, rot = 90, 
      ![enter image description here][1]vp = viewport(layout.pos.row = 2, layout.pos.col = 2)) 

grid.draw(g_legend(p)) 

Tôi muốn đưa huyền thoại ở cột thứ tư. Tôi làm nó như thế nào? Cảm ơn.

+3

Tôi đã cuộn lại câu hỏi của bạn, vì lần chỉnh sửa cuối cùng của bạn hỏi một câu hỏi mới. – Andrie

Trả lời

9

enter image description here sử dụng gridExtra

  library(gridExtra) 
     grid.arrange(p0 , p1, g_legend(p), ncol=3, 
     heights=c(10, 1),widths =c(1,2,1) ,as.table =TRUE) 
+0

Cảm ơn. Có cách nào để dính vào pushviewpoint? Tôi sắp xếp nhiều ô và tôi cần đặt độ dài và vị trí cho từng ô và cũng cần sử dụng grid.text để thêm văn bản vào ô. – Autumn

+0

bạn không hài lòng với câu trả lời này? nếu là trường hợp xác nhận nó trước và sau đó nó là tốt hơn để hỏi một câu hỏi mới, nơi bạn chi tiết bạn yêu cầu (nhiều lô, gtext, ..) – agstudy

+0

Tôi đã chỉnh sửa mã mẫu và âm mưu. Bạn có thể giúp tôi với nó? – Autumn

2

Bạn có thể tự thay đổi các tọa độ x và y trong đối tượng TableGrob. Ví dụ, bạn có thể làm như sau để xác định vị trí các huyền thoại ở trung tâm của cốt truyện:

leg <- g_legend(p) 
leg$vp$x <- unit(.5, 'npc') 
leg$vp$y <- unit(.5, 'npc') 

Khi bạn gọi grid.draw (chân), nó sẽ được bố trí ở trung tâm. Sử dụng các giá trị khác nhau để đặt nó bất cứ nơi nào bạn muốn.

+1

Tôi nghĩ bạn có nghĩa là: chân $ vp $ x <- đơn vị (0,5, 'NPC') chân $ vp $ y <- đơn vị (0,5, 'NPC') và sau đó như bạn nói, grid.draw (chân) – maia

2

Trong lưới, ý tưởng sẽ được đẩy một khung nhìn mà bạn muốn vẽ,

pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 4)) 
grid.draw(g_legend(p)) 

hoặc, cách khác, chuyển nhượng các khung nhìn đến grob truyền thuyết,

leg = g_legend(p) 
leg$vp = viewport(layout.pos.row = 2, layout.pos.col = 4) 
grid.draw(leg) 
Các vấn đề liên quan