2017-09-08 3 views
0

Ich versuche ein Vulkan-Grundstück mit ggplot2 zu plotten. Ich möchte drei verschiedenen Farben haben, basierend auf den folgenden Kriterien:Volcano Plot - Farben

  1. QWERT < 0,05 und meth.diff> 25% = Red
  2. QWERT < 0,05 und meth.diff < -25% (minus 25%) = Grün
  3. QWERT < 0,05 und meth.diff zwischen +25 und -25 = Grau

ähnliche Fragen hier gefragt haben, bevor und ich versuchte, sie zu folgen, aber halte Fehlermeldungen bekommen. Irgendwelche Vorschläge würden sehr geschätzt.

Hier ist die Rohdatendatei:

chr start end strand  pvalue  qvalue meth.diff 
16 chr1 37801 38100  * 2.246550e-05 4.487042e-04 -36.485769 
17 chr1 38101 38400  * 5.699781e-06 1.376471e-04 55.755181 
29 chr1 49501 49800  * 1.453030e-18 2.442391e-16 -18.381131 
35 chr1 62701 63000  * 5.547627e-03 3.686303e-02 -31.871711 
54 chr1 122401 122700  * 3.917230e-03 2.845933e-02 63.443366 
57 chr1 130201 130500  * 8.941091e-04 9.253737e-03 -8.347167 

myDiff1p$threshold = factor(ifelse(myDiff1p$meth.diff>25 & myDiff1p$qvalue< 0.05, 1, 
    ifelse(myDiff1p$meth.diff<-25 & myDiff1p$qvalue< 0.05,-1,0))) 

ggplot(data=myDiff1p, aes(x=meth.diff, y=-log10(qvalue))) + 
    geom_point(aes(color=myDiff1p$threshold), alpha=0.4, size=1.75)+ 
    geom_vline(xintercept=c(-25,25), color="red", alpha=1.0)+ 
    geom_hline(yintercept=2, color="blue", alpha=1.0)+ 
    xlab("Differential Methylation")+ 
    ylab("-log10 (qvalue)")+ 
    theme_bw()+ 
    xlim(c(-75, 75)) + 
    ylim(c(0, 300)) 

Error: Discrete value supplied to continuous scale

Antwort

2

Sie haben eine fast unmerklich Fehler in dieser Zeile:

myDiff1p$threshold = factor(ifelse(myDiff1p$meth.diff>25 & myDiff1p$qvalue< 0.05, 1, 
    ifelse(myDiff1p$meth.diff<-25 & myDiff1p$qvalue< 0.05,-1,0))) 

Da es in myDiff1p$meth.diff<-25 kein Platz mehr ist, als myDiff1p$meth.diff <- 25 interpretiert ist eher als myDiff1p$meth.diff < -25. Als Ergebnis wurde meth.diff durcheinander gebracht.

Hier ist, was ich empfehlen:

library(dplyr) 

myDiff1p <- myDiff1p %>% 
    mutate(threshold = factor(case_when(meth.diff > 25 & qvalue < 0.05 ~ "cond1", 
             meth.diff < -25 & qvalue < 0.05 ~ "cond2", 
             TRUE ~ "cond3"))) 

ggplot(data=myDiff1p, aes(x=meth.diff, y=-log10(qvalue))) + 
    geom_point(aes(color=myDiff1p$threshold), alpha=0.4, size=1.75)+ 
    geom_vline(xintercept=c(-25,25), color="red", alpha=1.0)+ 
    geom_hline(yintercept=2, color="blue", alpha=1.0)+ 
    xlab("Differential Methylation")+ 
    ylab("-log10 (qvalue)")+ 
    theme_bw()+ 
    xlim(c(-75, 75)) + 
    ylim(c(0, 300)) + 
    scale_color_manual(name = "Threshold", 
        values = c("cond1" = "red", "cond2" = "green", "cond3" = "grey")) 

plot

ich den Schwellenfaktor durch die Bedingung gekennzeichnet, & die Zuordnung zwischen Bedingung & Farbe in einem benannten Vektor in scale_color_manual() definiert. Auch eine Frage der persönlichen Vorliebe, aber ich denke, dplyr::case_when() sieht besser aus als verschachtelt ifelse() Aussagen.

+0

Ich danke Ihnen beiden für die Bearbeitung meines Beitrags und die Beantwortung meiner Frage. Dies ist mein erster Beitrag hier und ich habe die Anweisungen nicht sorgfältig durchgearbeitet. – Neel

Verwandte Themen