Skip to content

Instantly share code, notes, and snippets.

@thomasp85
Created January 29, 2019 11:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save thomasp85/e73e249f339963304d3c2b084942d513 to your computer and use it in GitHub Desktop.
Save thomasp85/e73e249f339963304d3c2b084942d513 to your computer and use it in GitHub Desktop.
Code for gganimate talk RStudio::conf 2019
---
title: "gganimate cookbook code"
output:
html_document:
df_print: tibble
highlight: kate
css: gganimate_cookbook.css
---
```{r setup}
library(gganimate)
dpi <- 144
knitr::opts_chunk$set(
dpi = dpi,
fig.width = 687 / dpi,
fig.height = 633 / dpi,
cache = TRUE,
fig.retina = 1
)
```
## Example 1
```{r gapminder data}
library(gapminder)
gapminder
p <- ggplot(
gapminder,
aes(x = gdpPercap, y = lifeExp,
size = pop, colour = country)
) +
geom_point(
alpha = 0.7,
show.legend = FALSE
) +
scale_colour_manual(
values = country_colors
) +
scale_size(range = c(2, 12)) +
scale_x_log10() +
labs(
x = 'GDP per capita',
y = 'life expectancy'
)
p
```
```{r first anim}
p +
transition_time(year)
```
```{r labs}
p +
transition_time(year) +
labs(title = 'Year: {frame_time}')
```
```{r view_follow}
p +
transition_time(year) +
labs(title = 'Year: {frame_time}') +
view_follow(fixed_y = TRUE)
```
```{r shadow_wake, gganimate=list(detail = 10)}
p +
transition_time(year) +
labs(title = 'Year: {frame_time}') +
shadow_wake(wake_length = 0.1,
alpha = FALSE)
```
```{r shadow_mark}
p +
transition_time(year) +
labs(title = 'Year: {frame_time}') +
shadow_mark(alpha = 0.3, size = 0.5)
```
## Example 2
```{r, message=FALSE}
library(GSODR)
library(dplyr)
copenhagen <- nearest_stations(LAT = 55.676098,
LON = 12.568337,
distance = 50)
austin <- nearest_stations(LAT = 30.267153,
LON = -97.7430608,
distance = 50)
copenhagen_temp <- get_GSOD(2018, station = copenhagen)
austin_temp <- get_GSOD(2018, station = austin)
january <- bind_rows(copenhagen_temp, austin_temp) %>%
filter(MONTH == '01') %>%
distinct(YDAY, STNID, .keep_all = TRUE) %>%
mutate(location = if_else(STNID %in% copenhagen, 'Copenhagen', 'Austin'))
select(january, YDAY, TEMP, location, STNID)
```
```{r}
p <- ggplot(january) +
geom_line(aes(x = YDAY, y = TEMP,
colour = location,
group = STNID)) +
scale_colour_brewer(type = 'qual') +
theme(legend.position = 'bottom') +
labs(x = 'Day of Month',
y = 'Temperature (celcius)',
colour = NULL)
p
```
```{r temp_trans_time}
p +
transition_time(YDAY)
```
```{r temp_shadow_mark}
p +
transition_time(YDAY) +
shadow_mark()
```
```{r trans_reveal}
p +
transition_reveal(YDAY)
```
```{r point_group}
p +
transition_reveal(YDAY) +
geom_point(aes(x = YDAY, y = TEMP,
colour = location,
group = STNID))
```
```{r point_ungroup}
p + transition_reveal(YDAY) +
geom_point(aes(x = YDAY, y = TEMP,
colour = location,
group = seq_along(STNID)))
```
```{r}
p <- ggplot(january) +
geom_smooth(aes(x = YDAY, y = TEMP,
colour = location)) +
scale_colour_brewer(type = 'qual') +
theme(legend.position = 'bottom') +
labs(x = 'Day of Month',
y = 'Temperature (celcius)',
colour = NULL)
p
```
```{r reveal_stat}
p +
transition_reveal(stat(x))
```
# Example 3
```{r eq data, message=FALSE}
library(lubridate)
# download.file('http://service.iris.edu/fdsnws/event/1/query?minmag=0&maxmag=10&orderby=time&format=geocsv&nodata=404', '~/Desktop/earthquakes.txt')
earthquakes <- readr::read_table(
'~/Desktop/earthquakes.txt',
sep = '|', header = TRUE, skip = 4) %>%
filter(Magnitude > 5) %>%
mutate(Time = as_date(Time)) %>%
filter(Time >= ymd('2018-01-01') & Time <= ymd('2018-12-31')) %>%
mutate(Month = factor(format(Time, '%B'), month.name))
earthquakes
```
```{r}
p <- ggplot(earthquakes) +
geom_bar(aes(x = Month, fill = stat(count))) +
scale_fill_distiller(palette = 'Reds', direction = 1) +
scale_y_continuous(expand = c(0, 0, 0.05, 0)) +
labs(x = NULL, y = 'Count') +
theme_minimal() +
theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(colour = 'white'),
panel.ontop = TRUE,
axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1),
legend.position = 'none')
p
```
```{r eq_state}
p +
transition_states(Month, wrap = FALSE) +
shadow_mark()
```
```{r eq_enters_grow}
p +
transition_states(Month, wrap = FALSE) +
shadow_mark() +
enter_grow()
```
```{r eq_enters_growfade}
p +
transition_states(Month, wrap = FALSE) +
shadow_mark() +
enter_grow() +
enter_fade()
```
```{r}
library(sf)
eq <- st_multipoint(cbind(earthquakes$Longitude,
earthquakes$Latitude)) %>%
st_sfc(crs = '+proj=longlat +datum=WGS84 +no_defs') %>%
st_sf(geometry = .) %>%
st_transform('+proj=robin +datum=WGS84 +no_defs +over') -> eq
earthquakes <- earthquakes %>%
mutate(x = eq$geometry[[1]][, 1], y = eq$geometry[[1]][, 2])
earth <- rnaturalearth::ne_countries(returnclass = 'sf') %>%
sf::st_union()
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment