R: ggplot2, я могу установить заголовок графика, чтобы обернуть вокруг него и сжать текст, чтобы он соответствовал графику?

library(ggplot2)

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

r <- ggplot(data = cars, aes(x = speed, y = dist))
r + geom_smooth() + #(left) 
opts(title = my_title)

я могу установить заголовок графика, чтобы обернуть вокруг него и сжать текст, чтобы соответствовать графику?

2 ответа

Решение

Я не думаю, что есть опция переноса текста в ggplot2 (Я всегда просто вставляю \n вручную). Однако вы можете уменьшить размер текста заголовка, изменив код следующим образом:

title.size<-10
r + geom_smooth() + opts(title = my_title,plot.title=theme_text(size=title.size))

На самом деле, вы все аспекты текста с theme_text функция.

Вы должны вручную выбрать количество символов для переноса, но комбинация strwrap а также paste будет делать то, что вы хотите.

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() + 
  ggtitle(wrapper(my_title, width = 20))

Просто для обновления, как упоминалось в комментариях optsустарела. Вам нужно использоватьlabs и вы могли бы сделать:

library(ggplot2)

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

Вариант 1: Использование str_wrap вариант из stringr package и установите идеальную ширину:

 library(stringr)
 ggplot(data = cars, aes(x = speed, y = dist)) +
      geom_smooth() +
      labs(title = str_wrap(my_title, 60))

Вариант 2: С помощью функции, предоставляемой @Richie /questions/45067386/r-ggplot2-ya-mogu-ustanovit-zagolovok-grafika-chtobyi-obernut-vokrug-nego-i-szhat-tekst-chtobyi-on-sootvetstvoval-grafiku/45067405#45067405, как это:

wrapper <- function(x, ...) 
{
  paste(strwrap(x, ...), collapse = "\n")
}
ggplot(data = cars, aes(x = speed, y = dist)) +
      geom_smooth() +
      labs(title = wrapper(my_title, 60))

Вариант 3: использование ручного варианта (конечно, это то, чего OP хотел избежать, но это может быть удобно)

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

 ggplot(data = cars, aes(x = speed, y = dist)) +
          geom_smooth() +
          labs(title = my_title_manual)

Вариант 4. Уменьшите размер текста заголовка (как в принятом ответе /questions/45067386/r-ggplot2-ya-mogu-ustanovit-zagolovok-grafika-chtobyi-obernut-vokrug-nego-i-szhat-tekst-chtobyi-on-sootvetstvoval-grafiku/45067423#45067423)

ggplot(data = cars, aes(x = speed, y = dist)) +
  geom_smooth() +
  labs(title = my_title) +
  theme(plot.title = element_text(size = 10))
Другие вопросы по тегам