Back to: Introduction to R
It is very important when making graphs to be able to label features. We will look at various ways in which we can label our graphics now.
Labeling the Axes
We can add a lot of features to the axes but for now we will just change labels. We use
ylab for this, if we set them to
NULL we have blank axes labels. For example we can make a graph based on departure delay and speed:
ggplot(data, aes(dep_delay, distance/air_time*60)) + geom_point(alpha = 1 / 3) + xlab("Departure Delay (minutes)") + ylab("Speed (MPH)")
We can see that the
xlab() and the
ylab() functions are just added in as layers. They produce the graph below.
Other Text Labels
Aside from labeling the axes, many times we want to add other text into our graphics.
geom_text will allow a user to add text to a graph. We simply add
geom_text() as a layer and this layer has the following options:
family allows a user to specify font.
fontface allows a user to specify: plain, bold or italic.
hjust, vjust allows a user to specify location of the text.
size allows the user to adjust the size of a graph.
We will first look at the different font styles that could be used with
geom_text() using the
family option. These 3 fonts work with every type of graph in ggplot:
df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono")) ggplot(df, aes(x, y)) + geom_text(aes(label = family, family = family))
As you can see below we now have three different labels with three different font types.
Font Face Styles
Many times we also wish to add other attributes to our text. The font face allows for plain text, bold text, and italic text.
df <- data.frame(x = 1, y = 3:1, face = c("plain", "bold", "italic")) ggplot(df, aes(x, y)) + geom_text(aes(label = face, fontface = face))
geom_text() is a layer and this time we use the text labels of:
Then we specify that each of these has the same face as their name.
Nudge to label existing points
The nudge allows us to move the text horizontally or vertically to label points. If we did not do this, our text would lie directly on top of the point. We use
nudge_y in order to move the text in the
df <- data.frame(trt = c("a", "b", "c"), resp = c(1.2, 3.4, 2.5)) ggplot(df, aes(resp, trt)) + geom_point() + geom_text(aes(label = paste0("(", resp, ")")), nudge_y = -0.25) + xlim(1, 3.6)
The code above uses the
paste command which takes information and combines it together. In this example the paste will take the values of
resp and place them inside parenthesis. Then we use
nudge_y-0.25 to move the label below the point and the addition of
xlim(1,3.6) is a layer that tells us what the x-axis should extend to and from:
Labels Rather than a Legend
One other common feature of a graph can be to use labeling rather than a legend. The code is a bit more advanced for this phase, below you can see that we have done a few different things.
1. We created 2 plots
geom_dl() to add labels as a legend
grid.arrange() allows us to place the graphs side by side.
library(directlabels) library(gridExtra) p1 = ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point() p2 = ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point(show.legend = FALSE) + geom_dl(aes(label = class), method = "smart.grid") grid.arrange(p1,p2, ncol=2)
What you will see happen is the graph on the left,
p1, will have the traditional legend that is displayed when you color by a categorical variable. Then the graph on the right
p2 will place those same labels throughout the plot with the particular color that that label is.