2012-10-09 41 views
7

Có cách nào để thêm bảng vào ô không. Giả sử rằng tôi có cốt truyện dưới đây:Thêm ma trận vào ô?

curve(dnorm, -3, +4) 

Bây giờ tôi muốn thêm một ma trận dưới cốt truyện:

testMat <- matrix(1:20, ncol = 5) 

Mục tiêu của tôi? Tôi đang viết một chức năng cốt truyện không chỉ tạo ra một âm mưu, nhưng nó cũng cho thấy một ma trận bao gồm cả thông tin mà tôi quan tâm bên dưới cốt truyện.

Vui lòng xem ảnh đính kèm để xem ý tôi là gì. Tôi thực sự đánh giá cao sự giúp đỡ của bạn.

enter image description here

+0

Nếu tôi có thể mặc trang phục Ed Tufte của mình một lúc: Biểu đồ phải tự đứng như một người cung cấp thông tin. Tôi khuyên bạn nên giữ riêng bảng giá trị dữ liệu (ví dụ: Phụ lục). Nếu không có gì khác, điều này làm cho nó dễ dàng hơn cho những người khác để trích xuất các con số ("sao chép và dán") để sử dụng tiếp theo. –

Trả lời

7

Có nhiều cách có lẽ tốt hơn để làm điều này, nhưng một lựa chọn có thể sử dụng một trong các gói "âm mưu" ma trận và khung dữ liệu, như "gplots" package.

Đây là một ví dụ rất trần (bạn có thể tùy chỉnh điều này để kiểm soát tốt hơn nhiều so với bố cục cuối cùng).

# Some sample data 
testMat <- matrix(1:20, ncol = 5) 
testMatDF <- as.data.frame(testMat) 
names(testMatDF) <- c("Hey there", "Column 2", 
         "Some * Symbols", "And^More", 
         "Final Column") 
rownames(testMatDF) <- paste("Group", 1:4) 

# Load the package 
library(gplots) 
# Set par for plotting a three-row plot 
par(mfrow = c(3, 1)) 
curve(dnorm, -3, +4) 
textplot(testMat) 
textplot(testMatDF) 

Kết quả:

enter image description here

Bạn cũng có thể sử dụng layout() thay vì par(mfrow...) nếu bạn muốn nhận được sáng tạo hơn một chút với các vị trí của lô của bạn. Ví dụ:

layout(matrix(c(1, 1, 2, 3, 3, 3), 
       2, 3, byrow = TRUE)) 
curve(dnorm, -3, +4) 
textplot(testMat) 
textplot(testMatDF) 

enter image description here

+0

hi @mrdwab, Tahnks cho câu trả lời của bạn. Tôi có một chút vấn đề với textplot(). Ma trận của tôi có 5 cột và nó chỉ hiển thị hai cột đầu tiên. Có anyway mà tôi có thể làm giảm không gian giữa các cột? – Sam

+0

@Sepehr, xem '? Textplot' và tìm' cmar' và 'rmar' để điều chỉnh khoảng cách cột và hàng. Tôi không chắc chắn lý do tại sao bạn có vấn đề bạn đã mô tả mà không thấy mẫu dữ liệu của bạn. Khác với khoảng cách cột, một lý do khác có thể là kích thước của khu vực âm mưu ban đầu của bạn; nếu cửa sổ lô quá nhỏ, một số dữ liệu có thể bị cắt. Hy vọng rằng sẽ giúp! – A5C1D2H2I1M1N2O1R2T1

+0

Tôi thực sự đánh giá cao sự giúp đỡ của bạn. – Sam

7

Gói plotrix cung cấp chức năng addtable2plot.

Ví dụ từ tập tin giúp đỡ:

library(plotrix) 
testdf<-data.frame(Before=c(10,7,5),During=c(8,6,2),After=c(5,3,4)) 
rownames(testdf)<-c("Red","Green","Blue") 
barp(testdf,main="Test addtable2plot",ylab="Value", 
    names.arg=colnames(testdf),col=2:4) 
# show most of the options 
addtable2plot(2,8,testdf,bty="o",display.rownames=TRUE,hlines=TRUE, 
       title="The table") 

Edit: Đặt bảng trong một âm mưu mới để đặt nó bên dưới âm mưu của mình.

library(plotrix) 

layout(matrix(c(1,2), 2, 1, byrow = TRUE), 
     widths=c(1,1), heights=c(2,1)) 


testdf<-data.frame(Before=c(10,7,5),During=c(8,6,2),After=c(5,3,4)) 
rownames(testdf)<-c("Red","Green","Blue") 
barp(testdf,main="Test addtable2plot",ylab="Value", 
    names.arg=colnames(testdf),col=2:4) 

plot.new() 
addtable2plot(0,0,testdf,bty="o",display.rownames=TRUE,hlines=TRUE, 
       title="The table") 
+0

Tôi cũng nhìn vào 'addtable2plot()', nhưng nó có vẻ rườm rà để định vị cái bàn mà tôi muốn. Có vẻ như phụ thuộc vào kích thước cửa sổ lô. Bạn có thể cập nhật câu trả lời của bạn với một ví dụ tương tự như những gì OP đang tìm kiếm (nói cách khác, trong đó bảng bên dưới cốt truyện thay vì trong cốt truyện)? – A5C1D2H2I1M1N2O1R2T1

+0

@mrdwab Tôi cho thấy một cách dễ hiểu làm thế nào để đạt được điều đó. – Roland

+0

tuyệt vời. Câu trả lời tốt hơn bây giờ. +1 – A5C1D2H2I1M1N2O1R2T1

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