r - 使用 ggplot 和 gganiminate 的动画条形图
问题描述
我有一个用 ggplot 创建的条形图,我想对其进行动画处理;基本情节是……
我在网上对此进行了研究并创建了以下代码:-
这是一些 Reprex 数据...
Data <- as.data.frame(rbind(c("11 Mar'", "Male", "20-30"),
c("11 Mar'", "Male", "20-30"),
c("11 Mar'", "Female", "20-30"),
c("12 Mar'", "Female", "50-60"),
c("12 Mar'", "Female", "10-20"),
c("12 Mar'", "Male", "60-70"),
c("13 Mar'", "Female", "20-30"),
c("13 Mar'", "Female", "60-70"),
c("13 Mar'", "Male", "60-70"),
c("13 Mar'", "Male", "60-70"),
c("13 Mar'", "Female", "20-30"),
c("14 Mar'", "Female", "70-80"),
c("14 Mar'", "Female", "70-80"),
c("14 Mar'", "Male", "40-50")))
colnames(Data) <- c("Date", "Sex", "AgeGroup")
这是我对 ggplot 的呼吁......
ggplot(Data, aes(x = AgeGroup, fill = Sex, frame = Date, Cumulative = TRUE)) +
geom_bar(position = position_dodge2(preserve = "single")) +
scale_fill_manual(values = c("lightblue", "darkblue")) +
xlab("\nAge Group") + ylab("\nIndividuals") +
ggtitle("\nMarch - April 2020") +
scale_y_discrete(limits= c(2,4,6,8)) + theme_pc() +
transition_states(Date, transition_length = 4, state_length = 1) +
labs(title = 'Date: {closest_state}',
subtitle = "Age and Gender distribution",
caption = "data as of 0945 10 Apr 2020")
不幸的是,我没有得到想要的输出 - 数据没有累积显示,而是每帧图都会刷新,只显示一天的结果。我希望 geom_bar 总是会在几天内累积数据,但它似乎没有 - 我什至在 ggplot 调用中有“Cumulative = TRUE”,但结果仍然看起来像这样......
谁能指出我正确的方向?
解决方案
我设法得到它。我通过复制前一个日期的行并添加到当前日期等来复制数据集。这样频率将是累积的。我无法在 R 中完成它。但是,数据将如下所示:
Data <- structure(list(Date = c("11 Mar'", "11 Mar'", "11 Mar'", "12 Mar'",
"12 Mar'", "12 Mar'", "12 Mar'", "12 Mar'", "12 Mar'", "13 Mar'",
"13 Mar'", "13 Mar'", "13 Mar'", "13 Mar'", "13 Mar'", "13 Mar'",
"13 Mar'", "13 Mar'", "13 Mar'", "13 Mar'", "14 Mar'", "14 Mar'",
"14 Mar'", "14 Mar'", "14 Mar'", "14 Mar'", "14 Mar'", "14 Mar'",
"14 Mar'", "14 Mar'", "14 Mar'", "14 Mar'", "14 Mar'", "14 Mar'"
), Sex = c("Female", "Male", "Male", "Female", "Female", "Female",
"Male", "Male", "Female", "Female", "Female", "Female", "Female",
"Female", "Female", "Male", "Male", "Male", "Male", "Male", "Female",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Male", "Male", "Female", "Male", "Male", "Male"), AgeGroup = c("20-30",
"20-30", "20-30", "10-20", "20-30", "50-60", "20-30", "20-30",
"60-70", "10-20", "20-30", "20-30", "20-30", "50-60", "60-70",
"20-30", "20-30", "60-70", "60-70", "60-70", "10-20", "20-30",
"20-30", "20-30", "50-60", "60-70", "70-80", "70-80", "20-30",
"20-30", "40-50", "60-70", "60-70", "60-70")), class = c("spec_tbl_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -34L), spec = structure(list(
cols = list(Date = structure(list(), class = c("collector_character",
"collector")), Sex = structure(list(), class = c("collector_character",
"collector")), AgeGroup = structure(list(), class = c("collector_character",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
然后,需要添加带有 alpha 值的 enter_grow() 和 exit_fade()。确保条形按类别的相同顺序显示。通常,无论颜色如何,首先都会绘制可用值的条形图。使条形颜色在过渡时发生变化。
ggplot(Data, aes(x = AgeGroup, fill = Sex, frame = Date)) +
geom_bar(position = position_dodge(preserve = "single")) +
scale_fill_manual(values = c("lightblue", "darkblue"), drop = TRUE) +
xlab("\nAge Group") + ylab("\nIndividuals") +
ggtitle("\nMarch - April 2020") +
scale_y_discrete(limits= c(2,4,6,8)) +
transition_states(Date, transition_length = 4, state_length = 1) + shadow_mark() +
enter_grow() +
exit_fade(alpha = 1)+
labs(title = 'Date: {closest_state}',
subtitle = "Age and Gender distribution",
caption = "data as of 0945 10 Apr 2020")
推荐阅读
- snowflake-cloud-data-platform - 记录 CLI 时出现问题
- python-3.x - 正则表达式:排除字母并单独提取数字
- flutter - Flutter *.arb 文件中的多行字符串
- ios - 父视图上的 Swift 手势识别器而不影响子视图
- javascript - 如何解决在react中查看App的render方法
- javascript - For循环更改传递下来的数组
- python - 如何阻止heroku dyno重启重置我的数据库
- java - 将 InfoWindow 添加到 FastPointOverlay - OsmDroid
- python-3.x - 同时更新表格
- javascript - 如何获取找到值的数组的索引