To pass specifications, you need to complete all questions, especially the final couple questions. You should have a functional animation with a working “play” button and some customized options. The animated line document on Canvas may be useful as another reference for animations using Plotly in R.
Note the use of the p_load() function from the pacman package!
knitr::opts_chunk$set(echo = TRUE, warning = FALSE)
pacman::p_load(plotly, gapminder)
Load the gapminder dataset into your R environment and take a look at it. Note the location of different variables and include a summary of the average and maximum GDP by continent.
data("gapminder")
head(gapminder)
## # A tibble: 6 × 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
gdp_summary <- gapminder %>%
group_by(continent) %>%
summarise(
avg_gdpPercap = mean(gdpPercap, na.rm = TRUE),
max_gdpPercap = max(gdpPercap, na.rm = TRUE)
)
gdp_summary
## # A tibble: 5 × 3
## continent avg_gdpPercap max_gdpPercap
## <fct> <dbl> <dbl>
## 1 Africa 2194. 21951.
## 2 Americas 7136. 42952.
## 3 Asia 7902. 113523.
## 4 Europe 14469. 49357.
## 5 Oceania 18622. 34435.
Using plotly, create a static bubble chart of the gapminder data. Map
GDP to the x axis, life expectancy to the Y axis, and population to the
size of the bubbles. Each bubble’s color should be based on the region
of that nation. Hint: If size is not working properly for you, you may
want to use: marker = list(sizemode = "diameter"))
#Uncomment and modify the line below this one to create your plot!
#static_plot <- plot_ly(...)
static_plot <- plot_ly(data = gapminder, x = ~gdpPercap, y = ~lifeExp, size = ~pop, color = ~continent, text = ~country, type = 'scatter', mode = 'markers', marker = list(sizemode = "diameter")) %>%
layout(title = "GDP per Capita vs Life Expectancy for All Years", xaxis = list(title = "GDP per Capita"), yaxis = list(title = "Life Expectancy"))
static_plot
Note here that the plot looks pretty messy because all the years are present on the plot. It would be nice to see the dots by country one year at a time, right? Right
Create a new plotly object that is similar to the previous one, but
includes animation. This is as easy as adding frame to your
plot_ly command and specifying the varable that should determine the
frame.
# Code goes here
#Uncomment the line below and modify as needed!
#animated_plot <- plot_ly(...)
animated_plot <- plot_ly(data = gapminder, x = ~gdpPercap, y = ~lifeExp, size = ~pop, color = ~continent, frame = ~year, text = ~country, hoverinfo = "text", type = 'scatter', mode = 'markers', marker = list(sizemode = "diameter")) %>%
layout(title = "Life Expectancy vs. GDP per Capita 1952-2007", xaxis = list(title = "GDP per Capita", type = "log"), yaxis = list(title = "Life Expectancy"))
animated_plot
Try adding a few options to alter your animation lightly. As long as you’ve created your plot correctly, all you need to do here is uncomment the code, run the chunk, and explain what each part did.
#Uncomment the lines below to see the updated animation.
animated_chart <- animated_plot %>%
animation_opts(frame = 100, #Adjusts the speed of the animation by setting the duration of each frame, in this case it made it faster
redraw = TRUE, #Forced a redraw for each frame which can improve animation smoothness, in this case it was less smooth
easing = "linear", #Specifies a linear easing function, making transitions steady without acceleration, in this case the easing was more constant than the previous one
)
animated_chart
Now, let’s add a button to pause the animation. You should spend a bit of time looking at this code and understanding what it does, then try to move the button to a place that makes more sense.
interactive_chart <- animated_chart %>% layout(
updatemenus = list(
list(
type = "buttons",
showactive = FALSE,
x = 10, #trying to move closer to the play button
xanchor = "right",
y = 0,
yanchor = "top",
buttons = list(
list(
label = "Pause",
method = "animate",
args = list(NULL, list(frame = list(duration = 0,
redraw = TRUE),
mode = "immediate"))
)
)
)
)
)
interactive_chart
Add a title, axis labels, any other important annotations to the plot. This could include adding hover text or other elements.
library(scales)
interactive_chart <- animated_chart %>%
layout(
title = "Global GDP and Life Expectancy Over Time",
xaxis = list(
title = "GDP per Capita",
type = "log",
tickformat = "$,.0f"
),
yaxis = list(
title = "Life Expectancy (years)"
),
updatemenus = list(
list(
type = "buttons",
showactive = FALSE,
x = 10,
xanchor = "right",
y = 0,
yanchor = "top",
buttons = list(
list(
label = "Pause",
method = "animate",
args = list(
NULL,
list(frame = list(duration = 0, redraw = TRUE), mode = "immediate")
)
)
)
)
),
annotations = list(
list(
x = 0.5,
y = 1.1,
xref = "paper",
yref = "paper",
text = "Data Source: Gapminder",
showarrow = FALSE,
font = list(size = 12, color = "gray")
)
)
) %>%
add_trace(
text = ~paste("Country:", country, "<br>",
"GDP per Capita:", dollar(gdpPercap), "<br>",
"Life Expectancy:", lifeExp, "years<br>",
"Population:", pop),
hoverinfo = "text"
)
interactive_chart
Practice publishing your final plot to Rpubs (or another location of your choice) and include the link in your submission. https://rpubs.com/lilydorathy/1243033