2017-12-06 5 views
0

Wie ich diesen Code ändern kann verschiedene Farben für Linien (zum Beispiel Schwarz, rot, grün)Horizontale Linie mit verschiedenen Farben

library(ggplot2) 

    lt <- data.frame(yint = c(200, 250, 210, 215, 279, 280), 
        grp = factor(c(1, 1, 2, 2, 3, 3), 
            levels = 1:3, 
            labels = c("Group 1", "Group 2", "Group 3"))) 


    ggplot(mtcars, aes(mpg, disp)) + 
      geom_point(aes(colour=factor(vs), 
      fill = factor(vs)), shape=21, size = 4) + 
      scale_fill_manual(values=c("blue", "pink")) + 
      scale_colour_manual(values=c("black", "black"))+ 
      geom_hline(data = lt, 
        mapping = aes(yintercept = yint, linetype = grp)) 

ich habe versucht, diese Funktion zu nutzen, aber ich habe den Fehler

ggplot(DataSet, aes(AGE, RESULT)) + 
     geom_point(aes(colour=PATIENT.SEX, 
     fill = PATIENT.SEX), shape=21, size = 1.4) + 
     scale_fill_manual(values=c("hotpink", "skyblue2")) + 
     scale_colour_manual(values=c("hotpink", "skyblue2"))+ 
     ylab("Potassium (mmol/L) ")+xlab("Age (month) ")+ggtitle("Alberta observations")+theme_bw()+ 
     theme(plot.title = element_text(lineheight=.8, face="bold",size=13))+ 
     theme(axis.text=element_text(size=12),axis.title=element_text(size=12,face="bold"))+ 
     theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))+ 
     geom_hline(data = lt, 
       mapping = aes(yintercept = yint,linetype = RI),colour 
=c("blue","blue", "red", "red", "black","black")) 
+0

Sie könnten Dinge erzwingen, indem Sie einen Vektor von Farben geben (außerhalb von 'aes') der gleichen Länge wie die Datenmenge. 'color = c (" schwarz "," schwarz "," rot "," rot "," grün "," grün ")' – aosmith

+0

@aosmith, könnten Sie bitte den Code ändern, dann könnte ich Ihren Vorschlag akzeptieren. – user8322300

Antwort

0

Eine Lösung besteht darin, den Aufruf scale_color_manual zu ändern. Setzen Sie die values und die limits für die Faktorstufen für vs (wie bereits in Ihrem Beitrag getan) und für die drei Gruppenstufen. Im Beispiel unten habe ich die Farbe für die factor(vs) für beide Ebenen auf Schwarz gesetzt, wie es im ursprünglichen Post getan wurde, und dann die Farben für Gruppe 1, Gruppe 2 und Gruppe 3 als violett, grün und gelb festlegen.

library(ggplot2) 

lt <- data.frame(yint = c(200, 250, 210, 215, 279, 280), 
       grp = factor(c(1, 1, 2, 2, 3, 3), 
           levels = 1:3, 
           labels = c("Group 1", "Group 2", "Group 3"))) 


ggplot(mtcars, aes(mpg, disp)) + 
     geom_point(aes(colour=factor(vs), fill = factor(vs)), shape=21, size = 4) + 
     scale_fill_manual(values=c("blue", "pink")) + 
     geom_hline(data = lt, 
       mapping = aes(yintercept = yint, linetype = grp, color = grp)) + 
     scale_color_manual(name = "", 
         values = c("black", "black", "Purple", "Green", "Yellow"), 
         limits = c(0, 1, "Group 1", "Group 2", "Group 3")) 

enter image description here

0

One "Brute-Force" Option in der aktuellen development version von ggplot2, 2.2.1.9000, beginnen außerhalb von aes Farben einzustellen. Die Farben, die Sie angeben, müssen entweder die Länge 1 (alle Farben gleich) oder die gleiche Länge wie der Datensatz in dieser Ebene haben.

In Ihrem Beispiel haben Sie 6 Reihen in Ihrem Datensatz, um 6 horizontale Linien zu machen, also gebe ich 6 Farben.

Wenn Sie diese Methode verwenden, müssen Sie darauf achten, dass die Farben mit der entsprechenden Zeile im Dataset übereinstimmen. In Ihrem tatsächlichen Anwendungsfall könnten Sie in Betracht ziehen, die Farben dem Dataset hinzuzufügen, um sie zu organisieren.

ggplot(mtcars, aes(mpg, disp)) + 
    geom_point(aes(colour=factor(vs), 
        fill = factor(vs)), shape=21, size = 4) + 
    scale_fill_manual(values=c("blue", "pink")) + 
    scale_colour_manual(values=c("black", "black"))+ 
    geom_hline(data = lt, 
       mapping = aes(yintercept = yint, linetype = grp), 
       color = c("black", "black", "red", "red", "green", "green")) 

enter image description here

Wenn Sie die Farben auf der linetype Legende setzen möchten, können Sie guide_legend und override.aes setzen Legende Farben.

ggplot(mtcars, aes(mpg, disp)) + 
    geom_point(aes(colour=factor(vs), 
        fill = factor(vs)), shape=21, size = 4) + 
    scale_fill_manual(values=c("blue", "pink")) + 
    scale_colour_manual(values=c("black", "black"))+ 
    geom_hline(data = lt, 
       mapping = aes(yintercept = yint, linetype = grp), 
       color = c("black", "black", "red", "red", "green", "green")) + 
    guides(linetype = guide_legend(override.aes = list(color = c("black", "red", "green")))) 

enter image description here

+0

Vielen Dank für Ihre Hilfe. Wenn ich Sie Code ausführen, bekomme ich diesen Fehler "Ästhetik muss entweder Länge 1 oder das gleiche wie die Daten (3): Farbe". Wie kann ich es reparieren? – user8322300

+0

Ja, diese Antwort bezieht sich auf die aktuelle Entwicklungsversion von * ggplot2 * (siehe Informationen zum ersten Absatz der Antwort). Diese Version wurde geändert, so dass die Legende nicht versucht, die Farben zu verwenden (was diesen Fehler verursacht), und so wird dies in der nächsten * ggplot2 * Version verfügbar sein. Jetzt können Sie Github mit dem Paket * devtools * über 'devtools :: install_github (" tidyverse/ggplot2 ") installieren' ' – aosmith