Изменение порядка групп в ggplot в R

Я использую ggplot нарисовать гистограмму. Как я могу изменить порядок групп в барах? В следующем примере я хочу, чтобы type=1984 был первым стеком столбцов, затем type=1985 поверх 1984 и так далее.

  series <- data.frame(
  time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)),
  type = c(1984:1987),
  value = rpois(16, 10)
)

ggplot(series, aes(time, value, group = type)) +
  geom_col(aes(fill= type))

Изменение порядка с помощью series<- series[order(series$type, decreasing=T),] изменяет только порядок в легенде, а не в сюжете.

2 ответа

Решение

С помощью desc() от dplyr:

ggplot(series, aes(time, value, group = desc(type))) +
    geom_col(aes(fill= type))

Начиная с ggplot2 версии 2.2.1 вам не нужно переупорядочивать строки вашего фрейма данных, чтобы установить порядок стека в вашем графике.

Таким образом, подход чистого ggplot (как альтернатива ответу tmfmnk) будет выглядеть так:

library(ggplot2)

series %>%
  ggplot(aes(time, value, group=factor(type, levels=1987:1984)))+
  geom_col(aes(fill= factor(type)))+
  guides(fill=guide_legend(title="type"))

Как хорошая практика, я рекомендую работать с факторами при построении вашей переменной type как категоричный.

Результат:

введите описание изображения здесь

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