/ / Kontrolowanie rodzaju linii, koloru i etykiety w legendzie ggplot - r, ggplot2

Kontrolowanie rodzaju linii, koloru i etykiety w legendzie ggplot - r, ggplot2

Mam problem z ustawieniem niestandardowych etykiet legendyna działkach, w których wcześniej określiłem niestandardowe rodzaje linii i kolory. Jest podobne pytanie na stackoverflow, które dotyczy niestandardowych legend rodzaje linii i kolory linii. Jednakże, gdy chcesz określić etykiety legendy na górze dwóch wyżej wymienionych atrybutów, ggplot2 pozornie zaczyna się rozkładać.

Oto mój minimalnie powtarzalny przykład:

library(ggplot2)

df <- data.frame(x = rep(1:2, 2), y = c(1, 3, 2, 2),
treatment = c(rep("one", 2), rep("two", "2")))

ggplot(df, aes(x = x, y = y, colour = treatment, linetype = treatment)) +
geom_line() +
scale_linetype_manual(values = c(1, 3),
labels = c("Treatment one", "Treatment two")) +
scale_color_manual(values = c("black", "red"))

Powyższy kod prowadzi do następującego wykresu

Ustawienie etykiet w scale_linetype_manual lub scale_color_manual powoduje utworzenie dwóch legend.

Ustawianie etykiet w obu scale_linetype_manual() lub scale_color_manual() powstają dwie oddzielne legendy. Ten, który ma prawidłowe kreskowanie linii, zawsze będzie bezbarwny. Natomiast ten z poprawnymi kolorami nie będzie poprawnie reprezentował rodzaju linii (tylko linie ciągłe).

Czy istnieje sposób kontrolowania koloru, typu linii ietykiety legendy na raz w ggplot2? Czy jest to ograniczenie pakietu, w którym powinienem poprawnie określić etykiety w ramce danych z getgo?

Odpowiedzi:

2 dla odpowiedzi № 1

Ustaw etykietę tak samo dla obu scale_linetype_manual() i scale_color_manual().

library(ggplot2)

df <- data.frame(x = rep(1:2, 2), y = c(1, 3, 2, 2),
treatment = c(rep("one", 2), rep("two", "2")))

ggplot(df, aes(x = x, y = y, colour = treatment, linetype = treatment)) +
geom_line() +
scale_linetype_manual(values = c(1, 3),
labels = c("Treatment one", "Treatment two")) +
scale_color_manual(values = c("black", "red"),
labels = c("Treatment one", "Treatment two"))

wprowadź opis obrazu tutaj