2

I want to round the labels on each corresponding bar. Currently when animation is in transition it show many decimal places:

Data:

mydf <- data.frame(TIME = c(2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 
2008L, 2008L, 2008L, 2008L, 2010L, 2010L, 2010L, 2010L, 2010L, 
2010L, 2010L, 2010L, 2010L, 2010L, 2012L, 2012L, 2012L, 2012L, 
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2014L, 2014L, 2014L, 
2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2016L, 2016L, 
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L), GEO = c("Belgium", 
"Denmark", "Germany", "Netherlands", "Austria", "Finland", "Sweden", 
"England and Wales", "Scotland", "Norway", "Belgium", "Denmark", 
"France", "Netherlands", "Finland", "Sweden", "England and Wales", 
"Scotland", "Norway", "Switzerland", "Belgium", "Denmark", "France", 
"Luxembourg", "Netherlands", "Finland", "Sweden", "England and Wales", 
"Norway", "Switzerland", "Belgium", "Denmark", "France", "Luxembourg", 
"Netherlands", "Finland", "Sweden", "England and Wales", "Norway", 
"Switzerland", "Denmark", "France", "Luxembourg", "Austria", 
"Finland", "Sweden", "England and Wales", "Scotland", "Norway", 
"Switzerland"), Totals = c(5286.56, 8757, 4338.07, 7492.47, 3896.74, 
3947.06, 8018.07, 5874.61, 5295.17, 5067.58, 5013.71, 8689.99, 
3547.7, 4101.23, 3906.24, 7580.88, 5267.49, 3541.64, 5057.55, 
4687.57, 5103.1, 8108.56, 3636.92, 3694.94, 4139.11, 3631.12, 
7488.32, 4636.97, 4853.56, 5436.76, 4979.9, 7254.61, 4002.94, 
4848.09, 3680.72, 3620.9, 7189.69, 4582.57, 4201.47, 4527.36, 
6407.65, 4226.66, 4137.27, 3426.35, 3393.87, 6683.56, 5047.98, 
3218.93, 3050.54, 3767.67), ordering = c(6, 1, 8, 3, 10, 9, 2, 
4, 5, 7, 5, 1, 9, 7, 8, 2, 3, 10, 4, 6, 4, 1, 9, 8, 7, 10, 2, 
6, 5, 3, 3, 1, 8, 4, 9, 10, 2, 5, 7, 6, 2, 4, 5, 7, 8, 1, 3, 
9, 10, 6))

testp <- mydf %>% ggplot(aes(x = -ordering, y = Totals, fill = GEO)) +
    geom_col(width = 0.8, position = "identity") +
    coord_flip() +
    geom_text(aes(-ordering, y=0, label = GEO, hjust=0)) +       #country label
    geom_text(aes(-ordering, y=Totals, label = Totals, hjust=0)) + # value label
    theme_minimal() +
    theme(legend.position = "none", axis.text.y=element_blank(), axis.ticks.y = element_blank()) +
    labs(y = "Offences per thousand inhabitants",
         x = "Countries", title = "Crime Data for European Countries {closest_state}") +
    transition_states(TIME, transition_length = 10, state_length = 14, wrap = FALSE)

animate(testp,fps = 30,  width = 600, height = 500, nframes = 270,
 start_pause = 30, end_pause = 30, renderer = gifski_renderer("gganim_test.gif"))

Output:

gganim_test

I also tried by setting labels = round(Totals,1) in geom_text but no change in animation.

1 Answers1

3

Format the labels via scales::number will do the trick:

library(ggplot2)
library(gganimate)
library(dplyr)

testp <- mydf %>% ggplot(aes(x = -ordering, y = Totals, fill = GEO)) +
  geom_col(width = 0.8, position = "identity") +
  coord_flip() +
  geom_text(aes(-ordering, y = 0, label = GEO, hjust = 0)) + # country label
  geom_text(aes(-ordering, y = Totals, label = scales::number(Totals, acc = 1), hjust = 0)) + # value label
  theme_minimal() +
  theme(legend.position = "none", axis.text.y = element_blank(), axis.ticks.y = element_blank())  +
  labs(
    y = "Offences per thousand inhabitants",
    x = "Countries", title = "Crime Data for European Countries {closest_state}"
  ) +
  transition_states(TIME, transition_length = 10, state_length = 14, wrap = FALSE)

testa <- testp +
  transition_states(TIME, transition_length = 10, state_length = 14, wrap = FALSE)

animate(testp,
   fps = 30, width = 600, height = 500, nframes = 10,
   start_pause = 30, end_pause = 30, renderer = gifski_renderer("gganim_test.gif")
)

enter image description here

stefan
  • 90,330
  • 6
  • 25
  • 51