---
title: "cm013 Supplemental"
output:
html_document:
keep_md: true
theme: paper
---
```{r}
suppressPackageStartupMessages(library(tidyverse))
library(gapminder)
```
# Saving Graphs to File
- Don't use the mouse
- Use `ggsave` for ggplot
- Practice by saving the following plot to file:
```{r}
ggplot(mtcars, aes(hp, wt)) +
geom_point()
ggsave(FILENAME_HERE, PLOT_OBJECT_HERE)
```
- Base R way: print plots "to screen", sandwiched between `pdf()`/`jpeg()`/`png()`... and `dev.off()`.
- Vector vs. raster: Images are stored on your computer as either _vector_ or _raster_.
- __Raster__: an `n` by `m` grid of pixels, each with its own colour. `jpeg`, `png`, `gif`, `bmp`.
- __Vector__: represented as shapes and lines. `pdf`, [`svg`](https://www.w3schools.com/graphics/svg_intro.asp).
- For tips: ["10 tips for making your R graphics look their best""](http://blog.revolutionanalytics.com/2009/01/10-tips-for-making-your-r-graphics-look-their-best.html).
# Scales; Colour
Scale functions in `ggplot2` take the form `scale_[aesthetic]_[mapping]()`.
Let's first focus on the following plot:
```{r}
p_scales <- ggplot(gapminder, aes(gdpPercap, lifeExp)) +
geom_point(aes(colour=pop), alpha=0.2)
p_scales +
scale_x_log10() +
scale_colour_continuous(trans="log10")
```
1. Change the y-axis tick mark spacing to 10; change the colour spacing to include all powers of 10.
```{r}
p_scales +
scale_x_log10() +
scale_colour_continuous(
trans = "log10",
breaks = FILL_IN_BREAKS
) +
FILL_IN_SCALE_FUNCTION(breaks=FILL_IN_BREAKS)
```
2. Specify `scales::*_format` in the `labels` argument of a scale function to do the following:
- Change the x-axis labels to dollar format (use `scales::dollar_format()`)
- Change the colour labels to comma format (use `scales::comma_format()`)
```{r}
library(scales)
p_scales +
scale_x_log10(labels=FILL_THIS_IN) +
scale_colour_continuous(
trans = "log10",
breaks = 10^(1:10),
labels = FILL_THIS_IN
) +
scale_y_continuous(breaks=10*(1:10))
```
3. Use `RColorBrewer` to change the colour scheme.
- Notice the three different types of scales: sequential, diverging, and continuous.
```{r}
## All palettes the come with RColorBrewer:
RColorBrewer::display.brewer.all()
p_scales +
scale_x_log10(labels=dollar_format()) +
FILL_IN_WITH_RCOLORBREWER(
trans = "log10",
breaks = 10^(1:10),
labels = comma_format(),
palette = FILL_THIS_IN
) +
scale_y_continuous(breaks=10*(1:10))
```
4. Use `viridis` to change the colour to a colour-blind friendly scheme
- Hint: add `scale_colour_viridis_c` (`c` stands for continuous; `d` discrete).
- You can choose a palette with `option`.
```{r}
p_scales +
scale_x_log10(labels=dollar_format()) +
FILL_IN_WITH_RCOLORBREWER(
trans = "log10",
breaks = 10^(1:10),
labels = comma_format(),
palette = FILL_THIS_IN
) +
scale_y_continuous(breaks=10*(1:10))
```
# Theming
Changing the look of a graphic can be achieved through the `theme()` layer.
There are ["complete themes"](http://ggplot2.tidyverse.org/reference/ggtheme.html) that come with `ggplot2`, my favourite being `theme_bw` (I've grown tired of the default gray background, so `theme_bw` is refreshing).
1. Change the theme of the following plot to `theme_bw()`:
```{r}
ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
facet_wrap(~ Species) +
geom_point() +
labs(x = "Sepal Width",
y = "Sepal Length",
title = "Sepal sizes of three plant species")
```
2. Then, change font size of axis labels, and the strip background colour. Others?
```{r}
ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
facet_wrap(~ Species) +
geom_point() +
labs(x = "Sepal Width",
y = "Sepal Length",
title = "Sepal sizes of three plant species") +
theme_bw() +
theme(FILL_IN_ARG_FOR_AXIS_TITLE = FILL_THIS_IN,
strip.background = FILL_THIS_IN)
```
# Plotly
Consider the following plot:
```{r}
(p <- gapminder %>%
filter(continent != "Oceania") %>%
ggplot(aes(gdpPercap, lifeExp)) +
geom_point(aes(colour=pop), alpha=0.2) +
scale_x_log10(labels=dollar_format()) +
scale_colour_distiller(
trans = "log10",
breaks = 10^(1:10),
labels = comma_format(),
palette = "Greens"
) +
facet_wrap(~ continent) +
scale_y_continuous(breaks=10*(1:10)) +
theme_bw())
```
1. Convert it to a `plotly` object by applying the `ggplotly()` function:
```{r}
FILL_THIS_IN
```
2. You can save a plotly graph locally as an html file. Try saving the above:
- NOTE: plotly graphs don't seem to show up in Rmd _notebooks_, but they do with Rmd _documents_.
```{r}
p %>%
ggplotly() %>%
htmlwidgets::saveWidget("LOCATION_GOES_HERE")
```
3. Run this code to see the json format underneath:
```{r}
p %>%
ggplotly() %>%
plotly_json()
```
4. Check out code to make a plotly object from scratch using `plot_ly()` -- scatterplot of gdpPercap vs lifeExp.
- Check out the [cheat sheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf).
```{r}
plot_ly(gapminder,
x = ~gdpPercap,
y = ~lifeExp,
type = "scatter",
mode = "markers",
opacity = 0.2) %>%
layout(xaxis = list(type = "log"))
```
5. Add population to form a z-axis for a 3D plot:
```{r}
plot_ly(gapminder,
x = ~gdpPercap,
y = ~lifeExp,
z = FILL_THIS_IN,
type = "scatter3d",
mode = "markers",
opacity = 0.2)
```