R que R

TidyTuesday: Astronautas

Mon, Jul 27, 2020
R TidyTuesday Data Visualization
#astronautas #ggplot2 #gganimate


Introducción


Esta semana el proyecto TidyTuesday comparte un dataset con información (id, nombre, nacionalidad, nombre de la misión, entre otras) sobre astronautas que han participado en misiones espaciales antes del 15 de enero de 2020. En los links señalados se puede consultar información sobre el proyecto Tidytuesday y sobre el dataset en cuestión (también sobre sus autores).


paquetes y dataset



library(readr)
library(tidyverse)
library(stringr)
library(png)
library(ggpubr)
library(gganimate)
library(Hmisc)
library(DT)



astronauts <- read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-07-14/astronauts.csv')
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   name = col_character(),
##   original_name = col_character(),
##   sex = col_character(),
##   nationality = col_character(),
##   military_civilian = col_character(),
##   selection = col_character(),
##   occupation = col_character(),
##   mission_title = col_character(),
##   ascend_shuttle = col_character(),
##   in_orbit = col_character(),
##   descend_shuttle = col_character()
## )
## See spec(...) for full column specifications.


Examinemos el dataset


En primer lugar voy a examinar rápidamente el dataset descargado (astronauts).


Nombres de las columnas:


colnames(astronauts)
##  [1] "id"                       "number"                  
##  [3] "nationwide_number"        "name"                    
##  [5] "original_name"            "sex"                     
##  [7] "year_of_birth"            "nationality"             
##  [9] "military_civilian"        "selection"               
## [11] "year_of_selection"        "mission_number"          
## [13] "total_number_of_missions" "occupation"              
## [15] "year_of_mission"          "mission_title"           
## [17] "ascend_shuttle"           "in_orbit"                
## [19] "descend_shuttle"          "hours_mission"           
## [21] "total_hrs_sum"            "field21"                 
## [23] "eva_hrs_mission"          "total_eva_hrs"


Primeras 10 observaciones:


head(astronauts, n= 10)
## # A tibble: 10 x 24
##       id number nationwide_numb~ name  original_name sex   year_of_birth
##    <dbl>  <dbl>            <dbl> <chr> <chr>         <chr>         <dbl>
##  1     1      1                1 Gaga~ <U+0413><U+0410><U+0413><U+0410><U+0420><U+0418><U+041D> <U+042E><U+0440><U+0438><U+0439>~ male           1934
##  2     2      2                2 Tito~ <U+0422><U+0418><U+0422><U+041E><U+0412> <U+0413><U+0435><U+0440><U+043C><U+0430><U+043D>~ male           1935
##  3     3      3                1 Glen~ Glenn, John ~ male           1921
##  4     4      3                1 Glen~ Glenn, John ~ male           1921
##  5     5      4                2 Carp~ Carpenter, M~ male           1925
##  6     6      5                2 Niko~ <U+041D><U+0418><U+041A><U+041E><U+041B><U+0410><U+0415><U+0412> <U+0410><U+043D><U+0434>~ male           1929
##  7     7      5                2 Niko~ <U+041D><U+0418><U+041A><U+041E><U+041B><U+0410><U+0415><U+0412> <U+0410><U+043D><U+0434>~ male           1929
##  8     8      6                4 Popo~ <U+041F><U+041E><U+041F><U+041E><U+0412><U+0418><U+0427> <U+041F><U+0430><U+0432><U+0435>~ male           1930
##  9     9      6                4 Popo~ <U+041F><U+041E><U+041F><U+041E><U+0412><U+0418><U+0427> <U+041F><U+0430><U+0432><U+0435>~ male           1930
## 10    10      7                3 Schi~ Schirra, Wal~ male           1923
## # ... with 17 more variables: nationality <chr>, military_civilian <chr>,
## #   selection <chr>, year_of_selection <dbl>, mission_number <dbl>,
## #   total_number_of_missions <dbl>, occupation <chr>, year_of_mission <dbl>,
## #   mission_title <chr>, ascend_shuttle <chr>, in_orbit <chr>,
## #   descend_shuttle <chr>, hours_mission <dbl>, total_hrs_sum <dbl>,
## #   field21 <dbl>, eva_hrs_mission <dbl>, total_eva_hrs <dbl>


