+ - 0:00:00
Notes for current slide
Notes for next slide

Visualize data
with ggplot2

ggplot
1 / 49

Cars and displacement

What is the relationship between a car's
engine weight (displacement) and its mileage (miles per gallon)?

2 / 49

Your turn #1

Run this code in your Quarto file to make a graph

Pay attention to spelling, capitalization, and parentheses!

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
02:00
3 / 49
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))

4 / 49
5 / 49

Source: Wikipedia

Long distance!

Moscow to Vilnius
Moscow to Vilnius
6 / 49

Very cold!

7 / 49

Lots of people died!

8 / 49
9 / 49

Mapping data to aesthetics

Grammar of Graphics book

Aesthetic

Visual property of a graph

Position, shape, color, etc.

Data

A column in a dataset

10 / 49

Mapping data to aesthetics

Data Aesthetic Graphic/Geometry
Longitude Position (x-axis)  Point
Latitude Position (y-axis) Point
Army size Size Path
Army direction  Color Path
Date Position (x-axis) Line + text
Temperature Position (y-axis) Line + text
11 / 49

Mapping data to aesthetics

Data aes() geom
Longitude x geom_point()
Latitude y geom_point()
Army size size geom_path()
Army direction  color geom_path()
Date x geom_line() + geom_text()
Temperature y geom_line() + geom_text()
12 / 49

ggplot() template

ggplot(data = DATA) +
  GEOM_FUNCTION(mapping = aes(AESTHETIC MAPPINGS))

13 / 49

ggplot() template

ggplot(data = DATA) +
  GEOM_FUNCTION(mapping = aes(AESTHETIC MAPPINGS))

ggplot(data = troops) +
  geom_path(mapping = aes(x = longitude,
                          y = latitude,
                          color = direction,
                          size = survivors))

13 / 49

This is a dataset named troops:

longitude latitude direction survivors
24 54.9 A 340000
24.5 55 A 340000
14 / 49

This is a dataset named troops:

longitude latitude direction survivors
24 54.9 A 340000
24.5 55 A 340000

ggplot(data = troops) +
  geom_path(mapping = aes(x = longitude,
                          y = latitude,
                          color = direction,
                          size = survivors))

14 / 49

15 / 49
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))

16 / 49

Heavy cars with better mileage?

17 / 49

Aesthetics

color (discrete)

color (continuous)

size

fill

shape

alpha

18 / 49

Mapping columns to aesthetics

ggplot(mpg) + geom_point(aes(x = displ, y = hwy, color = class))
ggplot(mpg) + geom_point(aes(x = displ, y = hwy, size = class))
ggplot(mpg) + geom_point(aes(x = displ, y = hwy, shape = class))
ggplot(mpg) + geom_point(aes(x = displ, y = hwy, alpha = class))
19 / 49
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))

20 / 49

Your turn #2

Add color, size, alpha, and shape aesthetics to your graph.

Experiment!

Do different things happen when you map aesthetics to discrete and continuous variables?

What happens when you use more than one aesthetic?

21 / 49

How would you make this plot?

22 / 49
ggplot(mpg) +
geom_point(aes(x = displ, y = hwy,
color = class))

23 / 49
ggplot(mpg) +
geom_point(aes(x = displ, y = hwy),
color = "blue")

24 / 49
ggplot(mpg) +
geom_point(aes(x = displ, y = hwy,
color = "blue"))

ggplot(mpg) +
geom_point(aes(x = displ, y = hwy),
color = "blue")

25 / 49

What's the same? What's different?

26 / 49

Geoms

ggplot(data = DATA) +
  GEOM_FUNCTION(mapping = aes(AESTHETIC MAPPINGS))

27 / 49

Possible geoms

Example geom What it makes
geom_col() Bar charts
geom_text() Text
geom_point() Points
geom_boxplot() Boxplots
geom_sf() Maps
28 / 49

Possible geoms

There are dozens of possible geoms!

See the ggplot2 documentation for
complete examples of all the different geom layers

Also see the ggplot cheatsheet

29 / 49

Your turn #3

Replace this scatterplot with boxplots. Use the cheatsheet.

03:00
30 / 49

Your turn #4

Make a histogram of hwy. Use the cheetsheet.
Hint: don't supply a y variable.

31 / 49

Your turn #5

Make this density plot of hwy colored by class.
Use the cheatsheet. Hint: don't supply a y variable.

32 / 49

Complex graphs!

33 / 49

Your turn #6

Predict what this code will do. Then run it.

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
geom_smooth(mapping = aes(x = displ, y = hwy))
02:00
34 / 49

Global vs. local

Any aesthetics in ggplot() will show up in all geom_ layers

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point() +
geom_smooth()

35 / 49

Global vs. local

Any aesthetics in geom_ layers only apply to that layer

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = drv)) +
geom_smooth()

36 / 49

So much more!

There are many other layers we can use to make and enhance graphs!

We sequentially add layers onto the foundational ggplot() plot to create complex figures

37 / 49

Putting it all together

We can build a plot sequentially
to see how each grammatical layer
changes the appearance

38 / 49

Start with data and aesthetics

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv))

39 / 49

Add a point geom

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point()

40 / 49

Add a smooth geom

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth()

41 / 49

Make it straight

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(method = "lm")

42 / 49

Use a viridis color scale

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(method = "lm") +
scale_color_viridis_d()

43 / 49

Facet by drive

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(method = "lm") +
scale_color_viridis_d() +
facet_wrap(vars(drv), ncol = 1)

44 / 49

Add labels

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(method = "lm") +
scale_color_viridis_d() +
facet_wrap(vars(drv), ncol = 1) +
labs(x = "Displacement", y = "Highway MPG",
color = "Drive",
title = "Heavier cars get lower mileage",
subtitle = "Displacement indicates weight(?)",
caption = "I know nothing about cars")

45 / 49

Add a theme

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(method = "lm") +
scale_color_viridis_d() +
facet_wrap(vars(drv), ncol = 1) +
labs(x = "Displacement", y = "Highway MPG",
color = "Drive",
title = "Heavier cars get lower mileage",
subtitle = "Displacement indicates weight(?)",
caption = "I know nothing about cars") +
theme_bw()

46 / 49

Modify the theme

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(method = "lm") +
scale_color_viridis_d() +
facet_wrap(vars(drv), ncol = 1) +
labs(x = "Displacement", y = "Highway MPG",
color = "Drive",
title = "Heavier cars get lower mileage",
subtitle = "Displacement indicates weight(?)",
caption = "I know nothing about cars") +
theme_bw() +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"))

47 / 49

Finished!

ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = drv)) +
geom_point() +
geom_smooth(method = "lm") +
scale_color_viridis_d() +
facet_wrap(vars(drv), ncol = 1) +
labs(x = "Displacement", y = "Highway MPG",
color = "Drive",
title = "Heavier cars get lower mileage",
subtitle = "Displacement indicates weight(?)",
caption = "I know nothing about cars") +
theme_bw() +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"))

48 / 49

Next up

Transforming and
manipulating data with dplyr

49 / 49

Cars and displacement

What is the relationship between a car's
engine weight (displacement) and its mileage (miles per gallon)?

2 / 49
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
oTile View: Overview of Slides
Esc Back to slideshow