2016-07-26 15 views
0

Ich habe eine data.frame, die ich gerne edcf Linien zeichnen würde. Es gibt ungefähr 96 Pos ecdf-Zeilen und 96 Neg-ecdf-Zeilen. Ich möchte die Pos-Linien schwarz und die negativen Linien rot färben. Ich möchte auch ein Maß an Transparenz oder eine durchschnittliche Linie hinzufügen, so dass es nicht überladen aussieht. Und vielleicht nur pos und neg in der Legende enthalten.Färbung ggplot2 Stat_ecdf Zeilen basierte Sample Trennzeichen

Code:

simplify <- function(x){ 
    temp = x[complete.cases(x),] 
    df.m = reshape2::melt(temp, id.vars = NULL) 
    df.m$XIST = sapply(strsplit(as.character(df.m$variable), "_", fixed=TRUE), function(x) (x[1])) 
    return(df.m) 
} 
temp = simplify(X_chr) 
ggplot(temp, aes(value, colour=variable)) + stat_ecdf() + xlim(1,1000) + theme_bw() 

Temp etwa wie folgt aussieht:

> head(temp, 10) 
    variable value XIST 
1 pos_A1 0.00000 pos 
2 pos_A1 0.00000 pos 
3 pos_A1 0.00000 pos 
4 pos_A1 0.00000 pos 
5 pos_A1 0.00000 pos 
6 pos_A1 15.66911 pos 
7 pos_A1 0.00000 pos 
8 pos_A1 0.00000 pos 
9 pos_A1 0.00000 pos 
10 pos_A1 0.00000 pos 

> tail(temp, 10) 
     variable  value XIST 
210999 neg_H9 0.000000 neg 
211000 neg_H9 0.000000 neg 
211001 neg_H9 0.000000 neg 
211002 neg_H9 0.000000 neg 
211003 neg_H9 0.000000 neg 
211004 neg_H9 4.466276 neg 
211005 neg_H9 0.000000 neg 
211006 neg_H9 0.000000 neg 
211007 neg_H9 0.000000 neg 
211008 neg_H9 30.033764 neg 

Produziert:

enter image description here

+0

Sie diese Frage aus, indem Sie das Häkchen neben meiner Antwort schließen kann. – shayaa

Antwort

1

Das nächste Mal bitte einen reproducible example schreiben.

Sie müssen nur eine benutzerdefinierte Legende mit scale_color_manual angeben.

df <- reshape2::melt(replicate(10,rnorm(100)^2)) 
df$Var2 <- paste0(c(rep("pos", 500), 
        rep("neg", 500)), 
        df$Var2) 
ggplot(df, aes(x = value, colour=Var2)) + stat_ecdf() + 
    xlim(0,3) + theme_bw() + 
    scale_color_manual(label = stringr::str_sub(unique(df$Var2),1,3), 
        values = c(rep('red',5), rep("blue",5))) 

enter image description here

Wenn Sie die vollständigen Variablennamen ersetzen wollen nur den entsprechenden Code mit

scale_color_manual(label = unique(df$Var2), 
        values = c(rep('red',5), rep("blue",5))) 

Was Ihre letzte Frage können Sie manuelle Legenden wie folgt angeben. Ich habe die Größe von df erhöht, weil Sie auf das Problem stoßen, das Sie mit vielen Namen im Titel angegeben haben.

df <- reshape2::melt(replicate(100,rnorm(100)^2)) 
df$Var2 <- paste0(c(rep("pos", 500), 
        rep("neg", 500)), 
        df$Var2) 
ggplot(df, aes(x = value, group=Var2, 
       color = c(rep('red',5e3), rep("blue",5e3)))) + 
     stat_ecdf() + 
    xlim(0,3) + theme_bw() + 
    scale_colour_manual("+ or -", 
         values = c("red", "blue"), 
         labels = c("pos", "neg")) 

enter image description here