This document is a record of some basic ggplot2 exercises.
library(tidyverse)
library(gapminder)
# Put the data in the Environment
gapminder <- gapminder::gapminder
# Extract the data for the latest year in the dataset, for plots that don't involve year.
gapminder_latest <- filter(gapminder, year == 2007)
🚧 After running the setup code chunk, you should have
two tibbles, both listed in the “Environment” tab. Name and describe
those tibbles here. You may know more about their value when ’re
finished with the lab, so write what you can now and come back later and
fill in the details.
Styling and labeling plots
🚧 Imagine that you’re trying to understand the life expectancy in
the US over time, and modify the following plot to:
- Add labels (labs) for the x and y axes. Use ?gapminder at the
Console to get the data documentation if needed.
- Add a title (also labs).
- Set the color of the line to green. (Is it green now?)
- Set the chunk name to something more meaningful than plot-1.
Finally, add a short explanation of what the visualization
suggests.
gapminder %>%
filter(country == "United States") %>%
ggplot() +
aes(x = year, y = lifeExp) +
geom_line()

Mapping vs Faceting
🚧 In the following plot, notice that we’re filtering to
only include rows where the country is in the list of
countries that we made. This is so that we don’t have 142
different colors or facets in these graphs.
Imagine that you’re trying to understand the life expectancy in these
countries over time, and then do the following:
- Run the plot as specified. Why is it shaped like this? (If you’re
not sure, click
gapminder in the Environment pane and think
about how you’d draw a line with that data.)
- Map
color to country. How has the plot
changed?
- Facet by country. Is this better than the color mapping?
- Setting
scales = "free_y" in the faceting function. Is
this better?
When finished, set your plot to the most useful form given the goal
stated above. Add an explanation of what the visualization suggests.
countries <- c(
"China", "India", "United States",
"Indonesia", "Brazil", "Pakistan",
"Bangladesh", "Nigeria", "Japan")
gapminder %>%
filter(country %in% countries) %>%
ggplot() +
aes(x = year, y = lifeExp) +
geom_line()

