[This article was first published on R-posts.com, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
< !-- Snippets by Add to All -->Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Easing
In R, easing is the interpolation, or tweening, between successive states of a plot (1). It is used to control the motion of data elements in animated data displays (2), with different easing functions giving different appearances or dynamics to the display’s animation.The ease_aes() Function
The ease_aes() function controls the easing of aesthetics or variables in gganimate. The default, ease_aes(), models a linear transition between states. Other easing functions are specified using the easing function name, appended with one of three modifiers (3) :Easing Functions
quadratic models an exponential function of exponent 2.cubic models an exponential function of exponent 3.
quartic models an exponential function of exponent 4.
quintic models an exponential function of exponent 5.
sine models a sine function.
circular models a pi/2 circle arc.
exponential models an exponential function of base 2.
elastic models an elastic release of energy.
back models a pullback and release.
bounce models the bouncing of a ball.
Modifiers
-in applies the easing function as-is.-out applies the easing function in reverse.
-in-out applies the first half of the transition as-is and the last half in reverse.
The formulas used to implement these options can be found here (4). They are illustrated below using animated scatter plots and bar charts.
Data File Description
‘data.frame’: 40 obs. of 7 variables:Cat : chr “A” “A” “A” “A” …
OrdInt: int 1 2 3 4 5 1 2 3 4 5 …
X : num 70.5 78.1 70.2 78.1 70.5 30.7 6.9 26.7 6.9 30.7 …
Y : num 1.4 7.6 -7.9 7.6 1.4 -7 -23.8 19.8 -23.8 -7 …
Rank : int 2 2 2 2 2 7 8 8 8 7 …
OrdDat: chr “01/01/2019” “04/01/2019” “02/01/2019” “05/01/2019” …
Ord : Date, format: “2019-01-01” “2019-04-01” “2019-02-01” “2019-05-01” …
The data used for this demo is a much abbreviated and genericized version of this (5) data set.
Scatter Plots
Here is the code used for the ease_aes(‘cubic-in’) animated scatter plot:# load libraries library(gganimate) library(tidyverse) # the data file format is indicated above data <- read.csv('Data.csv') # convert date to proper format data$Ord <- as.Date(data$OrdDat, format='%m/%d/%Y') # specify the animation length and rate options(gganimate.nframes = 30) options(gganimate.fps = 10) # loop the animation options(gganimate.end_pause = 0) # specify the data source and the X and Y variables ggplot(data, aes(X, Y)) + # specify the plot format theme(panel.background = element_rect(fill = 'white'))+ theme(axis.line = element_line()) + theme(axis.text = element_blank())+ theme(axis.ticks = element_blank())+ theme(axis.title = element_blank()) + theme(plot.title = element_text(size = 20)) + theme(plot.margin = margin(25, 25, 25, 25)) + theme(legend.position = 'none') + # create a scatter plot geom_point(aes(color = Cat), size = 5) + # indicate the fill color scale scale_fill_viridis_d(option = "D", begin = 0, end = 1) + # apply the fill to the 'Cat' variable aes(group = Cat) + # animate the plot on the basis of the 'Ord' variable transition_time(Ord) + # the ease_aes() function ease_aes('cubic-in') + # title the plot labs(title = "'ease_aes(cubic-in)'")
Bar Charts
Here is the code used for the ease_aes(‘cubic-in’) animated bar chart:# load libraries library(gganimate) library(tidyverse) # the data file format is indicated above data <- read.csv('Data.csv') # convert date to proper format data$Ord <- as.Date(data$OrdDat, format='%m/%d/%Y') # specify the animation length and rate options(gganimate.nframes = 30) options(gganimate.fps = 10) # loop the animation options(gganimate.end_pause = 0) # specify the data source ggplot(data) + # specify the plot format theme(panel.background = element_rect(fill = 'white'))+ theme(panel.grid.major.x = element_line(color='gray'))+ theme(axis.text = element_blank())+ theme(axis.ticks = element_blank())+ theme(axis.title = element_blank()) + theme(plot.title = element_text(size = 20)) + theme(plot.margin = margin(25, 25, 25, 25)) + theme(legend.position = 'none') + # specify the x and y plot limits aes(xmin = 0, xmax=X+2) + aes(ymin = Rank-.45, ymax = Rank+.45, y = Rank) + # create a bar chart geom_rect() + # indicate the fill color scale scale_fill_viridis_d(option = "D", begin = 0, end = 1) + # place larger values at the top scale_y_reverse() + # apply the fill to the 'Cat' variable aes(fill = Cat) + # animate the plot on the basis of the 'Ord' variable transition_time(Ord) + # the ease_aes() function ease_aes('cubic-in') + # title the plot labs(title = "'ease_aes(cubic-in)'")
Other Resources
Here (6) is a nice illustration of the various easing options presented as animated paths.Here (7) and here (8) are articles presenting various animated plots using ease_aes().
Here (9) are some other animations using ease_aes().
References
1 https://www.rdocumentation.org/packages/gganimate/versions/1.0.7/topics/ease_aes2 https://rdrr.io/cran/tweenr/
3 https://gganimate.com/reference/ease_aes.html
4 https://github.com/thomasp85/tweenr/blob/master/src/easing.c
5 https://academic.udayton.edu/kissock/http/Weather/default.htm
6 https://easings.net/
7 https://github.com/ropenscilabs/learngganimate/blob/master/ease_aes.md
8 https://www.statworx.com/de/blog/animated-plots-using-ggplot-and-gganimate/
9 https://www.r-graph-gallery.com/animation.html
ease_aes() Demo was first posted on January 15, 2021 at 8:45 am.
To leave a comment for the author, please follow the link and comment on their blog: R-posts.com.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.