2016-05-22 15 views
1

Ich möchte ein Liniendiagramm erstellen, wo ich einige Linien unter/über bestimmten y-Werten abschneiden muss. Als ein BeispielClip/Limit Geom_Line plotten

x <- c(1,2,3,4,5,6,7,8,9,10) 
    y1 <- c(1,2,3,4,5,6,7,8,9,10) 
    y2 <- c(2,4,6,8,10,12,14,16,18,20) 
    df <- data_frame(x, y1, y2) 

    #make plot for df 
    ggplot(data=df, aes(x=x, group=1)) + 

#plot y=x 
    geom_line(data=df, aes(x=x, y=y1, colour="red"))+ 

#plot y=2x for values of y equal to/ above 3 
    geom_line(data=df, aes(x=x, y=y2 >=3, colour="blue")) 

offensichtlich funktioniert das nicht, aber ist es möglich? Und wenn ja, wie? Die offensichtliche Lösung wäre, den Datenrahmen selbst zu bearbeiten, aber für mein endgültiges Ziel wird dies nicht funktionieren. Eine andere Lösung wäre, das Diagramm (in diesem Fall) über y = 3 unsichtbar zu machen, war aber unsicher, ob das möglich ist

Entschuldigung, wenn es vorher gefragt wurde. Ich habe versucht, mich umzusehen, habe aber nichts gefunden. Vielen Dank,

Antwort

1

Eine mögliche Lösung ist ein Faktor Ihrer Erkrankung zu machen und dass die Linie verwenden Farbe:

ggplot(data=df, aes(x=x, y=y2, group=1)) + 
    geom_line(aes(color = factor(y2 >= 3))) 

die gibt:

enter image description here


Nach Wieder Wenn ich deine Frage lese, hätte ich sie vielleicht falsch verstanden. Etwas Anpassung an Ihren Code enthalten nur die Werte gleich oder größer als 3:

ggplot(data=df, aes(x=x, y=y1)) + 
    geom_line(colour="red")+ 
    geom_line(data=df[df$y2 >= 3,], aes(x=x, y=y2), colour="blue") 

die gibt:

enter image description here

+1

ahhh es eine einfache Lösung, die alle zusammen :) Thanks- ist wie sieht das funktionieren sollte perfekt für das, was ich will (und der erste Teil ist auch nützlich zu haben: D) –

+0

ahhh, das tut eigentlich nicht ganz das, was ich wollte, und ich habe bis jetzt keine Realsie. Ist es möglich, die Linie y = 2x von y = 3 nach oben zu zeichnen, ohne den Wert für x = 1.5, y = 3 zu haben? d. H., Um die Linie als normal zu zeichnen und danach einen Hochpassfilter für y = 3 einzuführen –

+0

@RobertHickman Auf welchen Teil der Antwort beziehen Sie sich? Und was meinst du mit * "Hochpassfilter" *? Bitte erläutern Sie genauer, was Sie erreichen möchten. – Jaap