Univariate analysis — Continuous
🚧 Pick one of the continuous variables and pose a question you’d
like to answer. Then, make a plot that shows its distribution and help
answer your question.
Include your plot and a description of what it suggests with respect
to your initial question.
Univariate Analysis — Categorical
🚧 Imagine that you’d like to know which continent has the most
countries. Compose a plot that helps to answer this question. (Use
gapminder_latest, which has one row per country.)
Include your plot and a description of what it suggests with respect
to the given question.
Bivariate Analysis — Numerical/Categorical
🚧 Pick one of the continuous variables and set a question you’d like
to answer about that variable with respect to the continents. If
possible, choose a variable you haven’t chosen before. Compose a plot
that helps you answer your question.
Include your plot and a description of what it suggests with respect
to your initial question.
LS0tCnRpdGxlOiAiTGFiIDQuMSAtIFBsb3R0aW5nIHdpdGggYGdncGxvdDJgIgphdXRob3I6ICJBdXRob3IgR29lcyBIZXJlIgpkYXRlOiAiU2VtZXN0ZXIgR29lcyBIZXJlIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgpUaGlzIGRvY3VtZW50IGlzIGEgcmVjb3JkIG9mIHNvbWUgYmFzaWMgZ2dwbG90MiBleGVyY2lzZXMuCgpgYGB7ciBzZXR1cCwgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2FwbWluZGVyKQoKIyBQdXQgdGhlIGRhdGEgaW4gdGhlIEVudmlyb25tZW50CmdhcG1pbmRlciA8LSBnYXBtaW5kZXI6OmdhcG1pbmRlcgoKIyBFeHRyYWN0IHRoZSBkYXRhIGZvciB0aGUgbGF0ZXN0IHllYXIgaW4gdGhlIGRhdGFzZXQsIGZvciBwbG90cyB0aGF0IGRvbid0IGludm9sdmUgeWVhci4KZ2FwbWluZGVyX2xhdGVzdCA8LSBmaWx0ZXIoZ2FwbWluZGVyLCB5ZWFyID09IDIwMDcpCmBgYAoK8J+apwpBZnRlciBydW5uaW5nIHRoZSBgc2V0dXBgIGNvZGUgY2h1bmssIHlvdSBzaG91bGQgaGF2ZSB0d28gdGliYmxlcywgYm90aCBsaXN0ZWQgaW4gdGhlICJFbnZpcm9ubWVudCIgdGFiLiBOYW1lIGFuZCBkZXNjcmliZSB0aG9zZSB0aWJibGVzIGhlcmUuIFlvdSBtYXkga25vdyBtb3JlIGFib3V0IHRoZWlyIHZhbHVlIHdoZW4gJ3JlIGZpbmlzaGVkIHdpdGggdGhlIGxhYiwgc28gd3JpdGUgd2hhdCB5b3UgY2FuIG5vdyBhbmQgY29tZSBiYWNrIGxhdGVyIGFuZCBmaWxsIGluIHRoZSBkZXRhaWxzLgoKIyMgU3R5bGluZyBhbmQgbGFiZWxpbmcgcGxvdHMKCvCfmqcKSW1hZ2luZSB0aGF0IHlvdSdyZSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZSBleHBlY3RhbmN5IGluIHRoZSBVUyBvdmVyIHRpbWUsIGFuZCBtb2RpZnkgdGhlIGZvbGxvd2luZyBwbG90IHRvOgoKMS4gQWRkIGxhYmVscyAobGFicykgZm9yIHRoZSB4IGFuZCB5IGF4ZXMuIFVzZSA/Z2FwbWluZGVyIGF0IHRoZSBDb25zb2xlIHRvIGdldCB0aGUgZGF0YSBkb2N1bWVudGF0aW9uIGlmIG5lZWRlZC4KMi4gQWRkIGEgdGl0bGUgKGFsc28gbGFicykuCjMuIFNldCB0aGUgY29sb3Igb2YgdGhlIGxpbmUgdG8gZ3JlZW4uIChJcyBpdCBncmVlbiBub3c/KQo0LiBTZXQgdGhlIGNodW5rIG5hbWUgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bCB0aGFuIHBsb3QtMS4KCkZpbmFsbHksIGFkZCBhIHNob3J0IGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhlIHZpc3VhbGl6YXRpb24gc3VnZ2VzdHMuCgpgYGB7ciBwbG90LTF9CmdhcG1pbmRlciAlPiUgCiAgZmlsdGVyKGNvdW50cnkgPT0gIlVuaXRlZCBTdGF0ZXMiKSAlPiUgCiAgZ2dwbG90KCkgKwogIGFlcyh4ID0geWVhciwgeSA9IGxpZmVFeHApICsKICBnZW9tX2xpbmUoKQpgYGAKCiMjIE1hcHBpbmcgdnMgRmFjZXRpbmcKCvCfmqcKSW4gdGhlIGZvbGxvd2luZyBwbG90LCBub3RpY2UgdGhhdCB3ZSdyZSBgZmlsdGVyYGluZyB0byBvbmx5IGluY2x1ZGUgcm93cyB3aGVyZSB0aGUgYGNvdW50cnlgIGlzIGluIHRoZSBsaXN0IG9mIGBjb3VudHJpZXNgIHRoYXQgd2UgbWFkZS4gVGhpcyBpcyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgYHIgbGVuZ3RoKHVuaXF1ZShnYXBtaW5kZXIkY291bnRyeSkpYCBkaWZmZXJlbnQgY29sb3JzIG9yIGZhY2V0cyBpbiB0aGVzZSBncmFwaHMuCgpJbWFnaW5lIHRoYXQgeW91J3JlIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBsaWZlIGV4cGVjdGFuY3kgaW4gdGhlc2UgY291bnRyaWVzIG92ZXIgdGltZSwgYW5kIHRoZW4gZG8gdGhlIGZvbGxvd2luZzoKCjEuIFJ1biB0aGUgcGxvdCBhcyBzcGVjaWZpZWQuIFdoeSBpcyBpdCBzaGFwZWQgbGlrZSB0aGlzPyAoSWYgeW91J3JlIG5vdCBzdXJlLCBjbGljayBgZ2FwbWluZGVyYCBpbiAgdGhlIEVudmlyb25tZW50IHBhbmUgYW5kIHRoaW5rIGFib3V0IGhvdyB5b3UnZCBkcmF3IGEgbGluZSB3aXRoIHRoYXQgZGF0YS4pCjIuIE1hcCBgY29sb3JgIHRvIGBjb3VudHJ5YC4gSG93IGhhcyB0aGUgcGxvdCBjaGFuZ2VkPwozLiBGYWNldCBieSBjb3VudHJ5LiBJcyB0aGlzIGJldHRlciB0aGFuIHRoZSBjb2xvciBtYXBwaW5nPwo0LiBTZXR0aW5nIGBzY2FsZXMgPSAiZnJlZV95ImAgaW4gdGhlIGZhY2V0aW5nIGZ1bmN0aW9uLiBJcyB0aGlzIGJldHRlcj8KCldoZW4gZmluaXNoZWQsIHNldCB5b3VyIHBsb3QgdG8gdGhlIG1vc3QgdXNlZnVsIGZvcm0gZ2l2ZW4gdGhlIGdvYWwgc3RhdGVkIGFib3ZlLiBBZGQgYW4gZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGUgdmlzdWFsaXphdGlvbiBzdWdnZXN0cy4KCmBgYHtyIHBsb3QtMn0KY291bnRyaWVzIDwtIGMoCiAgIkNoaW5hIiwgIkluZGlhIiwgIlVuaXRlZCBTdGF0ZXMiLAogICJJbmRvbmVzaWEiLCAiQnJhemlsIiwgIlBha2lzdGFuIiwKICAiQmFuZ2xhZGVzaCIsICJOaWdlcmlhIiwgIkphcGFuIikKCmdhcG1pbmRlciAlPiUgCiAgZmlsdGVyKGNvdW50cnkgJWluJSBjb3VudHJpZXMpICU+JSAKICBnZ3Bsb3QoKSArCiAgYWVzKHggPSB5ZWFyLCB5ID0gbGlmZUV4cCkgKwogIGdlb21fbGluZSgpCmBgYAoKIyMgVW5pdmFyaWF0ZSBhbmFseXNpcyAtLS0gQ29udGludW91cwoK8J+apwpQaWNrIG9uZSBvZiB0aGUgY29udGludW91cyB2YXJpYWJsZXMgYW5kIHBvc2UgYSBxdWVzdGlvbiB5b3UnZCBsaWtlIHRvIGFuc3dlci4gVGhlbiwgbWFrZSBhIHBsb3QgdGhhdCBzaG93cyBpdHMgZGlzdHJpYnV0aW9uIGFuZCBoZWxwIGFuc3dlciB5b3VyIHF1ZXN0aW9uLiAKCkluY2x1ZGUgeW91ciBwbG90IGFuZCBhIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXQgc3VnZ2VzdHMgd2l0aCByZXNwZWN0IHRvIHlvdXIgaW5pdGlhbCBxdWVzdGlvbi4KCiMjIFVuaXZhcmlhdGUgQW5hbHlzaXMgLS0tIENhdGVnb3JpY2FsCgrwn5qnCkltYWdpbmUgdGhhdCB5b3UnZCBsaWtlIHRvIGtub3cgd2hpY2ggY29udGluZW50IGhhcyB0aGUgbW9zdCBjb3VudHJpZXMuIENvbXBvc2UgYSBwbG90IHRoYXQgaGVscHMgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24uIChVc2UgYGdhcG1pbmRlcl9sYXRlc3RgLCB3aGljaCBoYXMgb25lIHJvdyBwZXIgY291bnRyeS4pCgpJbmNsdWRlIHlvdXIgcGxvdCBhbmQgYSBkZXNjcmlwdGlvbiBvZiB3aGF0IGl0IHN1Z2dlc3RzIHdpdGggcmVzcGVjdCB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uCgojIyBCaXZhcmlhdGUgQW5hbHlzaXMgLS0tIE51bWVyaWNhbC9DYXRlZ29yaWNhbAoK8J+apwpQaWNrIG9uZSBvZiB0aGUgY29udGludW91cyB2YXJpYWJsZXMgYW5kIHNldCBhIHF1ZXN0aW9uIHlvdSdkIGxpa2UgdG8gYW5zd2VyIGFib3V0IHRoYXQgdmFyaWFibGUgd2l0aCByZXNwZWN0IHRvIHRoZSBjb250aW5lbnRzLiBJZiBwb3NzaWJsZSwgY2hvb3NlIGEgdmFyaWFibGUgeW91IGhhdmVuJ3QgY2hvc2VuIGJlZm9yZS4gQ29tcG9zZSBhIHBsb3QgdGhhdCBoZWxwcyB5b3UgYW5zd2VyIHlvdXIgcXVlc3Rpb24uCgpJbmNsdWRlIHlvdXIgcGxvdCBhbmQgYSBkZXNjcmlwdGlvbiBvZiB3aGF0IGl0IHN1Z2dlc3RzIHdpdGggcmVzcGVjdCB0byB5b3VyIGluaXRpYWwgcXVlc3Rpb24uCg==