2016-03-24 4 views
0

Weiterleiten von question.Kombinieren von geom_ribbon, wenn x ein Faktor ist

Ich kann den schattierten Bereich nicht erzeugen, wenn mein x ein Faktor ist. Hier einige Beispieldaten

time <- as.factor(c('A','B','C','D')) 
x <- c(1.00,1.03,1.03,1.06) 
x.upper <- c(0.91,0.92,0.95,0.90) 
x.lower <- c(1.11,1.13,1.17,1.13) 

df <- data.frame(time, x, x.upper, x.lower) 

ggplot(data = df,aes(time,x))+ 
    geom_ribbon(aes(x=time, ymax=x.upper, ymin=x.lower), fill="pink", alpha=.5) + 
    geom_point() 

wenn ich factor in die aes() ersetzen Ich kann immer noch nicht den schraffierten Bereich bekommen. Oder wenn ich das versuche:

ggplot()+ 
    geom_ribbon(data = df, aes(x=time, ymax=x.upper, ymin=x.lower), fill="pink", alpha=.5) + 
    geom_point(data = df, aes(time,x)) 

Ich kann immer noch nicht die Schattierung bekommen. Irgendwelche Ideen, wie man das schafft ...

+0

Ich glaube, geom_ribbon funktioniert nur für kontinuierliche X-Werte. Eine Umgehung wäre, den Faktor als kontinuierlich zu behandeln ('as.numeric (time)') und dann die Breaks/Labels der x-Achse mit 'scale_x_continuous' zu ändern. – aosmith

+0

Können Sie als Lösung vorschlagen, bitte – user08041991

Antwort

0

Ich denke, Aosmith war genau richtig, Sie müssen einfach Ihre Faktor-Variable in numerische konvertieren. Ich denke, dass der folgende Code ist das, was Sie suchen:

ggplot(data = df,aes(as.numeric(time),x))+ 
    geom_ribbon(aes(x=as.numeric(time), ymax=x.upper, ymin=x.lower),  
    fill="pink", alpha=.5) + 
    geom_point() 

die in diesem Plot produziert:

enter image description here

EDIT EDIT: Etiketten ändern x-Achse von hinten auf die ursprünglichen Werte genommen @ Aosmith in den Kommentaren unten:

ggplot(data = df,aes(as.numeric(time),x))+ 
    geom_ribbon(aes(x=as.numeric(time), ymax=x.upper, ymin=x.lower),  
    fill="pink", alpha=.5) + 
    geom_point() + labs(title="My ribbon plot",x="Time",y="Value") + 
    scale_x_continuous(breaks = 1:4, labels = levels(df$time)) 
+0

Ok, danke und dann ändern Sie die X-Achsen-Etiketten? – user08041991

+1

Ich denke, vielleicht fragte das OP nach der Achse tick Etiketten. Etwas wie 'scale_x_continuous (breaks = 1: 4, labels = levels (df $ time))' – aosmith

+0

Hoppla, guter Punkt. Bearbeitete meine Antwort oben, danke! –

Verwandte Themen