This section introduces the ggplot2
graphics. You will see how different the syntax is from the base-R graphics. You can think of ggplot2
creating graphs by combining layers with the "+" sign. The default gray background of the ggplot
is not as good for printed publications and can be replaced by adding a theme layer, for example, + theme_minimal()
Key Points
-
Use
ggplot2
to create plots. -
Think about graphics in layers: aesthetics, geometry, statistics, scale transformation, and grouping.
Layers
Using a scatterplot probably isn't the best for visualizing change over time.
Instead, let's tell ggplot
to visualize the data as a line plot:
ggplot(data = gapminder, mapping = aes(x=year, y=lifeExp, color=continent)) + geom_line()
Instead of adding a geom_point
layer, we've added a geom_line
layer.
However, the result doesn't look quite as we might have expected: it seems to be jumping around a lot in each continent. Let's try to separate the data by country, plotting one line for each country:
ggplot(data = gapminder, mapping = aes(x=year, y=lifeExp, by=country, color=continent)) + geom_line()
We've added the by aesthetic, which tells ggplot
to draw a line for each
country.
But what if we want to visualize both lines and points on the plot? We can add another layer to the plot:
ggplot(data = gapminder, mapping = aes(x=year, y=lifeExp, by=country, color=continent)) + geom_line() + geom_point()
It's important to note that each layer is drawn on top of the previous layer. In this example, the points have been drawn on top of the lines. Here's a demonstration:
ggplot(data = gapminder, mapping = aes(x=year, y=lifeExp, by=country)) + geom_line(mapping = aes(color=continent)) + geom_point()
In this example, the aesthetic mapping of color has been moved from the
global plot options in ggplot
to the geom_line
layer so it no longer applies
to the points. Now we can clearly see that the points are drawn on top of the
lines.
Tip: Setting an aesthetic to a value instead of a mapping
So far, we've seen how to use an aesthetic (such as color) as a mapping to a variable in the data. For example, when we use
geom_line(mapping = aes(color=continent))
, ggplot will give a different color to each continent. But what if we want to change the color of all lines to blue? You may think thatgeom_line(mapping = aes(color="blue"))
should work, but it doesn't. Since we don't want to create a mapping to a specific variable, we can move the color specification outside of theaes()
function, like this:geom_line(color="blue")
.