2015-06-04 16 views
9

Tôi đã ma trận số 4x4 sau có chứa các số 0-4:Chuyển đổi một Matrix Số đến một Matrix Màu R

0 1 0 3 
3 2 1 4 
4 1 0 2 
3 3 0 1 

Tôi muốn hiểu làm thế nào để chuyển đổi số ma trận vào một ma trận màu bằng cách sử dụng lựa chọn màu sắc và kích thước hình vuông cụ thể (chiều dài x chiều rộng) sử dụng R. Để rõ ràng, tôi xác định ma trận màu làm hình bằng các ô vuông màu để biểu diễn các giá trị cụ thể theo định hướng ma trận. Một ví dụ 4x4 từ một chương trình khác sau:

enter image description here

tôi sẽ phải gán mã màu để các con số, ví dụ:

0 = FFFFFF 
1 = 99FF66 
2 = 66FF33 
3 = 33CC00 
4 = 009900 

Nhưng tôi không biết bắt đầu từ đâu đặt này lại với nhau . Tôi tưởng tượng tôi cũng sẽ phải xác định kích thước cho ô vuông màu.

Mục tiêu của tôi là có thể nhập khung dữ liệu vào R với tối đa 10 giá trị bằng số và tạo các biểu đồ màu này cho ma trận lớn hơn 20x20.

Trả lời

10

Dưới đây là những gì tôi sẽ làm gì:

d<-read.table(text=" 
0 1 0 3 
3 2 1 4 
4 1 0 2 
3 3 0 1") 

cols <- c(
'0' = "#FFFFFF", 
'1' = "#99FF66", 
'2' = "#66FF33", 
'3' = "#33CC00", 
'4' = "#009900" 
) 
# the names aren't necessary here. 

image(1:nrow(d), 1:ncol(d), as.matrix(d), col=cols) 

enter image description here

Nếu bạn muốn cho các định hướng đến thể khác nhau, bạn có thể rotate the matrix:

image(1:nrow(d), 1:ncol(d), t(apply(d, 2, rev)), col=cols) 

Để thoát khỏi tất cả văn bản và đường viền, bạn có thể thử:

image(1:nrow(d), 1:ncol(d), as.matrix(d), col=cols, 
    xaxt="n", yaxt="n", bty="n", xlab="", ylab="") 
+0

Tôi đã sử dụng mã sau đây để tạo ma trận màu không có văn bản và đường viền: 'hình ảnh (1: nrow (d), 1: ncol (d), t (áp dụng (d, 2, rev)), col = cols, xaxt = 'n', yaxt = 'n', ann = FALSE, bty = 'n') ' Nó hoạt động rất tốt! Vấn đề duy nhất tôi đang gặp bây giờ là các hình vuông xuất hiện một hình chữ nhật nhỏ. Có cách nào để khóa tỉ lệ khung hình sao cho các hình vuông màu vẫn hoàn toàn vuông? – Cameron

+3

@Cameron Bạn có thể thử thêm 'asp = 1' làm một trong các đối số cho' hình ảnh': 'hình ảnh (1: nrow (d), 1: ncol (d), t (áp dụng (d, 2, rev)) , col = cols, xaxt = 'n', yaxt = 'n', ann = FALSE, bty = 'n', asp = 1) '. – Jota

+1

Hoặc mở một cửa sổ mới với kích thước vuông (ví dụ: 'cửa sổ (chiều rộng = 6, chiều cao = 6)') và sau đó đặt lề như nhau trên mỗi cạnh 'par (mar = c (1,1,1,1)) ' – thelatemail

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