2016-05-12 2 views
0

Lassen Sie uns sagen, dass ich einen einfachen Datenrahmen haben, wie unten dargestellt:Neuordnen Legende während einer bestimmten Linie für ein Liniendiagramm in ggplot Modifizieren

> A <- data.frame(x=1:10, a=rep(1,10), d=rep(2,10), b=rep(3,10)) 
> A 
    x a d b 
1 1 1 2 3 
2 2 1 2 3 
3 3 1 2 3 
4 4 1 2 3 
5 5 1 2 3 
6 6 1 2 3 
7 7 1 2 3 
8 8 1 2 3 
9 9 1 2 3 
10 10 1 2 3 

Ich möchte dies auf der x-Achse mit x plotten und die andere Spalten als Linien auf der Y-Achse. Ich möchte, dass die Zeile, die die letzte Spalte darstellt, etwas dicker ist als die anderen Zeilen. So kann ich tun dies mit dem folgenden Code, der auf dem Grundstück führt unten gezeigt:

library(ggplot2) 
#Plot that creates a thicker line for last column of data. 
#However, order of legend is changed to alphabetical order. 
p <- ggplot(A, aes(x)) 
for(i in 2:length(A)){ 
    gg.data <- data.frame(x=A$x, value=A[,i], name=names(A)[i]) 
    if(i==length(A)){ 
    p <- p + geom_line(data=gg.data, aes(y=value, color=name), size=1.1) 
    } else{ 
    p <- p + geom_line(data=gg.data, aes(y=value, color=name)) 
    } 
} 

enter image description here

Jetzt ist das Problem mit der Handlung oben ist, dass die Reihenfolge der Variablen in der Legende geändert hat an alphabetischer Reihenfolge ausrichten. Ich will das nicht; stattdessen möchte ich, dass die Bestellung a, d, b bleibt.

Ich kann die Reihenfolge beibehalten, wie ich mit melt und dann mit dem unten stehenden Code Plotten möchte, aber jetzt sehe ich nicht, wie die Größe der Zeile, die die letzte Spalte in A darstellt.

Amelt <- melt(A, id.vars='x') 
#Plot that orders legend according to order of columns in data frame. 
#However, not sure how to thicken one particular line over the others. 
pmelt <- ggplot(Amelt)+geom_line(aes(x=x, y=value, color=variable)) 

enter image description here

Wie kann ich beide Dinge, die ich will?

+0

Sie könnten die Zeile für die Gruppe von Interesse möglicherweise in einem zweiten, separaten Aufruf von 'geom_line' hinzufügen:' + geom_line (Daten = Teilmenge (Amelt, Variable == "b"), aes (x = x, y = Wert, Farbe = Variable), Größe = 1.1) ' – aosmith

+0

Danke, Aosmith. Das sollte funktionieren! –

+0

Um es nur für die letzte Variable relevant zu machen, anstatt hart auf "b" codiert zu werden: '+ geom_line (Daten = Teilmenge (Amelt, Variable == Amelt $ variable [nrow (Amelt)]), aes (x = x , y = Wert, Farbe = Variable), Größe = 1.1) ' –

Antwort

0

Haben Sie versucht, scale_fill_discrete (Brüche = c ("a", "d", "b")) zu verwenden, um die Legenden für die Diagramme anzugeben.

Bitte werfen Sie einen Blick auf diesen Link: http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/

hoffe, das hilft!

+0

Danke für den Tipp, sachinv. Aber das Hinzufügen von scale_fill_discrete (breaks = c ("a", "d", "b")) funktioniert nicht. Die Legende ist immer noch in alphabetischer Reihenfolge. –

Verwandte Themen