Til Hund Til Hund - 3 months ago 55
R Question

Auto wrapping of labels via labeller=label_wrap in ggplot2

I would like to automatically wrap my labels in ggplot2. Here is written how to write a function (1) for it, but sadly I do not know where to put labeller=label_wrap in my code (2).

(1) function by hadley

label_wrap <- function(variable, value) {
lapply(strwrap(as.character(value), width=25, simplify=FALSE),
paste, collapse="\n")
}


(2) code example

var1 <- factor(df$M001)
ggplot(df, aes(x=var1)) + geom_histogram() + xlab("") + ylab("Number of Participants")
+ scale_x_discrete(labels=c("long label", "long label", "very, very long label",
"very, very long label", "label", "label"))

var2 <- factor(df$M002)
ggplot(df, aes(x=var2)) + geom_histogram() + xlab("") + ylab("Number of Participants")
+ scale_x_discrete(labels=c("other long label", "other long label", "other very, very long label", "other very, very long label", "other label", "other label"))

Answer

You don't need the label_wrap function. Instead use the str_wrap function from the stringr package.

You do not provide your df data frame, so I create a simple data frame, one that contains your labels. Then, apply the str_wrap function to the labels.

library(ggplot2)
library(stringr)

df = data.frame(x = c("label", "long label", "very, very long label"), 
                y = c(10, 15, 20))
df

df$newx = str_wrap(df$x, width = 10)
df

Now to apply the labels to a ggplot chart: The first chart uses the original labels; the second chart uses the modified labels; and for the third chart, the labels are modified in the call to ggplot.

ggplot(df, aes(x, y)) + 
  xlab("") + ylab("Number of Participants") +
  geom_bar(stat = "identity") 

ggplot(df, aes(newx, y)) + 
  xlab("") + ylab("Number of Participants") +
  geom_bar(stat = "identity")

ggplot(df, aes(x, y)) + 
  xlab("") + ylab("Number of Participants") +
  geom_bar(stat = "identity") +
  scale_x_discrete(labels = function(x) str_wrap(x, width = 10))

enter image description here

Comments