2014-06-20 19 views
15

HỎINhững hiểm họa của việc sắp xếp lô trong ggplot

Làm thế nào để bạn kết hợp lô riêng biệt (ggplot2), với khác nhau trục y và chiều cao cốt truyện khác nhau, tuy nhiên vẫn giữ sự liên kết?

CHI TIẾT

Khi kết hợp lô với grid.arrange (method1), với các đơn vị y-axis khác nhau, họ không sắp xếp. Một cách xung quanh việc này là sử dụng gtable (phương pháp 2), nhưng tôi không thể điều chỉnh độ cao tương đối của các ô.

VÍ DỤ

require(ggplot2) 

#Make two plots, with different y axis 
    x = c(1, 5) 
    y= c(.1, .4) 
    data1<-data.frame(x,y) 
    top<- 
    ggplot(data1, aes(x=x, y=y))+ 
    geom_line() 

    x = c(1, 5) 
    y= c(100000, 400000) 
    data2<-data.frame(x,y) 
    bottom<- 
    ggplot(data2, aes(x=x, y=y))+ 
    geom_line() 


# Method 1 - Grid Extra 
    require(gridExtra) 
    grid.arrange(top, bottom, heights=c(.6,.3)) 

Phương pháp 1 kết quả trong âm mưu này, đó là lệch do các nhãn trục dài y khác nhau:

enter image description here

#Method 2 - gtable 
    require(gtable) 
    #Extract Grobs 
    g1<-ggplotGrob(top) 
    g2<-ggplotGrob(bottom) 
    #Bind the tables 
    g<-gtable:::rbind_gtable(g1, g2, "first") 
    #Remove a row between the plots 
    g <- gtable_add_rows(g, unit(-1,"cm"), pos=nrow(g1)) 
    #draw 
    grid.newpage() 
    grid.draw(g) 

Phương pháp 2 kết quả trong việc sắp xếp âm mưu, nhưng tôi không thể điều chỉnh chiều cao của mỗi ô. enter image description here

THANKS!

+1

[** Điều này có thể giúp **] (http://stackoverflow.com/a/16368413/1478381) –

Trả lời

17

Trong gtable bạn g, bạn có thể thiết lập những đỉnh cao bảng điều khiển tương đối,

require(gtable) 
g1<-ggplotGrob(top) 
g2<-ggplotGrob(bottom) 
g<-gtable:::rbind_gtable(g1, g2, "first") 
panels <- g$layout$t[grep("panel", g$layout$name)] 
g$heights[panels] <- unit(c(1,2), "null") 

grid.newpage() 
grid.draw(g) 
+0

trình kết quả hoàn hảo và tốt hơn nhiều so với phương thức grid.arrange. Cảm ơn. – wab

+0

Cảm ơn câu trả lời tuyệt vời! Nhưng có lẽ một cái gì đó thay đổi trong bản cập nhật của lưới điện, nhưng bây giờ (phiên bản 3.3.0) cho điều này để làm việc dòng thứ hai phải là: 'g $ heights [panels] <- đơn vị (c (2,1)," null ")' –

+0

@RNoob chính xác, mọi thứ đã thay đổi ở cấp độ đó trong cả lưới và ggplot2 – baptiste

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