2012-10-21 16 views
39

मेरे पास 3 कॉलम मैट्रिक्स है; प्लॉट कॉलम 1 और कॉलम 2 मानों के आधार पर अंक द्वारा बनाए जाते हैं, लेकिन कॉलम 2 (6 अलग-अलग समूहों) के आधार पर रंगीन होते हैं। मैं सभी बिंदुओं को सफलतापूर्वक साजिश कर सकता हूं, हालांकि, आखिरी साजिश समूह (समूह 6) जिसे रंग बैंगनी सौंपा गया था, अन्य समूहों के भूखंडों को मुखौटा करता है। क्या साजिश बिंदु अधिक पारदर्शी बनाने का कोई तरीका है?स्कैटरप्लॉट में साजिश बिंदु बनाने के लिए कोई तरीका आर में अधिक पारदर्शी है?

s <- read.table("/.../parse-output.txt", sep="\t") 
dim(s) 
[1] 67124  3 
x <- s[,1] 
y <- s[,2] 
z <- s[,3] 
cols <- cut(z, 6, labels = c("pink", "red", "yellow", "blue", "green", "purple")) 
plot(x, y, main= "Fragment recruitment plot - FR-HIT", ylab = "Percent identity", xlab = "Base pair position", col = as.character(cols), pch=16) 

उत्तर

56

अन्यथा, आप पैकेज scales में समारोह alpha है, जिसमें आप कर सकते हैं सीधे इनपुट रंग (भले ही वे अपने उदाहरण के रूप में कारक हैं) के अपने वेक्टर:

library(scales) 
cols <- cut(z, 6, labels = c("pink", "red", "yellow", "blue", "green", "purple")) 
plot(x, y, main= "Fragment recruitment plot - FR-HIT", 
    ylab = "Percent identity", xlab = "Base pair position", 
    col = alpha(cols, 0.5), pch=16) 
# For an alpha of 0.5, i. e. a transparency of 50%. 
27

आप कुछ मतलब यह ?: तरह

plot(1:10, col=rgb(1, 0, 0, 0.5), pch=16) 
points((1:10)+0.05, col=rgb(0, 0, 1, 0.5), pch=16) 

कृपया जानकारी के लिए ?rgb दिखाई दे रही है।

+0

यह मैं केवल अंक के एक समूह के लिए rgb सेटिंग्स जोड़ सकते हैं लगता है। मैं इसे 1 से अधिक समूह में कैसे लागू कर सकता हूं? – Steve

+0

उदाहरण: दो अलग-अलग रंग: 'अंक ((1:10) +0.05, col = rgb (सी (0, 0), सी (1, 0), सी (0, 1), प्रतिनिधि (0.5, 2)) , पीएच = 16) '(आप 6 अलग-अलग रंगों के लिए एक ही दृष्टिकोण का उपयोग कर सकते हैं) – sgibb

10

यदि आप ggplot2 का उपयोग करने का निर्णय लेते हैं, तो आप alpha तर्क का उपयोग कर ओवरलैपिंग पॉइंट की पारदर्शिता सेट कर सकते हैं।

उदा।

library(ggplot2) 
ggplot(diamonds, aes(carat, price)) + geom_point(alpha = 1/40) 
15

पारदर्शिता में कोडित किया जा सकता है रंग तर्क भी। यह केवल दो और हेक्स संख्या 0 (पूरी तरह से पारदर्शी) और 255 (पूरी तरह से दृश्यमान) के बीच एक पारदर्शिता कोडिंग है। मैंने एक बार रंगीन वेक्टर में पारदर्शिता जोड़ने के लिए इस समारोह को लिखा था, शायद यह उपयोगी है?

addTrans <- function(color,trans) 
{ 
    # This function adds transparancy to a color. 
    # Define transparancy with an integer between 0 and 255 
    # 0 being fully transparant and 255 being fully visable 
    # Works with either color and trans a vector of equal length, 
    # or one of the two of length 1. 

    if (length(color)!=length(trans)&!any(c(length(color),length(trans))==1)) stop("Vector lengths not correct") 
    if (length(color)==1 & length(trans)>1) color <- rep(color,length(trans)) 
    if (length(trans)==1 & length(color)>1) trans <- rep(trans,length(color)) 

    num2hex <- function(x) 
    { 
    hex <- unlist(strsplit("ABCDEF",split="")) 
    return(paste(hex[(x-x%%16)/16+1],hex[x%%16+1],sep="")) 
    } 
    rgb <- rbind(col2rgb(color),trans) 
    res <- paste("#",apply(apply(rgb,2,num2hex),2,paste,collapse=""),sep="") 
    return(res) 
} 

कुछ उदाहरण:

जैसे:

cols <- sample(c("red","green","pink"),100,TRUE) 

# Fully visable: 
plot(rnorm(100),rnorm(100),col=cols,pch=16,cex=4) 

# Somewhat transparant: 
plot(rnorm(100),rnorm(100),col=addTrans(cols,200),pch=16,cex=4) 

# Very transparant: 
plot(rnorm(100),rnorm(100),col=addTrans(cols,100),pch=16,cex=4) 
+11

मुझे लगता है कि बेस आर (' grDevices' पैकेज) में 'एडजस्टलर' कुछ ऐसा कुछ करता है, हालांकि यह पूरी तरह से वेक्टरिज्ड नहीं हो सकता है आपका। –

+0

हाय, सच्चा! उत्तर "हाइजैक" के लिए खेद है :-)। मेरे पास एक त्वरित सवाल है: वक्र के केंद्र से दूर लेबल (यानी लोडिंग) को स्थानांतरित करने के लिए 'semplot' और/या 'qgraph' [उत्कृष्ट संकुल, वैसे!] में कोई तरीका है? वक्र के साथ नहीं, बल्कि एक "लंबवत" भावना में दूर। मैं निम्न स्तर के लाटेक्स मार्ग पर जाने का सहारा लेना चाहता हूं। धन्यवाद! –

+0

धन्यवाद! अभी नहीं, आप किनारे पर किनारे पर खींचे जाने पर नियंत्रण करने के लिए केवल edge.label.position तर्क का उपयोग कर सकते हैं। मैं इसे लागू करने की कोशिश करूंगा! –

4

आप हेक्स कोड का उपयोग कर रहे हैं, तो आप अल्फ़ा चैनल का प्रतिनिधित्व करने के कोड के अंत में दो और अंक जोड़ सकते हैं आधा पारदर्शिता लाल:

plot(1:100, main="Example of Plot With Transparency") 
lines(1:100 + sin(1:100*2*pi/(20)), col='#FF000088', lwd=4) 
mtext("use `col='#FF000088'` for the lines() function") 

example plot of color with transparency

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