Estructura:


str(astronauts)
## tibble [1,277 x 24] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id                      : num [1:1277] 1 2 3 4 5 6 7 8 9 10 ...
##  $ number                  : num [1:1277] 1 2 3 3 4 5 5 6 6 7 ...
##  $ nationwide_number       : num [1:1277] 1 2 1 1 2 2 2 4 4 3 ...
##  $ name                    : chr [1:1277] "Gagarin, Yuri" "Titov, Gherman" "Glenn, John H., Jr." "Glenn, John H., Jr." ...
##  $ original_name           : chr [1:1277] "<U+0413><U+0410><U+0413><U+0410><U+0420><U+0418><U+041D> <U+042E><U+0440><U+0438><U+0439> <U+0410><U+043B><U+04"| __truncated__ "<U+0422><U+0418><U+0422><U+041E><U+0412> <U+0413><U+0435><U+0440><U+043C><U+0430><U+043D> <U+0421><U+0442><U+04"| __truncated__ "Glenn, John H., Jr." "Glenn, John H., Jr." ...
##  $ sex                     : chr [1:1277] "male" "male" "male" "male" ...
##  $ year_of_birth           : num [1:1277] 1934 1935 1921 1921 1925 ...
##  $ nationality             : chr [1:1277] "U.S.S.R/Russia" "U.S.S.R/Russia" "U.S." "U.S." ...
##  $ military_civilian       : chr [1:1277] "military" "military" "military" "military" ...
##  $ selection               : chr [1:1277] "TsPK-1" "TsPK-1" "NASA Astronaut Group 1" "NASA Astronaut Group 2" ...
##  $ year_of_selection       : num [1:1277] 1960 1960 1959 1959 1959 ...
##  $ mission_number          : num [1:1277] 1 1 1 2 1 1 2 1 2 1 ...
##  $ total_number_of_missions: num [1:1277] 1 1 2 2 1 2 2 2 2 3 ...
##  $ occupation              : chr [1:1277] "pilot" "pilot" "pilot" "PSP" ...
##  $ year_of_mission         : num [1:1277] 1961 1961 1962 1998 1962 ...
##  $ mission_title           : chr [1:1277] "Vostok 1" "Vostok 2" "MA-6" "STS-95" ...
##  $ ascend_shuttle          : chr [1:1277] "Vostok 1" "Vostok 2" "MA-6" "STS-95" ...
##  $ in_orbit                : chr [1:1277] "Vostok 2" "Vostok 2" "MA-6" "STS-95" ...
##  $ descend_shuttle         : chr [1:1277] "Vostok 3" "Vostok 2" "MA-6" "STS-95" ...
##  $ hours_mission           : num [1:1277] 1.77 25 5 213 5 ...
##  $ total_hrs_sum           : num [1:1277] 1.77 25.3 218 218 5 ...
##  $ field21                 : num [1:1277] 0 0 0 0 0 0 0 0 0 0 ...
##  $ eva_hrs_mission         : num [1:1277] 0 0 0 0 0 0 0 0 0 0 ...
##  $ total_eva_hrs           : num [1:1277] 0 0 0 0 0 0 0 0 0 0 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   id = col_double(),
##   ..   number = col_double(),
##   ..   nationwide_number = col_double(),
##   ..   name = col_character(),
##   ..   original_name = col_character(),
##   ..   sex = col_character(),
##   ..   year_of_birth = col_double(),
##   ..   nationality = col_character(),
##   ..   military_civilian = col_character(),
##   ..   selection = col_character(),
##   ..   year_of_selection = col_double(),
##   ..   mission_number = col_double(),
##   ..   total_number_of_missions = col_double(),
##   ..   occupation = col_character(),
##   ..   year_of_mission = col_double(),
##   ..   mission_title = col_character(),
##   ..   ascend_shuttle = col_character(),
##   ..   in_orbit = col_character(),
##   ..   descend_shuttle = col_character(),
##   ..   hours_mission = col_double(),
##   ..   total_hrs_sum = col_double(),
##   ..   field21 = col_double(),
##   ..   eva_hrs_mission = col_double(),
##   ..   total_eva_hrs = col_double()
##   .. )


