2017-12-19 16 views
1

Meine Daten sieht das so etwas wie:Wie man eine manuelle Farbskala in ggplot an geom_smooth übergibt?

# A tibble: 6 x 4 
    CFU   strain diltn order 
    <dbl>   <fctr> <dbl> <dbl> 
1 0.0 M12-611025 (0) 5.89279  1 
2 1.0 M12-611025 (0) 5.19382  1 
3 0.0 M12-611025 (0) 4.49485  1 
4 0.5 M12-611025 (0) 3.79588  1 
5 1.0 M12-611025 (0) 3.09691  1 
6 7.0 M12-611025 (0) 2.39794  1 

Ich habe 16 verschiedene „Stämme“ und wollen nur eine Teilmenge auf mein Diagramm als mit geom_smooth als auch zeichnen eine Linie zu zeichnen. Ich habe diese achieves wie folgt:

lines1 <- c("M12-611025 (0)" = "solid", 
      "M12-611025 (0) HI" = "dashed", 
      "M12-611025 (300)" = "solid", 
      "M12-611025 (300) HI" = "dashed", 
      "M12-611025 (700)" = "solid", 
      "M12-611025 (700) HI" = "dashed", 
      "M12-611025 (1100)" = "solid", 
      "M12-611025 (1100) HI" = "dashed") 

ggplot(data = (subset(data, 
    strain %in% c("M12-611025 (0)", "M12-611025 (0) HI", 
       "M12-611025 (300)", "M12-611025 (300) HI", 
       "M12-611025 (700)", "M12-611025 (700) HI", 
       "M12-611025 (1100)", "M12-611025 (1100) HI"))), 
    (aes(x = diltn, y = CFU, colour = factor(strain), 
     fill = factor(strain), linetype = factor(strain)))) + 
    geom_smooth(se = F, span = 1) + 
    geom_point(shape = 21, colour = "black", size = 2, stroke = 1) + 
    scale_y_continuous(limits = c(-1, 120))+ 
    scale_x_continuous(breaks = c(0, 1, 2, 3, 4), 
        labels = c(0, 10, 100, 1000, 10000), 
        limits = c(1, 4))+ 
    annotation_logticks(base = 10, sides = "b", scaled = TRUE) + 
    theme(axis.line = element_line(colour = "black", 
           size = 1,  
           linetype = "solid")) + 
    ggtitle("RPM Test M12 - 611025") + 
    xlab(expression(paste("Dilution "))) + 
    ylab("CFU") + 
    scale_linetype_manual(values = lines1) 

Der Schlüssel hier ist ich die strians mit „HALLO“ als gestrichelte Linien und die anderen als durchgezogene Linien dargestellt werden soll, das gibt mir:

enter image description here

Ich möchte dann meine eigenen Farbschemata definieren, damit die gleichen Linien die gleichen Farbpunkte und Linien haben, aber die Linien sind für die "HI" Versionen gestrichelt. Ich versuchte dies:

cols1 <- c("M12-611025 (0)" = "blue", 
      "M12-611025 (0) HI" = "blue", 
      "M12-611025 (300)" = "#ff9700", 
      "M12-611025 (300) HI" = "#ff9700", 
      "M12-611025 (700)" = "#33d100", 
      "M12-611025 (700) HI" = "#33d100", 
      "M12-611025 (1100)" = "#fe0000", 
      "M12-611025 (1100) HI" = "#fe0000") 

M12_611025 + scale_fill_manual(values = cols1) 

Diese Punkte ändert aber nicht die Zeilen, und ich kann nicht herausfinden, wie die Linien wie die Punkte, die gleiche Farbe zu bekommen?

enter image description here

+0

ich Ihre Frage beantwortet, aber ich möchte darauf hinweisen, dass Sie keine vorsah (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) Bitte tun Sie dies in der Zukunft. –

+0

Danke, ich werde den Beitrag verwenden, den du beim nächsten Mal zitiert hast, ich habe jetzt ein paar Mal gepostet und habe versucht, jeden Beitrag in Bezug auf Klarheit zu verbessern und auf dem Punkt zu bleiben. Ich sehe jetzt muss ich ein paar mehr Dinge, danke für den Zeiger – reubenmcg

+0

Ja. Insbesondere, wenn ich Ihren Code nicht problemlos mit meinem Fix ausführen kann, kann ich nicht bestätigen, dass meine Antwort tatsächlich funktioniert. Ich vermute nur an diesem Punkt. –

Antwort

1

Linien verwenden, die color ästhetischen und Punkte von 21 verwenden, um die Form fill ästhetischen (für die Innenfarbe, ist der Umriss auch ein ästhetisches color). Daher ist in Ihrem Fall müssen Sie sowohl die fill und die color Skala ändern: [. Minimal, reproduzierbares Beispiel]

M12_611025 + 
    scale_fill_manual(values = cols1) + 
    scale_color_manual(values = cols1) 
Verwandte Themen