Quick start with R: Symbol colours and legend in qplot (Part 25)

In Blog 24 we saw how to use qplot to map symbol size to a categorical variable. Now we see how to control symbol colours and create legend titles. Copy in the same dataset of Blog 24 (a medical data set relating to patients in a randomised controlled trial:
M <- structure(list(PATIENT = structure(c(32L, 15L, 41L, 42L, 44L, 17L, 31L, 10L, 38L, 18L, 22L, 30L), .Label = c("Adrienne", "Alan", "Andy", "Ann ", "Anne ", "Anton", "Audrey", "Ben", "Bernie", "Beth", "Bob", "Bobby", "Bruce", "Charles", "Dave", "Dianne", "Frida", "Guy", "Henry", "Hugh", "Ian", "Irina", "James", "Jim", "Jo ", "John", "Jonah", "Joseph", "Lesley", "Liz", "Magnus", "Mary", "Max", "Merril", "Mike", "Mikhail", "Nick", "Peter", "Robert", "Robin", "Simon", "Steve", "Stuart", "Sue", "Telu"), class = "factor"), GENDER = structure(c(1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L), .Label = c("F", "M"), class = "factor"), TREATMENT = structure(c(1L, 2L, 3L, 1L, 1L, 2L, 1L, 3L, 1L, 3L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"), AGE = structure(c(3L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("E", "M", "Y"), class = "factor"), WEIGHT_1 = c(79.2, 58.8, 72, 59.7, 79.6, 83.1, 68.7, 67.6, 79.1, 39.9, 64.7, 65.6), WEIGHT_2 = c(76.6, 59.3, 70.1, 57.3, 79.8, 82.3, 66.8, 67.4, 76.8, 41.4, 65.3, 63.2), HEIGHT = c(169L, 161L, 175L, 149L, 179L, 177L, 175L, 170L, 177L, 138L, 170L, 165L), SMOKE = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("N", "Y"), class = "factor"), EXERCISE = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), RECOVER = c(1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L)), .Names = c("PATIENT", "GENDER", "TREATMENT", "AGE", "WEIGHT_1", "WEIGHT_2", "HEIGHT", "SMOKE", "EXERCISE", "RECOVER"), class = "data.frame", row.names = c(1L, 4L, 5L, 13L, 15L, 17L, 22L, 29L, 33L, 41L, 42L, 43L))
M

Now let’s map symbol size to GENDER and symbol colour to EXERCISE, but choosing our own colours. To control your symbol colours, use the layer: scale_colour_manual(values = ) and select your desired colours. We choose red and blue, and symbol sizes 3 and 7.
qplot(HEIGHT, WEIGHT_1, data = M, geom = c("point"), xlab = "HEIGHT (cm)", ylab = "WEIGHT BEFORE TREATMENT (kg)" , size = factor(GENDER), color = factor(EXERCISE)) + scale_size_manual(values = c(3, 7)) + scale_colour_manual(values = c("red", "blue"))
Here is our graph with red and blue points:

Now let’s see how to control the legend title (the title that sits directly above the legend). For this example, we control the legend title through the name argument within the two functions scale_size_manual() and scale_colour_manual(). Enter this syntax in which we choose appropriate legend titles:
qplot(HEIGHT, WEIGHT_1, data = M, geom = c("point"), xlab = "HEIGHT (cm)", ylab = "WEIGHT BEFORE TREATMENT (kg)" , size = factor(GENDER), color = factor(EXERCISE)) + scale_size_manual(values = c(3, 7), name="Gender") + scale_colour_manual(values = c("red","blue"), name="Exercise")

We now have our preferred symbol colour and size, and legend titles of our choosing.
David

Annex: R codes used

[code lang="r"]
# Create and display the dataset.
M <- structure(list(PATIENT = structure(c(32L, 15L, 41L, 42L, 44L, 17L, 31L, 10L, 38L, 18L, 22L, 30L), .Label = c("Adrienne", "Alan", "Andy", "Ann ", "Anne ", "Anton", "Audrey", "Ben", "Bernie", "Beth", "Bob", "Bobby", "Bruce", "Charles", "Dave", "Dianne", "Frida", "Guy", "Henry", "Hugh", "Ian", "Irina", "James", "Jim", "Jo ", "John", "Jonah", "Joseph", "Lesley", "Liz", "Magnus", "Mary", "Max", "Merril", "Mike", "Mikhail", "Nick", "Peter", "Robert", "Robin", "Simon", "Steve", "Stuart", "Sue", "Telu"), class = "factor"), GENDER = structure(c(1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L), .Label = c("F", "M"), class = "factor"), TREATMENT = structure(c(1L, 2L, 3L, 1L, 1L, 2L, 1L, 3L, 1L, 3L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"), AGE = structure(c(3L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("E", "M", "Y"), class = "factor"), WEIGHT_1 = c(79.2, 58.8, 72, 59.7, 79.6, 83.1, 68.7, 67.6, 79.1, 39.9, 64.7, 65.6), WEIGHT_2 = c(76.6, 59.3, 70.1, 57.3, 79.8, 82.3, 66.8, 67.4, 76.8, 41.4, 65.3, 63.2), HEIGHT = c(169L, 161L, 175L, 149L, 179L, 177L, 175L, 170L, 177L, 138L, 170L, 165L), SMOKE = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("N", "Y"), class = "factor"), EXERCISE = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE), RECOVER = c(1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L)), .Names = c("PATIENT", "GENDER", "TREATMENT", "AGE", "WEIGHT_1", "WEIGHT_2", "HEIGHT", "SMOKE", "EXERCISE", "RECOVER"), class = "data.frame", row.names = c(1L, 4L, 5L, 13L, 15L, 17L, 22L, 29L, 33L, 41L, 42L, 43L))
M

# Create a scatterplot of patient height against weight before treatment.
qplot(HEIGHT, WEIGHT_1, data = M, geom = c("point"), xlab = "HEIGHT (cm)", ylab = "WEIGHT BEFORE TREATMENT (kg)" , size = factor(GENDER), color = factor(EXERCISE)) + scale_size_manual(values = c(3, 7)) + scale_colour_manual(values = c("red", "blue"))

# Change the legend.
qplot(HEIGHT, WEIGHT_1, data = M, geom = c("point"), xlab = "HEIGHT (cm)", ylab = "WEIGHT BEFORE TREATMENT (kg)" , size = factor(GENDER), color = factor(EXERCISE)) + scale_size_manual(values = c(3, 7), name="Gender") + scale_colour_manual(values = c("red","blue"), name="Exercise")
[/code]