¿Hay NA´s?:


sapply(astronauts, function(x) 
  sum(is.na(x))
  )
##                       id                   number        nationwide_number 
##                        0                        0                        0 
##                     name            original_name                      sex 
##                        0                        5                        0 
##            year_of_birth              nationality        military_civilian 
##                        0                        0                        0 
##                selection        year_of_selection           mission_number 
##                        1                        0                        0 
## total_number_of_missions               occupation          year_of_mission 
##                        0                        0                        0 
##            mission_title           ascend_shuttle                 in_orbit 
##                        1                        1                        0 
##          descend_shuttle            hours_mission            total_hrs_sum 
##                        1                        0                        0 
##                  field21          eva_hrs_mission            total_eva_hrs 
##                        0                        0                        0


Principales indicadores estadísticos:


summary(astronauts)
##        id           number      nationwide_number     name          
##  Min.   :   1   Min.   :  1.0   Min.   :  1.0     Length:1277       
##  1st Qu.: 320   1st Qu.:153.0   1st Qu.: 47.0     Class :character  
##  Median : 639   Median :278.0   Median :110.0     Mode  :character  
##  Mean   : 639   Mean   :274.2   Mean   :128.8                       
##  3rd Qu.: 958   3rd Qu.:390.0   3rd Qu.:204.0                       
##  Max.   :1277   Max.   :565.0   Max.   :433.0                       
##  original_name          sex            year_of_birth  nationality       
##  Length:1277        Length:1277        Min.   :1921   Length:1277       
##  Class :character   Class :character   1st Qu.:1944   Class :character  
##  Mode  :character   Mode  :character   Median :1952   Mode  :character  
##                                        Mean   :1952                     
##                                        3rd Qu.:1959                     
##                                        Max.   :1983                     
##  military_civilian   selection         year_of_selection mission_number 
##  Length:1277        Length:1277        Min.   :1959      Min.   :1.000  
##  Class :character   Class :character   1st Qu.:1978      1st Qu.:1.000  
##  Mode  :character   Mode  :character   Median :1987      Median :2.000  
##                                        Mean   :1986      Mean   :1.992  
##                                        3rd Qu.:1995      3rd Qu.:3.000  
##                                        Max.   :2018      Max.   :7.000  
##  total_number_of_missions  occupation        year_of_mission mission_title     
##  Min.   :1.000            Length:1277        Min.   :1961    Length:1277       
##  1st Qu.:2.000            Class :character   1st Qu.:1986    Class :character  
##  Median :3.000            Mode  :character   Median :1995    Mode  :character  
##  Mean   :2.983                               Mean   :1995                      
##  3rd Qu.:4.000                               3rd Qu.:2003                      
##  Max.   :7.000                               Max.   :2019                      
##  ascend_shuttle       in_orbit         descend_shuttle    hours_mission  
##  Length:1277        Length:1277        Length:1277        Min.   :    0  
##  Class :character   Class :character   Class :character   1st Qu.:  190  
##  Mode  :character   Mode  :character   Mode  :character   Median :  261  
##                                                           Mean   : 1051  
##                                                           3rd Qu.:  382  
##                                                           Max.   :10505  
##  total_hrs_sum         field21       eva_hrs_mission  total_eva_hrs  
##  Min.   :    0.61   Min.   :0.0000   Min.   : 0.000   Min.   : 0.00  
##  1st Qu.:  482.00   1st Qu.:0.0000   1st Qu.: 0.000   1st Qu.: 0.00  
##  Median :  932.00   Median :0.0000   Median : 0.000   Median : 0.00  
##  Mean   : 2968.34   Mean   :0.6288   Mean   : 3.661   Mean   :10.76  
##  3rd Qu.: 4264.00   3rd Qu.:1.0000   3rd Qu.: 4.720   3rd Qu.:19.52  
##  Max.   :21083.52   Max.   :7.0000   Max.   :89.130   Max.   :78.80


