2012-02-03 8 views
6

मैं एक venneuler वेन आरेख के लिए एक किंवदंती बनाना चाहता हूँ। यह सीधे आगे होना चाहिए क्योंकि समारोह venneuler कंसोल में इस्तेमाल रंग लौटता है। रंग 0 और 1 के बीच मान के हैं। मैं जानना चाहता हूं कि $ रंगों में संग्रहीत उन संख्यात्मक मानों को कैसे बदला जा सकता है जो मैं किंवदंती में भरने के तर्क को भरने के लिए उपयोग कर सकता हूं।venenduler में legend venn diagram

मैंने venneuler से निकाले गए $ रंगों का उपयोग करके और रंगों से अनुक्रमण() से नीचे इसका प्रयास किया है। मुझे पता है कि यह सही नहीं है क्योंकि रंग() को अंतराल मूल्यों के साथ अनुक्रमित किया गया है लेकिन यह दिखाने के लिए कि मैं क्या चाहता हूं उसे दिखाएं।

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]) 

उत्तर

8

plot.VennDiagram ध्यानपूर्वक पढ़ने और उसके चूक आप देख सकते हैं कि यह कैसे y$colors में संख्याओं रंग तार आरजीबी तक। (getAnywhere("plot.VennDiagram") को अपने आप को देखने के लिए प्रयास करें।)

यहां मैंने कोड के दो बिट एकत्र किए हैं जो रंगों (आपके मामले में) को एक ही फ़ंक्शन में संसाधित करते हैं जो आपके लिए रूपांतरण करेगा। कथा की स्थिति शायद सुधार किया जा सकता है, लेकिन यह एक और समस्या है ...

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

ओ'ब्रायन कि एकदम सही है। –

+0

मैंने 'आईडी <- मिलान (नाम (वाई $ रंग, एलएबी))' के बजाय –

संबंधित मुद्दे