Автоматическая упаковка меток с помощью labeller = label_wrap в ggplot2

Я хотел бы автоматически обернуть мои метки в ggplot2. Здесь написано, как написать для нее функцию (1), но, к сожалению, я не знаю, где положить labeller=label_wrap в мой код (2).

(1) функция byley

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

(2) пример кода

 df = data.frame(x = c("label", "long label", "very, very long label"), y = c(10, 15, 20)) ggplot(df, aes(x, y)) + geom_bar(stat="identity") 

Гистограмма с длинной этикеткой, не обернутой

Я хотел бы обернуть некоторые из более длинных ярлыков здесь.

Вам не нужна функция label_wrap . Вместо этого используйте функцию str_wrap из пакета stringr .

Вы не предоставляете свой фрейм данных df , поэтому я создаю простой фрейм данных, который содержит ваши метки. Затем примените функцию str_wrap к меткам.

 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 

Теперь применить метки к диаграмме ggplot: первый график использует оригинальные метки; второй график использует измененные метки; и для третьего графика метки изменяются при вызове 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)) 

введите описание изображения здесь

Вот еще один способ без ссылки на библиотеку stringr :

 ggplot(df, aes(x, y)) + xlab("") + ylab("Number of Participants") + geom_bar(stat = "identity") + scale_x_discrete(labels = function(x) lapply(strwrap(x, width = 10, simplify = FALSE), paste, collapse="\n")) 

где звонок:

 lapply(strwrap(x, width = 10, simplify = FALSE), paste, collapse="\n") 

выполняет работу по расщеплению ярлыков динамически. Результат такой же, как и в первом ответе .

Пакет «весы» включает в себя функцию, очень похожую на Claude’s и Leonardo’s: wrap_format.

 library(scales) ggplot(df, aes(x, y)) + geom_bar(stat = "identity") + labs(x = "", y = "Number of Participants") + scale_x_discrete(labels = wrap_format(10)) 

(Надеюсь), улучшившись на ответ Клода:

 get_wraper <- function(width) { function(x) { lapply(strwrap(x, width = width, simplify = FALSE), paste, collapse="\n") } } ggplot(df, aes(x, y)) + geom_bar(stat = "identity") + labs(x = "", y = "Number of Participants") + scale_x_discrete(labels = get_wraper(10)) 
Давайте будем гением компьютера.