¿Principales nacionalidades?:


astronauts %>%
  count(nationality , sort = TRUE)
## # A tibble: 40 x 2
##    nationality        n
##    <chr>          <int>
##  1 U.S.             854
##  2 U.S.S.R/Russia   273
##  3 Japan             20
##  4 Canada            18
##  5 France            18
##  6 Germany           16
##  7 China             14
##  8 Italy             13
##  9 U.K./U.S.          6
## 10 Australia          4
## # ... with 30 more rows


¿Programas de selección de astronautas?:


astronauts %>%
  count(selection, sort = TRUE)
## # A tibble: 230 x 2
##    selection     n
##    <chr>     <int>
##  1 NASA- 16     51
##  2 NASA- 12     39
##  3 NASA- 13     38
##  4 NASA- 8      38
##  5 NASA- 9      34
##  6 NASA- 10     32
##  7 NASA- 15     30
##  8 NASA- 14     28
##  9 NASA- 17     27
## 10 NASA- 18     26
## # ... with 220 more rows


¿Sexo y ocupación de los astronautas?:


astronauts %>%
  count(sex, sort = TRUE)
## # A tibble: 2 x 2
##   sex        n
##   <chr>  <int>
## 1 male    1134
## 2 female   143

astronauts %>%
  count(occupation, sort = TRUE)
## # A tibble: 12 x 2
##    occupation                  n
##    <chr>                   <int>
##  1 MSP                       498
##  2 commander                 315
##  3 pilot                     196
##  4 flight engineer           192
##  5 PSP                        59
##  6 Other (space tourist)       5
##  7 Flight engineer             4
##  8 Other (Space tourist)       3
##  9 Space tourist               2
## 10 Other (Journalist)          1
## 11 Pilot                       1
## 12 spaceflight participant     1




Bueno bueno, parece interesante ¿no? Hay algunos aspectos que me han llamado la atención (de hecho uno de los grandes atractivos que destaco del proyecto Tidytuesday es precisamente eso, que a cada participante le llama la atención aspectos distintos del mismo dataset y luego lo ponen en valor y en conocimiento de la comunidad. Una verdadera joya este proyecto en el que me da pena no tener tiempo para participar tanto como me gustaría). El caso es que… hasta el momento han habido al menos ocho turistas espaciales! y un periodista espacial! Bastante curioso aunque con ello creo que no vamos a ir muy lejos en nuestro análisis.


Por otro lado, otro aspecto que destaca es que si tenemos en cuenta la nacionalidad de los astronautas el dataset parece indicar que entre Estados Unidos y Rusia (/USSR) anda el juego. Es bastante probable que la carrera espacial llevada a cabo entre EEUU y la Unión Soviética durante la guerra fría explique la alta participación de astronautas de estas dos nacionalidades en comparación con el resto. Veamos qué nacionalidades nos encontramos antes y después de la disolución de la Unión Soviética que tuvo lugar en 1991:


Principales nacionalidades antes o en 1991:


astronauts %>%
  filter(year_of_mission <= 1991) %>%
  count(nationality, sort = TRUE)
## # A tibble: 23 x 2
##    nationality        n
##    <chr>          <int>
##  1 U.S.             295
##  2 U.S.S.R/Russia   135
##  3 Germany            4
##  4 France             3
##  5 Bulgaria           2
##  6 Afghanistan        1
##  7 Australia          1
##  8 Austria            1
##  9 Canada             1
## 10 Cuba               1
## # ... with 13 more rows


Principales nacionalidades después de 1991:


