---
tags: bym4102
---
this document is available at https://hackmd.io/@_XewoO5-TXqsfl7SIIJhLQ/Sk9TGsR8d/edit
# Plotting with ggplot2
## Layers of ggplot


Let's try to plot something like this:

For the background about this data lease visit [this site](https://rpubs.com/alperyilmaz/lesson01).
# The code
```r
library(tidyverse)
library(gapminder) #installed in rstudio.cloud
library(gganimate) #installed in rstudio.cloud
```
```r
gapminder
```
```r
data2007 <- gapminder %>%
filter(year==2007) %>%
select(country, lifeExp, gdpPercap)
data2007
```
# Layers of ggplot

```r
data2007 %>%
ggplot()
```
```r
data2007 %>%
ggplot(aes(x=gdpPercap, y=lifeExp))
```
```r
data2007 %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point()
```
```r
data2007 %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point() +
scale_x_log10()
```
```r
data2007 %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point() +
scale_x_log10() +
theme_bw()
```
```r
data2007 %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point() +
scale_x_log10() +
ggtitle("Year 2007") +
theme_bw()
```
```r
data2007 %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point() +
scale_x_log10() +
ggtitle("Year 2007") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
```
# To map or not to map
```r
data2007 %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point(color="blue") +
scale_x_log10() +
ggtitle("Year 2007") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
```
Let's get the original data and map color to "continent"
```r
gapminder %>%
filter(year==2007) %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point(aes(color=continent)) +
scale_x_log10() +
ggtitle("Year 2007") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
```
```r
gapminder %>%
filter(year==2007) %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point(aes(color=continent), size=3) +
scale_x_log10() +
ggtitle("Year 2007") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
```
```r
gapminder %>%
filter(year==2007) %>%
ggplot(aes(x=gdpPercap, y=lifeExp)) +
geom_point(aes(color=continent, size=pop), alpha=0.7) +
scale_x_log10() +
ggtitle("Year 2007") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
```
## Faceting
Let's get data for three countries
```r
# gapminder %>% filter(str_detect(country,"Kor"))
gapminder %>%
filter(country=="Turkey" | country=="Brazil" | country =="Korea, Rep.")
```
`%in%` operator is much better for filtering from a known list
```r
my_countries <- c("Turkey", "Brazil","Korea, Rep.")
p <- gapminder %>%
filter(country %in% my_countries) %>%
ggplot(aes(x=gdpPercap, y=lifeExp, group=country, color=country)) +
geom_line() +
facet_wrap(~country)
p
```
You can add more layers to an existing ggplot object (*p* in this case)
```r
p +
scale_x_log10() +
ggtitle("Three countries") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
```
# animate
`gganimate` is quite powerful and yet easy. Just add couple functions to existing ggplot objects so that they become alive :+1:
```r
p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
geom_point(alpha = 0.7) +
scale_colour_manual(values = country_colors) +
scale_size(range = c(2, 12)) +
scale_x_log10() +
facet_wrap(~continent) +
theme(legend.position = 'none') +
labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
# it was just ggplot until here
transition_time(year) +
ease_aes('linear')
animate(p,renderer = gifski_renderer())
```
```r
anim_save("gapminder.gif")
```
