Similarly to discrete variables, we can add a scale_x_continuous()
layer to customize continuous variables on our x
axis, or a scale_y_continuous()
layer to customize continuous variables on our y
axis. We can also add a coord_cartesian
layer to specify the range of values shown on a given axis, allowing us to zoom in and out of the plot region.
Continuing with our plot of sleep hours by diet, let’s set the y
axis to be between 8
and 12
. Most animals sleep at least few hours a day, so we don’t need our y
axis to start exactly at 0
. We can adjust our y
axis ranges by adding a coord_cartesian()
layer and passing a vector c(8, 12)
to its ylim
argument, specifying the min and max values of the y
axis.
msleep_start <- ggplot(msleep_error_df, aes(x = diet, y = mean.hours)) + geom_bar(stat = "identity") + geom_errorbar(aes(ymin = se.min, ymax = se.max), width = 0.2) + scale_x_discrete( limits = c("omni", "carni", "herbi"), labels = c("carni" = "Carnivore", "herbi" = "Herbivore", "omni" = "Omnivore")) + labs(title = "Mean Hours Asleep by Diet") msleep_continuous <- msleep_start + coord_cartesian(ylim = c(8, 12))
Now our plot looks like this. Our y
axis begins at 8
and ends at 12
as we specified. The differences between each bar’s height are much more obvious – omnivores sleep the most on average, while herbivores sleep the least!
We can also customize the labels shown for the y
axis tick marks using the breaks
argument of the scale_y_continuous()
layer. In the code below, we pass a vector c(8, 10, 12)
to specify that we only want tick marks on the y
axis to appear at 8
, 10
, and 12
.
msleep_continuous <- msleep_start + coord_cartesian(ylim = c(8, 12)) + scale_y_continuous(breaks = c(8, 10, 12))
Here is our new plot:
Finally, we can apply custom transformations to our tick mark labels. Let’s say we want to add a unit of measurement “hrs” to each number on the y
axis. We can pass a custom function to the labels
argument of scale_y_continuous()
. Here, we are telling ggplot2
to take the automatic labels and add the characters " hrs"
after each label.
show_as_hours <- function(x) { output <- paste0(x, " hrs") return(output) } msleep_continuous <- msleep_start + coord_cartesian(ylim = c(8, 12)) + scale_y_continuous(labels = show_as_hours, breaks = c(8, 10, 12))
Here’s what our plot with its newly labeled y
axis looks like:
Instructions
Continuing with our graduation_df
plot of mean graduation percentages by year, complete the starting code provided by adding a scale_y_continuous()
layer to customize the y
axis. Display the y
axis as percentages (e.g. 60%) rather than ratios (e.g. 0.6) using a custom function specified in the labels
argument. The scales
package comes automatically loaded with ggplot2
and includes a variety of functions for transforming labels. Apply the function scales::label_percent()
to our y
axis labels.
Print graduation_continuous
to see what it looks like.