astronauts %>%
  filter(year_of_mission > 1991) %>%
  count(nationality, sort = TRUE)
## # A tibble: 26 x 2
##    nationality        n
##    <chr>          <int>
##  1 U.S.             559
##  2 U.S.S.R/Russia   138
##  3 Japan             19
##  4 Canada            17
##  5 France            15
##  6 China             14
##  7 Italy             13
##  8 Germany           12
##  9 U.K./U.S.          6
## 10 Switzerland        4
## # ... with 16 more rows


Estos datos corroboran, confirman y son coherentes con un hecho histórico conocido. Estados Unidos se impuso sobre la Unión Soviética en la carrera espacial. No es extraño, por ello, que la mayor parte de astronautas del dataset tengan nacionalidad norteamericana y que la agencia espacial de Estados Unidos, la NASA, predomine en los programas de selección de astronautas. Veamos cuántos de los programas del dataset corresponden a esta agencia:


Total de los programas de selección de la NAS:


nasa_selection <- astronauts %>%
  filter(str_detect(
    selection,
    regex("nasa", ignore_case = TRUE)
  )) 

nasa_selection %>%
  count()
## # A tibble: 1 x 1
##       n
##   <int>
## 1   829


829 de las 1277 de observaciones.


¿Principales pogramas de selección que no son de la NASA?:


astronauts %>%
  filter(selection %nin% nasa_selection$selection) %>%
  count(selection, sort = TRUE)
## # A tibble: 131 x 2
##    selection     n
##    <chr>     <int>
##  1 NPOE-4       15
##  2 TsPK-8       15
##  3 TsPK-12      14
##  4 TsPK-2       14
##  5 TsPK-5       14
##  6 TsPK-1       13
##  7 TsPK-6       12
##  8 China-1      11
##  9 TsKBEM-3     11
## 10 TsPK-3       11
## # ... with 121 more rows


La siguiente agencia que predomina en los programas de selección es TsPK. Tras una consulta en Google comprobamos que estas siglas hacen referencia al centro de entrenamiento de cosmonautas o Tsentr Podgotovki Kosmonavtov (TsPK) Ruso, centro inaugurado en 1960. Veamos qué programas del dataset no pertenecen a ninguna de estas dos agencias:


¿Programas de selección que no son de la NASA o de TsPK?:


nasa_tspk_selection <- astronauts %>%
  filter(str_detect(
    selection,
    regex("nasa|tspk", ignore_case = TRUE)
  )) 

astronauts %>%
  filter(selection %nin% nasa_tspk_selection$selection) %>%
  count(selection, sort = TRUE)
## # A tibble: 111 x 2
##    selection                  n
##    <chr>                  <int>
##  1 NPOE-4                    15
##  2 China-1                   11
##  3 TsKBEM-3                  11
##  4 RKKE-14                   10
##  5 1983 NRC Group             9
##  6 1998 ESA Group             8
##  7 MKS                        8
##  8 1992 CSA Group             7
##  9 1978 Intercosmos Group     6
## 10 CNES-2/EAC                 6
## # ... with 101 more rows


Vamos a ver las principales nacionalidades de los astronautas seleccionados por programas de selección que no corresponden a TsPK o a NASA:


Programas de selección de astronautas distintos a NASA y TsPK:


astronauts %>%
  filter(selection %nin% nasa_tspk_selection$selection) %>%
  count(nationality, sort = TRUE) 
## # A tibble: 35 x 2
##    nationality        n
##    <chr>          <int>
##  1 U.S.S.R/Russia   126
##  2 U.S.              39
##  3 Japan             20
##  4 Canada            18
##  5 France            18
##  6 Germany           16
##  7 China             14
##  8 Italy             11
##  9 Switzerland        4
## 10 Belgium            3
## # ... with 25 more rows


