R - Анимированные графики (gganimate) - Могу ли я заказать ось Y? - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно сделать анимированный график, который показывает десятку лучших ст.

Я пытаюсь, но на графике показаны топ 14 и они не в порядке.

Там будет 8 графиков (по одному для каждого CBO), которые показывают количество CBO по UF с течением времени. UF должен быть в порядке, от большего к меньшему.

# Packages
library(dplyr)
library(ggplot2)
library(gganimate)
library(gifski)

# Agrupando por CBO, UF e Ano
dGrafico <- SuperRais %>% 
  select(CBO.Ocupação.2002,uf,ano) %>% 
  group_by(CBO.Ocupação.2002,uf,ano) %>%
  summarise(qtd=n())

iAno <- 2010
lCbo <- unique(as.character(dGrafico$CBO.Ocupação.2002))
iCbo <- lCbo[1]

# Gerando gráficos por CBO e Ano
for (iCbo in lCbo) {
  dGraficoA <- data.frame()

  for (i in 2010:2016) {
      dGrafico2 <- dGrafico %>% 
        filter(ano == i & CBO.Ocupação.2002 == iCbo) %>% 
        arrange(desc(qtd))
      dGraficoA <- bind_rows(dGrafico2[1:10,],dGraficoA)
  }

  # Ordenando do maior, para o menor  
  dGraficoA <- dGraficoA %>% arrange(desc(qtd))

  # Gerando Gráfico animado 
  g <- ggplot(dGraficoA, aes(x=reorder(uf, qtd), y=qtd)) +
             geom_bar(stat='identity') +
             coord_flip() +
             transition_time(ano) +
             # view_follow(fixed_x = TRUE) +
             shadow_mark() +
             enter_grow()  +
             enter_fade()  +
             labs(title = paste0("Ano: {frame_time} - ",iCbo))
       anim_save(paste0('g_',iCbo,'.gif'),animation = g) # Salvando animacao em .gif
}

Мои фактические результаты:

https://imgur.com/a/N7nq7Rq

Они должны быть в порядке и просто появляться в десятке.

> dput(head(dGrafico, 10))
structure(list(CBO.Ocupação.2002 = structure(c(201L, 201L, 201L, 201L, 201L, 201L, 201L, 201L, 201L, 201L), 
                                             .Label = c("842305", "991410", "991415", "991416", "322310", "223162", "223135", "223152", "111235", "223119"), 
                                             class = "factor"), 
               uf = c("AC", "AC", "AC", "AC", "AC", "AC", "AC", "AL", "AL", "AL"), 
               ano = c(2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2010L, 2011L, 2012L), 
               qtd = c(94L, 96L, 90L, 73L,  75L, 73L, 68L, 16L, 16L, 14L)), 
          row.names = c(NA, -10L), 
          class = c("grouped_df", "tbl_df", "tbl", "data.frame"), 
          groups = structure(list(CBO.Ocupação.2002 = structure(c(201L, 201L), 
                                                                .Label = c("842230", "848410", "848415", "848420", "848605", "861120", "910120", "911125", "911130", "911135" )

Но у меня 30 разных UF, 7 разных АНО и 8 разных CBO

Это то, что я хочу сделать: youtube.com/watch?v=tjNXULSlFio

...