Aby moja postać była odpowiednia do czarno-białego drukowania, zmapowałam jedną zmienną razem za pomocą "kształtu", "lty", "koloru".
ggplot(df, aes(x=time, y=mean,
shape=quality,
lty=quality,
color=quality))
Mam taką postać, Chciałbym, aby część legend była subskrybowana, z kodami:
labels=c(expression(Pol[(Art)]), expression(Pol["(Aca-)"]), expression(Pol["(Aca-)"]))
Niestety, kiedy umieszczam "etykietę" w kolorze lub kształcie, sprawia ona, że legenda jest dość złożona,
Czy można mapować "kształt", "kolor", "lty" na jedną zmienną i ustawić indeks dolny, ale zachować je w jednym zestawie legendy?
Odpowiedzi:
1 dla odpowiedzi № 1Aby zmienić etykiety o skali kategorycznej, używasz scale_*_discrete(labels = ...)
. Tutaj po prostu musisz to zrobić color
, shape
, i linetype
.
Powinieneś unikać używania lty =
ogólnie; ten synonim jest dopuszczalny dla zgodności z bazą R, ale nie jest powszechnie obsługiwany w całym tekście ggplot2
.
Zmieniłem twoje etykiety, aby być bliżej tego, co jamyślę, że miałeś na myśli (trzeci wpis to teraz "Aca +" zamiast powtórzenia "Aca-") i lepiej je wyrównać (dodając niewidoczny "+" do pierwszego, aby utworzyć odpowiedni odstęp).
lab1 <- c(expression(Pol[(Art)*phantom("+")]),
expression(Pol["(Aca-)"]),
expression(Pol["(Aca+)"]))
library(ggplot2)
ggplot(mtcars,
aes(wt, mpg,
color = factor(cyl),
shape = factor(cyl),
linetype = factor(cyl))) +
geom_point() +
stat_smooth(se = F) +
scale_color_discrete(labels = lab1) +
scale_shape_discrete(labels = lab1) +
scale_linetype_discrete(labels = lab1)
Jeśli okaże się, że musisz powtarzać dokładne kopie takiej funkcji, istnieją dwa sposoby obejścia tego problemu:
Ponownie zrewiduj dane - LUB -
Posługiwać się
purrr::invoke_map
iterować po funkcjach
library(purrr)
ggplot(mtcars,
aes(wt, mpg,
color = factor(cyl),
shape = factor(cyl),
linetype = factor(cyl))) +
geom_point() +
stat_smooth(se = F) +
invoke_map(list(scale_color_discrete,
scale_linetype_discrete,
scale_shape_discrete),
labels = lab1)