La gran mayoría de los astronautas seleccionados por estos programas son rusos. Esto se debe a que además de la agencia TsPK, existen otros organismos de este país que han llevado a cabo procesos de selección (TsKBEM, NPOE, RKKE, MKS). Tengamos además en cuenta que TsPK es el centro de entrenamiento de cosmonautas pero la agencia espacial rusa desde 1992 es Roscosmos.



rus<-astronauts %>%
  filter(selection %nin% nasa_tspk_selection$selection) %>%
  filter(nationality == "U.S.S.R/Russia") %>%
  count(selection, sort = TRUE) 

rus
## # A tibble: 38 x 2
##    selection                                    n
##    <chr>                                    <int>
##  1 NPOE-4                                      15
##  2 TsKBEM-3                                    11
##  3 RKKE-14                                     10
##  4 MKS                                          8
##  5 Korolyov-Group / Mishin-Group / TsKBEM-1     6
##  6 NPOE-7                                       6
##  7 NPOE-9                                       6
##  8 NPOE-10                                      5
##  9 NPOE-6                                       5
## 10 RKKE-15                                      5
## # ... with 28 more rows


En Estados Unidos también hay programas de selección de astronautas no llevados a cabo por la NASA pero son mucho más reducidos en número.



us <- astronauts %>%
  filter(selection %nin% nasa_tspk_selection$selection) %>%
  filter(nationality == "U.S.") %>%
  count(selection, sort = TRUE) 

us
## # A tibble: 25 x 2
##    selection                 n
##    <chr>                 <int>
##  1 PS                        6
##  2 N/A                       3
##  3 PS for Astro-1            3
##  4 1965 USAF MOL group 1     2
##  5 PS for Spacelab-2         2
##  6 PS for STS-42             2
##  7 PS for STS-43             2
##  8 PS for STS-73             2
##  9 1979 USAF group           1
## 10 1985 Teacher in Space     1
## # ... with 15 more rows


En vista a los datos decidimos que nuestro dataset final contendrá las agencias: NASA (Estados Unidos) y TsPK, TsKBEM, NPOE, RKKE y MKS (Unión Soviética/ Rusia). Deberemos aclarar esto en el gráfico final.



df_astronauts <- astronauts %>%
  filter(str_detect(
    selection,
    regex("nasa|tspk|tskbem|npoe|rkke|mks", ignore_case = TRUE)
  )) %>%
  select(name, year= year_of_mission, nationality, selection)


Y por tanto habremos dejado fuera de nuestro análisis a los siguientes programas de selección:



out_astronauts <- astronauts %>%
  filter(selection %nin% df_astronauts$selection) %>%
  count(selection, sort = TRUE) 

datatable(out_astronauts)


Grafiquemos


Llega el momento de realizar algunas visualizaciones en base al dataset generado (df_astronauts). En primer lugar conviene crear una nueva columna donde se distinga aquellos astronautas seleccionados por la NASA por las agencias rusas seleccionadas. A esta columna la llamaremos Selection_program.



df <- df_astronauts %>%
  mutate(Selection_program = case_when(
    str_detect(selection, regex("nasa", ignore_case = TRUE)) ~ "US.NASA",
    str_detect(selection, regex("tspk|tskbem|npoe|rkke|mks", ignore_case = TRUE)) ~ "USSR/Russia.*",
    TRUE ~ selection
  ))


En el primer gráfico representaremos el número de astronautas enviados a programas espaciales cada año distinguiendo entre los dos grandes grupos creados. Indicaremos con una línea vertical la fecha del fin de la Unión Soviética.



df %>%
  ggplot() +
  geom_bar(aes(x = year, fill = Selection_program, color = Selection_program), 
           alpha = 0.4) +
  scale_fill_manual(values = c("US.NASA" = "blue", "USSR/Russia.*" = "red")) +
  scale_color_manual(values = c("US.NASA" = "blue", "USSR/Russia.*" = "red"))+
  geom_vline(xintercept = 1991, color = "grey20", size = 1.2) +
  theme_minimal() +
  theme(legend.position = "bottom",
        legend.title = element_blank()) +
  labs(title = "Astronauts who participated in a space mission before 15 January 2020",
       subtitle = "Number of astronauts per year. The vertical line indicates the end of the USSR in 1991",
       caption = "*: TsPK, TsKBEM, NPOE, RKKE y MKS \n Source: TidyTuesday 2020 (Week 29)",
       x = "",
       y = "count")


