2010-09-08 48 views
7

Tôi cần vẽ và hiển thị một số hình ảnh jpeg trong một màn hình kết hợp đơn (hoặc canvas?). Ví dụ: giả sử tôi có hình ảnh {a, b, c, d} .jpg, mỗi kích thước khác nhau và tôi muốn vẽ chúng trên một trang trong lưới 2x2. Nó cũng sẽ tốt đẹp để có thể thiết lập một tiêu đề cho mỗi subplot.Vẽ một số hình ảnh jpeg trong một màn hình đơn

Tôi đã tìm kiếm một giải pháp kỹ lưỡng, nhưng không thể tìm hiểu cách thực hiện, vì vậy mọi ý tưởng sẽ thực sự hữu ích. Tôi tốt nhất nên sử dụng một giải pháp dựa trên gói EBImage.

+0

Cảm ơn câu trả lời. Vấn đề thực sự là xử lý dữ liệu hình ảnh, với gói vành tôi nhận được dữ liệu hình ảnh từ gói EBImage để hiển thị tốt hơn. Tôi vẫn nhận được lợi nhuận cực kỳ lớn khi tổ chức các lô với tham số mfrow(), mặc dù tôi đã chơi rất nhiều với các tham số oma và mar. – user442446

Trả lời

4

Có hai cách làm thế nào để sắp xếp một vài âm mưu với các chức năng cơ sở đồ thị, cụ thể là par(mfrow=c(rows,columns)) (thay rowscolumns với số nguyên) và layout(mat) nơi mat là một ma trận như matrix(c(1,2,3,4)).
Để biết thêm thông tin, hãy xem ?par, ?layout và đặc biệt là Quick-R: Combining Plots.

Tuy nhiên, khi câu hỏi của bạn là về hình ảnh, tôi không biết liệu nó có giúp ích gì cho bạn hay không. Nếu không, tôi xin lỗi vì đã giải thích sai câu hỏi của bạn.

2

Bổ sung vào giải pháp Henriks, một cách khá thuận lợi của việc sử dụng mệnh() chức năng là:

jpeg(filename="somefile.jpg") 
op <- par(mfrow=c(2,2) 
#plot the plots you want 
par(op) 
dev.off() 

Bằng cách này, bạn đặt các thông số trở về trạng thái cũ sau khi bạn chạy các mã. Hãy nhận thức được thực tế điều này là không đúng nếu một trong những lô đưa ra một lỗi.

Hãy nhận biết thực tế là R luôn đặt các ô theo cùng thứ tự. Sử dụng mfrow sẽ điền vào hàng lưới theo hàng. Nếu bạn sử dụng mfcol thay vì mfrow trong mã, bạn điền vào cột theo cột.

Bố cục là một câu chuyện hoàn toàn khác. Ở đây bạn có thể xác định thứ tự các ô cần phải được đặt. Vì vậy, layout(matrix(1:4,nrow=2) cũng giống như par(mfcol=c(2,2)). Nhưng layout(matrix(c(1,4,3,2),ncol=2)) đặt âm mưu đầu tiên lefttop, tiếp theo là rightbottom, một bên phải thứ ba và cuối cùng là leftbottom.

Mỗi ô là hoàn toàn độc lập, vì vậy các tiêu đề bạn chỉ định bằng cách sử dụng tùy chọn main cũng được in. Nếu bạn muốn có sự linh hoạt hơn, bạn nên nhìn vào các ô lưới.

+0

Thao tác này không hoạt động với chức năng 'hình ảnh', ghi đè hình đầy đủ. – Quantum7

+0

@ Quantum7 Tôi đã thử nó với 'hình ảnh()', và nó hoạt động hoàn hảo trong trường hợp của tôi. –

+1

Bạn hoàn toàn đúng. Tôi đã sử dụng gói Ma trận cho ma trận thưa thớt, dường như ghi đè chức năng hình ảnh theo cách bỏ qua mfrows. Hình ảnh cơ sở hoạt động tốt. – Quantum7

1

Nếu bạn không muốn hình ảnh trong lưới thông thường (các kích thước khác nhau có thể ngụ ý điều này), thì bạn có thể xem xét sử dụng chức năng subplot từ gói TeachingDemos. Ví dụ cuối cùng trong trang trợ giúp hiển thị bằng cách sử dụng hình ảnh làm ký tự vẽ, chỉ cần sửa đổi để sử dụng các hình ảnh và kích thước/vị trí khác nhau của bạn.

Chức năng ms.image (cùng một gói) được sử dụng với my.symbols là một khả năng khác.

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