Как изменить порядок элементов в легенде?

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

Вот пример настройки:

library(ggplot2)
set.seed(0)
d <- data.frame(x = runif(3), y = runif(3), a = c('1', '3', '10'))

И вот одна из многих вещей, которые я пробовал:

ggplot(d, aes(x = x, y = y)) + 
    geom_point(size=7, aes(color = a, order = as.numeric(a)))

(Моя наивная надежда, конечно, заключалась в том, что элементы легенды будут отображаться в числовом порядке: 1, 3, 10.)

2 ответа

Решение

ggplot будет обычно упорядочивать ваши значения факторов в соответствии с levels() фактора. Лучше всего убедиться, что это именно тот порядок, который вам нужен, иначе вы будете бороться с большим количеством функций в R, но вы можете вручную изменить это, манипулируя цветовой шкалой:

ggplot(d, aes(x = x, y = y)) + 
    geom_point(size=7, aes(color = a)) + 
    scale_color_discrete(breaks=c("1","3","10"))

Порядок меток легенды можно изменить, изменив порядок и изменив значения в столбце a к фактору: d$a <- factor(d$a, levels = d$a)

Итак, ваш код будет выглядеть так

library(ggplot2)
set.seed(0)
d <- data.frame(x = runif(3), y = runif(3), a = c('1', '3', '10'))

d$a <- factor(d$a, levels = d$a)

ggplot(d, aes(x = x, y = y)) + 
  geom_point(size=7, aes(color = a))

И выход

Обратите внимание, что теперь в легенде: 1 красный, 3 зеленый и 10 синий цвет

Другие вопросы по тегам