En el segundo gráfico representaremos la misma variable, es decir, el número de astronautas que han participado en misiones espaciales, pero en términos acumulados. La funcion cumsum() realiza esta operación de forma sencilla:



df_acumulado <- df %>%
  group_by(Selection_program) %>%
  count(year, Selection_program) %>%
  mutate(acumulado = cumsum(n)) %>%
  ungroup() 



df_acumulado %>%
  ggplot() +
  geom_col(aes(x = year, y = acumulado, fill = Selection_program, color = Selection_program), 
           alpha = 0.4) +
  scale_fill_manual(values = c("US.NASA" = "blue", "USSR/Russia.*" = "red")) +
  scale_color_manual(values = c("US.NASA" = "blue", "USSR/Russia.*" = "red"))+
  geom_vline(xintercept = 1991, color = "grey20", size = 1.2) +
  theme_minimal() +
  theme(legend.position = "bottom",
        legend.title = element_blank()) +
  labs(title = "Astronauts who participated in a space mission before 15 January 2020",
       subtitle = "Cumulative number. The vertical line indicates the end of the USSR in 1991",
       caption = "*: TsPK, TsKBEM, NPOE, RKKE y MKS \n Source: TidyTuesday 2020 (Week 29)",
       x = "",
       y = "cumulative")


Hace unos días escribí dos entradas en mi blog sobre gráficos animados con {gganimate}. El primero de ellos trataba sobre la función view_follow() y en el segundo explicaba cómo añadir etiquetas a los gráficos animados. Considero que el caso en el que nos encontramos trabajando, donde se observa cierta rivalidad entre Estados Unidos y URSS-Rusia, podría ser un ejemplo adecuado para utilizar dicha función y donde añadir las etiquetas correspondientes. Vamos a ello a ver qué sale.



img <- readPNG("C:\\Users\\Usuario\\Desktop\\flag.png")

astro_plot <- df_acumulado %>%
  ggplot(aes(x= year, y = acumulado, color = Selection_program)) +
  background_image(img) +
  geom_line(size = 1.5) +
  geom_point(size = 3) +
  geom_vline(xintercept = 1991, color = "grey20", size = 1.2) +
  geom_label(aes(x= year, y = acumulado, label = Selection_program), 
             nudge_x = 1,
             size = 3,
             hjust = 0) +
  labs(title = "Space Race. Astronauts who participated in a space mission", 
       subtitle= "Cumulative number. The vertical line indicates the end of the U.S.S.R.",
       caption = "*: TsPK, TsKBEM, NPOE, RKKE y MKS \n Source: TidyTuesday 2020 (Week 29)",
       y = "",
       x = "") +
  scale_color_manual(values = c("US.NASA" = "blue", "USSR/Russia.*" = "red")) +
  transition_reveal(year) +
  shadow_mark(past = FALSE) +
  view_follow() +
  enter_appear(early = FALSE) +
  enter_grow() +
  enter_fade(alpha = 0) +
  theme_minimal() +
  theme(panel.grid.major.x = element_blank(),
        plot.title = element_text(size = 25, 
                                  face = "bold", 
                                  hjust = 0,
                                  color = "grey80"),
        plot.subtitle = element_text(size=20, 
                                     face = "bold", 
                                     hjust = 0, 
                                     color = "orange"),
        plot.background = element_rect(fill = "black"),
        axis.text = element_text(color = "grey80", size = 12),
        plot.caption = element_text(color = "grey80",
                                    size = 10),
        plot.margin= unit(c(t = 1, r = 2, b = 1, l = 1), "cm"),
        legend.position = "none")


animate(astro_plot, nframes= 80, width = 1000, height= 600, fps = 7)