2012-02-03 44 views
6

Tôi muốn tạo chú thích cho biểu đồ venn venneuler. Điều này nên thẳng về phía trước vì hàm venneuler trả về các màu được sử dụng cho bàn điều khiển. Các màu có giá trị từ 0 đến 1. Tôi muốn biết cách chuyển các giá trị số được lưu trữ bằng màu $ thành thứ mà tôi có thể sử dụng để điền vào đối số điền trong chú giải.biểu đồ huyền thoại venn trong venneuler

Tôi đã thử điều này bên dưới bằng cách sử dụng $ màu được trích xuất từ ​​venneuler và lập chỉ mục từ màu(). Tôi biết điều này là không chính xác bởi vì màu sắc() được lập chỉ mục với các giá trị khoảng thời gian nhưng đặt nó vào để hiển thị những gì tôi muốn.

set.seed(20) 
x <- matrix(sample(0:1, 100, replace = TRUE), 10, 10) 
colnames(x) <- LETTERS[1:10] 
rownames(x) <- letters[1:10] 

require(venneuler) 
y <- venneuler(x) 
plot(y) 

y$colors 

legend(.05, .9, legend = colnames(x), fill = colors()[y$colors]) 

Trả lời

8

Bằng cách xem xét kỹ plot.VennDiagram và giá trị mặc định của nó bạn có thể thấy nó chuyển đổi các con số trong y$colors để RGB chuỗi màu sắc. (Hãy thử getAnywhere("plot.VennDiagram") để có giao diện.)

Ở đây tôi đã thu thập hai bit mã đã xử lý màu (trong trường hợp của bạn) thành một hàm duy nhất sẽ thực hiện chuyển đổi cho bạn. Các vị trí của huyền thoại có thể có thể được cải thiện, nhưng đó là một vấn đề khác ...

col.fn <- function(col, alpha=0.3) { 
    col<- hcl(col * 360, 130, 60) 
    col <- col2rgb(col)/255 
    col <- rgb(col[1, ], col[2, ], col[3, ], alpha) 
    col 
} 

COL <- col.fn(y$colors) 
# The original order of columns in x is jumbled in the object returned 
# by venneuler. This code is needed to put the colors and labels back 
# in the original order (here alphabetical). 
LABS <- y$labels 
id <- match(colnames(x), LABS) 

plot(y) 
legend(.05, .9, legend = LABS[id], fill = COL[id], x="topleft") 

enter image description here

+0

O'Brian Đó là hoàn hảo. –

+0

Tôi đã sử dụng 'id <- match (tên (y $ màu sắc, LAB))' thay thế –

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