p1 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() # You can assign different labellers to variables: p1 + facet_grid(vs + am ~ gear, labeller = labeller(vs = label_both, am = label_value)) # Or whole margins: p1 + facet_grid(vs + am ~ gear, labeller = labeller(.rows = label_both, .cols = label_value)) # You can supply functions operating on strings: capitalize <- function(string) { substr(string, 1, 1) <- toupper(substr(string, 1, 1)) string } p2 <- ggplot(msleep, aes(x = sleep_total, y = awake)) + geom_point() p2 + facet_grid(vore ~ conservation, labeller = labeller(vore = capitalize)) # Or use character vectors as lookup tables: conservation_status <- c( cd = "Conservation Dependent", en = "Endangered", lc = "Least concern", nt = "Near Threatened", vu = "Vulnerable", domesticated = "Domesticated" ) ## Source: http://en.wikipedia.org/wiki/Wikipedia:Conservation_status p2 + facet_grid(vore ~ conservation, labeller = labeller( .default = capitalize, conservation = conservation_status )) # In the following example, we rename the levels to the long form, # then apply a wrap labeller to the columns to prevent cropped text msleep$conservation2 <- plyr::revalue(msleep$conservation, conservation_status) p2 %+% msleep + facet_grid(vore ~ conservation2) p2 %+% msleep + facet_grid(vore ~ conservation2, labeller = labeller(conservation2 = label_wrap_gen(10)) ) # labeller() is especially useful to act as a global labeller. You # can set it up once and use it on a range of different plots with # different facet specifications. global_labeller <- labeller( vore = capitalize, conservation = conservation_status, conservation2 = label_wrap_gen(10), .default = label_both ) p2 + facet_grid(vore ~ conservation, labeller = global_labeller) p2 + facet_wrap(~vore, labeller = global_labeller) p2 %+% msleep + facet_wrap(~conservation2, labeller = global_labeller) Run the code above in your browser using DataLab