#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 вам не нужен аргумент stat2. Изменение положения запустит анимацию с нуля, но я хочу, чтобы столбцы были сложены в визуальном представлении.
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')