2017-02-23 3 views
1

Ich habe ein Problem, indem ich die Legendenfarben auf meiner Handlung, ich kann einfach nicht die entsprechenden Farben auf meiner Legende einstellen und alle drei erscheinen rot: Multiple Scatter ggplot. Ich versuchte mit scale_colour_manual Optionen und scale_fill_manual aber es funktioniert nicht. Ich weiß nicht, ob der Datenrahmen und der Code in Gerenarl erstellt wurden, aber es war der einzige Weg, den ich gefunden habe, um verschiedene Regressionslinien auf dem gleichen Plot zu platzieren. Hier ist ein MWE:Probleme mit ggplot Etiketten

`library("ggplot2") 
ConcCurve<-c(0.000,5.809,11.514,21.995,32.349,44.390,53.552) 
ABSHei<-c(0.01299076, 0.44779044, 0.87251242, 1.64435113, 2.41385198, 3.25395864,3.93389333) 
ABSAr3<-c(0.0224455, 0.8303167, 1.6170380, 3.0466451, 4.4496162, 5.9631238, 7.1746112) 
ABSAr5<-c(0.03847996, 1.44915907, 2.81864550, 5.29479463, 7.69466231, 10.27269797, 12.32472597) 
DataR<-data.frame(ConcCurve,ABSHei,ABSAr3,ABSAr5) 
p1<-ggplot(DataR) + 
    geom_point(aes(x=ConcCurve,y=ABSHei,fill="Height"),colour="blue") + 
    geom_smooth(aes(ConcCurve,ABSHei), method="lm", se=T,level = 0.9999,lwd=0.6, col ="blue") + 
    geom_point(aes(x=ConcCurve,y=ABSAr3,fill = "Area 3 pix"),colour="green") + 
    geom_smooth(aes(ConcCurve,ABSAr3), method="lm", se=T,level = 0.9999,lwd=0.6, col ="green") + 
    geom_point(aes(x=ConcCurve,y=ABSAr5,fill = "Area5 pix"),colour="red")+ 
    geom_smooth(aes(ConcCurve,ABSAr5), method="lm", se=T,level = 0.9999,lwd=0.6, col ="red") + 
    labs(x = expression(paste(plain("Hg"^plain("2+"))," Concentration (",mu,"g ",plain("kg"^plain("-1")),")")), y = "Integrated absorbance")+ 
    ggtitle("Calibration curves obtained using R")+ 
    guides(fill = guide_legend(reverse=F,title="Evaluation\nmode"))+ 
    scale_colour_manual(labels=c("Heigth", "Area 3 pix", "Area 5 pix"), 
         breaks=c("Heigth", "Area 3 pix", "Area 5 pix"), 
         values=c("blue","green","red")) 
print(p1) 
` 

Wie kann ich die Farben so konfigurieren, dass sie in der Art und Weise angezeigt werden, die erklären? Hier

+0

Es scheint, einige Fehler in Ihrem Code (zum Beispiel „Heigth“) gibt es, obwohl sie die einzige Ursache des Problems zu sein, nicht scheinen, als Befestigungs sie nicht die gewünschten Ergebnisse nicht ergeben. – wwl

+0

Ich habe auch versucht, Lösungen in Fragen wie diese gegeben, und sie haben nicht funktioniert: http://stackoverflow.com/questions/19330257/changing-the-color-in-the-legend-with-ggplot2-in-r – wwl

Antwort

2

ggplot Syntax ist besser geeignet, um lange Datenformat - wenn Sie den Datenrahmen neu zu gestalten, sollte es das Problem zu lösen, und der Code einfacher zu machen. Gefällt mir:

