【问题标题】:How to reorder an animate barplot at each state?如何在每个州重新排序动画条形图?
【发布时间】:2020-06-09 02:24:53
【问题描述】:

我目前正在使用 gganimate,但我找不到正确排序条形图的条形的方法。我想代表一个国家的平均值,一个动画的年份。我想我找到了怎么做(见下文),但我找不到每年如何订购(和重新订购)这个国家。下面我举个例子。

我尝试使用 fct_reorder(),但我什至无法获得正确顺序的一年。

我想看看我的酒吧随着年份的变化顺序。

d <- tibble(country = as.factor(sample(c("France", "Germany", "UK"), 100, replace = TRUE)),
            year = sample(c(2000, 2002, 2004, 2006), 100, replace = TRUE),
            revenu = rnorm(100, mean = 1500, sd= 400))

d %>% group_by(country, year) %>%
  summarise(avg_revenu = mean(revenu, na.rm = TRUE)) %>%
  ggplot(aes(fct_reorder(country, avg_revenu), avg_revenu)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  transition_states(year, transition_length = 1, state_length = 1) +
  ggtitle("{closest_state}")

我找到了这个页面:How does gganimate order an ordered bar time-series?,但我承认我并不完全理解这个过程,而且我的“卑鄙”问题让我头疼......

谁能帮我解决这个问题?谢谢!

【问题讨论】:

    标签: r bar-chart tidyverse gganimate


    【解决方案1】:

    由于我得到了自己的答案,所以我将其发布在这里,以防万一它可以帮助其他人。

    1) 排名:想法是按国家和年份计算“平均收入”,然后按每年的 avg_revenu 计算国家的顺序。

    2) 图表:诀窍是不使用真正的条形图,而是使用 geom_tile。

    #example constitution
    d <- tibble(
    country = as.factor(sample(
      c("France", "Germany", "UK"), 100, replace = TRUE
    )),
    year = sample(c(2000, 2002, 2004, 2006), 100, replace = TRUE),
    revenu = rnorm(100, mean = 1500, sd = 400)
      )
    
    #ranking
    d2 <- d %>% group_by(country, year) %>% summarise(avg_revenu = mean(revenu, na.rm = TRUE)) %>% arrange(year, avg_revenu) %>% group_by(year) %>% mutate(order = min_rank(avg_revenu) * 1.0) %>% ungroup()
    
    #animation object
    anim <- d2 %>%
      ggplot(aes(order, group = country)) +
      geom_tile(aes(
        y = avg_revenu / 2,
        height = avg_revenu,
        width = 0.9
      ), fill = "grey50") +
      theme(axis.text.y = element_blank(), axis.title.y = element_blank()) +
      scale_y_continuous(name = "Average revenu", breaks = c(0,500,1000,1500), limits = c(-500,NA)) +
      transition_states(year, transition_length = 1, state_length = 3) +
      geom_text(aes(y = 0, label = country), hjust = "right") +
      coord_flip(clip = "off") +
      ggtitle("{closest_state}")
    
    #animation
    animate(anim, nframes = 100)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2014-07-07
      • 2013-03-03
      相关资源
      最近更新 更多