ggplot2: как назначить математические символы на ярлыки легенды для двух разных эстетик? - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь создать легенду с математическими символами. Я пробовал разные варианты, но ни один не работает. Я не нахожу способ присваивать метки непосредственно guide_legend, и ggplot, похоже, не понимает expression s в факторных уровнях. Также невозможно дать label_bquote уровням факторов (в любом случае, документация ggplot2 говорит, что это работает для полос фасетов).

В приведенном ниже примере я хочу изменить L1, L2 и Linf на L с индексами 1, 2 и символом бесконечности соответственно.

a1 = exp(seq(1, 3))
a2 = exp(seq(1, 3) + 0.2)
a3 = exp(seq(1, 3) + 0.4)

df = data.frame(coefficients = c(a1, a2, a3), order = rep(1:3, 3),
                norm = factor(rep(1:3, each = 3), labels =  expression(L[1], L[2], L[inf])))

ggplot(df, aes(x = order, y = coefficients, colour = norm, shape = norm)) + 
geom_line() + geom_point() 

plot

1 Ответ

0 голосов
/ 01 сентября 2018

Я упустил из виду, что подобный вопрос уже задавался, и ответы дают правильный совет: назначьте метки через шкалы, как показано ниже. Обратите внимание, что обе шкалы должны быть определены, и что обе должны иметь одинаковое имя и метки, чтобы избежать создания двух легенд.

a1 = exp(seq(1, 3))
a2 = exp(seq(1, 3) + 0.2)
a3 = exp(seq(1, 3) + 0.4)

df = data.frame(coefficients = c(a1, a2, a3), order = rep(1:3, 3),
                  norm = factor(rep(1:3, each = 3), labels = c("L1", "L2", "Linf")))

ggplot(df, aes(x = order, y = coefficients, colour = norm, shape = norm)) + 
  geom_line() + geom_point() + 
scale_colour_manual(name = "norm", values = c("blue", "red", "green"), 
                     labels = expression(L[1], L[2], L[infinity])) + 
scale_shape_discrete(name = "norm", 
                      labels = expression(L[1], L[2], L[infinity]))

enter image description here

...