2010-09-03 34 views
10

Tôi đang cố gắng xuất 6 hình ảnh thành một hình ảnh, trong bố cục 3x2. Tôi muốn đặt thêm không gian giữa hàng trên cùng và hai hàng dưới cùng. Điều này có thể sử dụng R? Tôi đã xem qua các tài liệu cho mệnh và âm mưu và dường như không thể tìm thấy một tùy chọn thích hợp.Thêm khoảng trắng thừa giữa một tập con của các ô

Dưới đây là một số mã ví dụ:

a = rnorm(100,100,10) 
b = rnorm(100,100,10) 

par(mfrow=c(3,2), oma=c(1,1,1,1), mar=c(2,2,2,2)) 
hist(a) 
hist(b) 
plot(a,b) 
plot(a,b) 
plot(a,b) 
plot(a,b) 

Đây là những gì mà mã đầu ra:


alt text


Dưới đây là những gì tôi muốn nó ra (Tôi đã sửa đổi hình ảnh này e trong trình soạn thảo bên ngoài). Lưu ý khoảng trống thừa giữa hàng trên cùng và hàng dưới cùng.


alt text


Trả lời

9

Chức năng layout() là bạn của bạn. Ví dụ: bạn có thể xác định ma trận ô

1 2 
3 4 
5 6 
7 8 

rồi đặt ô trống vào thứ ba và thứ tư. Hoặc chỉ cần dính vào sáu và gọi par để thêm khoảng cách thêm ở dưới cùng.

+1

Xin cảm ơn - bố cục() là mới đối với tôi. Một cái gì đó như thế này dường như làm những gì tôi muốn: a = bố trí (ma trận (c (1,2,0,0,3,4,5,6), 4,2, byrow = TRUE), width = c (1, 1), heights = c (4,1,4,4)) – chrisamiller

+2

Vâng, bố cục tuyệt vời và khá hữu ích. Trẻ em những ngày này nói về không có gì nhưng ggplot2 vì vậy nó có xu hướng bị lãng quên :) Tốt bắt lại 0 số không bỏ qua lô, và bạn có nó chính xác ngay với chiều rộng và chiều cao. –

8

tôi có thể nghĩ trong ba cách:

1) Sử dụng các thông số đồ họa mar để thiết lập âm mưu lề

Bạn có thể lấy lợi nhuận hiện tại với

currmar <- par()$mar 

Bạn có thể thiết lập lề mới với

par("mar"=c(5, 4, 4, 2)) 

với các số là dưới, trái, phía trên và lề bên phải (nhìn thấy ?par)

Bạn có thể thực hiện nhiều cuộc gọi đến par cho từng lô, vì vậy bạn có thể chỉ thay đổi lề dưới cho các ô trên cùng.

2) Sử dụng bố trí để tạo ra một mạng lưới không đồng đều bố trí (xem ?layout cho ví dụ)

3) Lưu cốt truyện trong .svg hoặc .pdf và sau đó sử dụng Inkscape (hoặc bất kỳ phần mềm bạn thích) để di chuyển các lô .

4

Tôi nghĩ rằng hãy đi với mar là cách tôi sẽ làm. Tuy nhiên, có vẻ như bạn muốn tất cả các ô giống nhau. Vì vậy, bạn cần phải có số tiền tương tự được đưa ra bởi mar trên mỗi lô trên và dưới.
Trong trường hợp của bạn người ta có thể sử dụng những con số sau đây:
1. hàng: par(mar=c(7,4,4,2))
2. hàng: par(mar=c(5,4,6,2))
3.hàng: par(mar=c(7,4,4,2))

Bằng cách này, tất cả các ô đều có cùng chiều cao. Modifie số đầu tiên và thứ ba trong một cách mà họ là như nhau cho mỗi lô để thực hiện điều này. Tuy nhiên, trên báo trước: Có một số khoảng trắng thừa bên dưới các ô ở hàng dưới cùng.

+0

Rất tốt. Tôi đã mã hóa giải pháp của mình bằng cách sử dụng layout(), nhưng điều này cũng đã hoạt động. Cảm ơn. – chrisamiller

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