2013-01-16 20 views
13

मैं एक dataframe a तीन के साथ कॉलम:रंग एक बिंदु और ggplot2 में एक एनोटेशन जोड़ें?

GeneName, Index1, Index2

मैं इस

ggplot(a, aes(log10(Index1+1), Index2)) +geom_point(alpha=1/5) 

की तरह एक scatterplot आकर्षित तो मैं एक बिंदु है, जिसका GeneName"G1" है रंग और जोड़ना चाहते हैं उस बिंदु के पास एक टेक्स्ट बॉक्स, ऐसा करने का सबसे आसान तरीका क्या हो सकता है?

उत्तर

17

ऐसा कुछ काम करना चाहिए। आपको और y के साथ geom_text() पर तर्कों के साथ गड़बड़ करने की आवश्यकता हो सकती है।

library(ggplot2) 

highlight.gene <- "G1" 

set.seed(23456) 
a <- data.frame(GeneName = paste("G", 1:10, sep = ""), 
        Index1 = runif(10, 100, 200), 
        Index2 = runif(10, 100, 150)) 

a$highlight <- ifelse(a$GeneName == highlight.gene, "highlight", "normal") 
textdf <- a[a$GeneName == highlight.gene, ] 
mycolours <- c("highlight" = "red", "normal" = "grey50") 

a 
textdf 

ggplot(data = a, aes(x = Index1, y = Index2)) + 
    geom_point(size = 3, aes(colour = highlight)) + 
    scale_color_manual("Status", values = mycolours) + 
    geom_text(data = textdf, aes(x = Index1 * 1.05, y = Index2, label = "my label")) + 
    theme(legend.position = "none") + 
    theme() 

screenshot

+1

@Arun हाँ, निश्चित रूप से आप कर सकते थे और एक सही मायने में कम से कम उदाहरण के लिए पर्याप्त हो गया होता है कि के लिए। मैं डेटा फ्रेम का उपयोग करना चाहता था क्योंकि यह कई लेबलों (जैसे अंक जी 1 और जी 7) के लिए आसानी से विस्तार योग्य है। लेकिन 'एनोटेट' की याद दिलाना अच्छा है। – SlowLearner

37

आप एक सबसेट सिर्फ उस बिंदु युक्त बना सकते हैं और फिर साजिश में जोड़ें:

# create the subset 
g1 <- subset(a, GeneName == "G1") 

# plot the data 
ggplot(a, aes(log10(Index1+1), Index2)) + geom_point(alpha=1/5) + # this is the base plot 
    geom_point(data=g1, colour="red") + # this adds a red point 
    geom_text(data=g1, label="G1", vjust=1) # this adds a label for the red point 

नोट: के बाद से हर कोई रखता है ऊपर से मतदान के इस सवाल का, मैंने सोचा कि मैं इसे पढ़ने में आसान बनाने जाएगा।