首页 > 解决方案 > 在 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}"

如果可以在字幕参数之外完成,我也会很高兴:)

标签: rgganimate

解决方案


这可以通过过滤数据集并提取所需的变量来实现。这样做时,我收到一个错误,因为您的数据集每帧包含多行(区域)。因此,我过去常常.[[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")

推荐阅读