使用R创建动画条形图

时间:2018-04-10 23:43:32

标签: r

以下是我试图模仿的示例,但我甚至不需要在我的用例中使用tweenr库:

https://www.r-graph-gallery.com/288-animated-barplot-transition/

我无法弄清楚如何使用ggplot使用我的CSV数据框制作一个合适的条形图。

我的数据集是一个CSV文件,如下所示:

Year,LabelOne,LabelTwo,LabelThree

87-88,15160,3190,1590

88-89,16530,3260,1650

89-90,17050,3340,1650

我正在使用

df <- read.table("~/Downloads/data.csv", header = T, sep = ",") 

但那是我被卡住的地方,我正在尝试制作一个动画条形图,但我甚至无法制作静态条形图。这个想法是数据集中的每一行都是最终GIF中的一个帧。 (Lables作为标签,值是每个相应条形图的高度,第1列用作每个条形图的标题。)

对于前。第一帧应该并排有3个条形图,“LabelOne”高度为15160,“LabelTwo”高度为3190等。标题为“87-88”。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果这是您的数据:

df <- data.frame(stringsAsFactors=FALSE,
         Year = c("87-88", "88-89", "89-90"),
     LabelOne = c(15160L, 16530L, 17050L),
     LabelTwo = c(3190L, 3260L, 3340L),
   LabelThree = c(1590L, 1650L, 1650L)
)

第一步是转换为长格式:

library(tidyr)
df_long <- gather(df, lbs, Value, LabelOne:LabelThree, -Year)

看起来像这样:

   Year     lbs    Value
1 87-88   LabelOne 15160
2 88-89   LabelOne 16530
3 89-90   LabelOne 17050
4 87-88   LabelTwo  3190
5 88-89   LabelTwo  3260
6 89-90   LabelTwo  3340
7 87-88 LabelThree  1590
8 88-89 LabelThree  1650
9 89-90 LabelThree  1650

然后使用ggplot创建条形图:

ggplot(df_long[df_long$Year=="87-88",], 
 aes(x = lbs, y = Value, fill = lbs)) + geom_bar(stat="identity")

自动化流程:

library(dplyr)
df_long %>% group_by(Year) %>% do(plots = ggplot(data = .) + 
 aes(x = lbs, y = Value, fill = lbs) + geom_bar(stat = "identity") +
 ggtitle(unique(.$Year))) -> plots