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

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

вот пример установки:

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)))

enter image description here

(моя наивная надежда, конечно, заключалась в том, что элементы легенды будут показаны в числовом порядке: 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))

и ouptut enter image description here

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