Управление порядком отображения легенды ggplot2

Кто-нибудь знает, как я могу получить контроль над порядком легенд в ggplot2?

Из того, что я вижу, порядок, скорее всего, связан с фактическими метками шкалы, а не с порядком объявления шкалы. Изменение названий шкал изменяет порядок. Я сделал небольшой пример, используя набор данных diamond, чтобы подчеркнуть это. Я пытаюсь использовать ggplot2 для серии графиков, и я хочу, чтобы одна переменная отображалась справа во всех них. В настоящее время, однако, это происходит только в некоторых из них, и я не знаю, как обеспечить соблюдение желаемого порядка при сохранении соответствующих меток шкалы.

library(ggplot2)
diamond.data <- diamonds[sample(nrow(diamonds), 1000), ]
plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top", legend.box = "horizontal")
plot # the legend will appear shape then colour 
plot + labs(colour = "A", shape = "B") # legend will be colour then shape
plot + labs(colour = "Clarity", shape = "Cut") # legend will be shape then colour

2 ответа

Решение

В 0.9.1 правило определения порядка легенд является секретным и непредсказуемым. Теперь, в 0.9.2, версия dev в github, вы можете использовать параметр для установки порядка легенды.

Вот пример:

plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top")

plot + guides(colour = guide_legend(order = 1), 
              shape = guide_legend(order = 2))

plot + guides(colour = guide_legend(order = 2), 
              shape = guide_legend(order = 1))

Мне кажется, что порядок легенды определяется количеством символов в именах шкал. (Да, я согласен, это кажется странным.)

Итак, обходной путь состоит в том, чтобы заполнить ваши метки пробелами:

plot + labs(colour = "Clarity", shape = "      Cut")


Я искренне надеюсь, что кто-нибудь опубликует правильное решение в ближайшее время!

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