library("ggplot2") 
ConcCurve<-c(0.000,5.809,11.514,21.995,32.349,44.390,53.552) 
ABSHei<-c(0.01299076, 0.44779044, 0.87251242, 1.64435113, 2.41385198, 3.25395864,3.93389333) 
ABSAr3<-c(0.0224455, 0.8303167, 1.6170380, 3.0466451, 4.4496162, 5.9631238, 7.1746112) 
ABSAr5<-c(0.03847996, 1.44915907, 2.81864550, 5.29479463, 7.69466231, 10.27269797, 12.32472597) 
DataR<-data.frame(ConcCurve, ABS=c(ABSAr5,ABSAr3,ABSHei), 
     mode=rep(c("Area 3 pix", "Area 5 pix", "Height"), each=7)) 

ggplot(DataR, aes(x=ConcCurve, y=ABS, color=mode)) + geom_point() + 
    geom_smooth(method="lm", level=0.9999, lwd=0.6) + 
    labs(x = expression(paste(plain("Hg"^plain("2+"))," Concentration (",mu,"g ",plain("kg"^plain("-1")),")")), 
     y = "Integrated absorbance") + 
    ggtitle("Calibration curves obtained using R") + 
    guides(guide_legend(title="Evaluation\nmode")) 

Alle Ästhetik wurden zum Hauptggplot Aufruf verschoben. Dann verwenden sowohl point als auch smooth die gleiche Gruppierung und die gleichen Farben (d. H. Durch die Spalte mode), ohne sie zweimal zu schreiben. Da wir die eingebaute Farbskala verwenden, müssen für jede Gruppe keine Skalen oder Farben explizit angegeben werden.
Beachten Sie auch, dass ich beim Erstellen des Datenrahmens die ABS-Typen neu geordnet habe.

enter image description here

+0

Dies ist eine sehr elegante Lösung, ich habe auch versucht, das Datenformat zu reformieren, aber das hat damals nicht funktioniert. Vielen Dank – CristhianParedes

1

ist eine Lösung

ggplot(DataR) + 
    geom_point(aes(x=ConcCurve,y=ABSHei, color="blue")) + 
    geom_smooth(aes(ConcCurve,ABSHei), color="blue", method="lm", se=T,level = 0.9999,lwd=0.6) + 
    geom_point(aes(x=ConcCurve,y=ABSAr3, color="green")) + 
    geom_smooth(aes(ConcCurve,ABSAr3), color ="green", method="lm", se=T,level = 0.9999,lwd=0.6) + 
    geom_point(aes(x=ConcCurve,y=ABSAr5, colour="red"))+ 
    geom_smooth(aes(ConcCurve,ABSAr5), color ="red", method="lm", se=T,level = 0.9999,lwd=0.6) + 
    labs(x = expression(paste(plain("Hg"^plain("2+"))," Concentration (",mu,"g ",plain("kg"^plain("-1")),")")), y = "Integrated absorbance")+ 
    ggtitle("Calibration curves obtained using R")+ 
    guides(color = guide_legend(reverse=F,title="Evaluation\nmode"))+ 
    scale_colour_identity(labels=c("Height", "Area 3 pix", "Area 5 pix"), 
         breaks=c("blue", "green", "red"), guide="legend") 

Beachten Sie, dass Sie nicht eine Füllung verwendet haben wirklich so habe ich von denen befreien. Ich habe die Farbe in die aes() verschoben, um eine Legende zu erhalten. Dann habe ich auch eine scale_color_identity verwendet, um die literalen Farbwerte zu verwenden und sie in der Legende über den Parameter labels= umzubenennen.

enter image description here

+0

Vielen Dank, dies war meine erste Erfahrung in Stackoverflow und Sie geeignete Antwort löste mein Problem, leds mich ein wenig über ggplot2 zu lernen und den Stress loswerden, die dies verursachte, zusätzlich auf eine sehr schnelle Art und Weise. Nochmals vielen Dank: D – CristhianParedes

+0

Die Antwort von @juod ist eine bessere langfristige Lösung. ggplot ist viel einfacher zu benutzen, wenn Ihre Daten in einem ordentlichen Format sind. Das Hinzufügen mehrerer Ebenen sollte nach Möglichkeit vermieden werden. – MrFlick

Verwandte Themen