R: ggplot2, могу ли я обернуть текст фасеткой / полосой? - PullRequest
5 голосов
/ 07 апреля 2011

Я нашел этот очень полезный код для переноса текста здесь :

 wrapper <- function(x, ...) paste(strwrap(x, ...), collapse = "\n")`

 my_title <- "This is a really long title of a plot that I want to nicely wrap and fit onto the plot without having to manually add the backslash n, but at the moment it does not"

 r + geom_smooth() + opts(title = wrapper(my_title, width = 20))

Я хотел бы использовать его для переноса текста в фасетку / полосу, но не знаю как,

 p + geom_bar(stat="identity")+facet_wrap(~variable1) + 
    opts(strip.text.x=theme_text(size=12, face="bold")

Передается ли он в опции strip.text.x?

Ответы [ 2 ]

6 голосов
/ 16 ноября 2016

Поскольку этот вопрос был опубликован, новая функция label_wrap_gen() с ggplot2 (я думаю, что = 1.0.0) прекрасно справляется с этим:

facet_wrap(~variable1, labeller = label_wrap_gen())
3 голосов
/ 08 апреля 2011

мое лучшее предположение - определить собственный текст theme_text для метки полосы,

 theme_splittext = function (...) 
 {
   function(label, ...) {
    splitlab = paste(strwrap(label), collapse="\n")
         textGrob(splitlab, 0.5, 0.5,  ...) 
         }
 }

 p + opts(strip.text.x = theme_splittext())

быстрое тестирование показывает, что ширина каждой линии не обязательно вписывается в фасетную полосу; лучшим подходом может быть использование splitTextGrob из RGraphics, где разбиение выполняется во время рисования, чтобы поместиться в текущий видовой экран,

 theme_splittext2 = function (...) 
 {
    require(RGraphics)
   function(label, ...) {

    splitTextGrob(label, ..., vp=viewport(height=unit(2, "lines")))
         }
 }


 heightDetails.splitText = function(x) unit(2, "lines")

Проблема в том, что ggplot ожидает, что гроб узнает его размер, в то время как гроб ожидает область просмотра с определенными размерами ... Обычно это требует некоторой предварительной оценки, но на практике я не думаю, что вам нужно больше чем две строки текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...