Как я могу заставить gganimate анимировать столбчатую диаграмму, начиная с нуля, как указано в наборе данных

#r #ggplot2 #gganimate

#r #ggplot2 #gganimate

Вопрос:

Я создаю анимированную столбчатую диаграмму, используя gganimate. Пример кода см. Ниже. Проблема в том, что в примере компания A получает нулевую прибыль в 2018 году и получает убыток в размере -2 в 2019 году. Я бы ожидал, что анимация для компании A начнется с нуля и перейдет к -2, однако она начинается с 5, что является прибылью для компании B в 2018 году.

Кто-нибудь может изменить код, чтобы для компании A анимация начиналась с нуля, а не с 5?

  library(ggplot2)
 library(gganimate)
 year<-c(2018,2018,2019,2019,2020,2020)
 country<-c("USA","USA","USA","USA","USA","USA")
 company<-c("A","B","A","B","A","B")
 profit<-c(0,5,-2,2,0,0)
 df<-data.frame(year,country,company,profit,stringsAsFactors = FALSE)

 ggplot(data = df, aes(x = country, y = profit,fill=company))  
 geom_bar(position = "stack", stat ='identity') 
 transition_states(
 year,
 transition_length = 2,
 state_length = 1,wrap=FALSE
 ) 
 ggtitle('Year: {closest_state}') 
 ease_aes('sine-in-out') 
  

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

Комментарии:

1. вы получаете то, что хотите, если используете position = «dodge»? Также вы можете использовать geom_col then вам не нужен аргумент stat

2. Изменение положения запустит анимацию с нуля, но я хочу, чтобы столбцы были сложены в визуальном представлении.

3. Я думаю position = "identity" , это должно сработать в данном конкретном случае?

4. Ваш код отлично работает для меня.

Ответ №1:

Изменив position=»stack» на position=»identity», это решило проблему. Происходило то, что 0 из компании A в 2018 году укладывалось поверх 5 из компании B в 2018 году. Это означало, что когда он начал анимировать начальную точку для company A, было 5.

  library(ggplot2)
 library(gganimate)
 year<-c(2018,2018,2019,2019,2020,2020)
 country<-c("USA","USA","USA","USA","USA","USA")
 company<-c("A","B","A","B","A","B")
 profit<-c(0,5,-2,2,0,0)
 df<-data.frame(year,country,company,profit,stringsAsFactors = FALSE)

ggplot(data = df, aes(x = country, y = profit,fill=company))  
geom_bar(position = "identity", stat ='identity') 
transition_states(
year,
transition_length = 2,
state_length = 1,wrap=FALSE
) 
ggtitle('Year: {closest_state}') 
ease_aes('sine-in-out')