r - 在 gganimate 图的副标题中显示数据值 [R]
问题描述
由于我在这里找不到答案,所以我的代码和使用的数据的简化版本。
我的数据包含一个“天”变量,它表示本周原始数据点的数量。使用 gganimate 绘图,我可以在动画中显示当前周,但不能显示关联的聚合数据点(“天”)。
样本数据:
df <- structure(list(GKZ = c(101L, 101L, 101L, 101L, 101L, 101L, 101L,
101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L,
101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L,
101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L, 101L,
101L, 101L, 101L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L, 102L,
102L, 102L), week = c(8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50), district = c("Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Eisenstadt(Stadt)", "Eisenstadt(Stadt)", "Eisenstadt(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)",
"Rust(Stadt)", "Rust(Stadt)", "Rust(Stadt)"), deaths = c(0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L), pop = c(14816L, 14816L, 14816L, 14816L,
14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L,
14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L,
14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L,
14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L,
14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 14816L, 1980L,
1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L,
1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L,
1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L,
1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L, 1980L,
1980L, 1980L, 1980L, 1980L, 1980L, 1980L), days = c(5L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 4L, 5L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 4L), deathrate = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 20.2483801295896, 20.2483801295896, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0)), row.names = c(NA, -86L), groups = structure(list(GKZ = 101:102,
.rows = structure(list(1:43, 44:86), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = 1:2, class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
我的实际绘图使用 shapefile 上完整数据集的连接。我希望这个示例图足以解释我的问题。如何正确引用 subtitle 参数中的每一行数据?使用以下代码,仅打印第一个“天”值。
library(tidyverse)
library(gganimate)
df %>%
ggplot(aes(district, deathrate))+geom_col()+
labs(title = "Week: {current_frame}",
subtitle = paste0("Number of days: ", {df$days}))+
transition_manual(week) + ease_aes("linear")
由于 gganimate 使用胶水,我也尝试了胶水符号,但这会返回其他错误......
subtitle = "Number of days: {days}"
subtitle = "Number of days: {df$days}"
如果可以在字幕参数之外完成,我也会很高兴:)
解决方案
这可以通过过滤数据集并提取所需的变量来实现。这样做时,我收到一个错误,因为您的数据集每帧包含多行(区域)。因此,我过去常常.[[1]]
提取第一个值。
library(tidyverse)
library(gganimate)
df %>%
ggplot(aes(district, deathrate))+geom_col()+
labs(title = "Week: {current_frame}",
subtitle = "Number of days: {filter(df, week == current_frame) %>% pull(days) %>% .[[1]]}") +
transition_manual(week) + ease_aes("linear")
推荐阅读
- sql - 在oracle中计算工资
- android - 我们可以在不使用统一的情况下使用 Google Cardboard SDK 在 Android NDK 中创建和加载 VR 模型(对象、会议室)吗?
- redux - 如何在 UMI 应用程序中访问 DVA Store?
- java - 如何以编程方式获取主题权限 [Kafka,Java]
- javascript - TypeError:无法读取 Netlify CMS/React.js 上未定义的属性“地图”
- drupal-7 - cURL 错误 60:SSL:没有替代证书主题名称与目标主机名匹配。项目间沟通
- angular - 如何为 Angular Material Slide Toggle 设置默认值?
- python-3.x - 在 argparse 中,如何使位置参数取决于可选参数?
- python - 是否可以使用 Get 和 Set 操作 matplotlib 直方图中的数据?
- python - 在python3中格式化正则表达式输出