R: ggplot2, can I set the plot title to wrap around and shrink the text to fit the plot?

前端 未结 3 1894
梦如初夏
梦如初夏 2020-11-30 06:42
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 backslas         


        
相关标签:
3条回答
  • 2020-11-30 06:53

    I do not think there is a text wrap option in ggplot2 (I have always just inserted \n manually). You can, however, shrink the size of the title's text by altering your code in the following way:

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

    In fact, you all aspects of text with the theme_text function.

    0 讨论(0)
  • 2020-11-30 07:06

    Just for an update as has been mentioned in the comments opts is deprecated. You need to use labs and you could do:

    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"
    

    Option 1: Using str_wrap option from the stringr package and setting your ideal width:

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

    Option 2: Using the function provided by @Richie https://stackoverflow.com/a/3935429/4767610 like this:

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

    Option 3: Using the manual option (granted, this is what the OP wanted to avoid but it might be handy)

    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)
    

    Option 4: Reduce the text size of the title (as in the accepted answer https://stackoverflow.com/a/2633773/4767610)

    ggplot(data = cars, aes(x = speed, y = dist)) +
      geom_smooth() +
      labs(title = my_title) +
      theme(plot.title = element_text(size = 10))
    
    0 讨论(0)
  • 2020-11-30 07:09

    You have to manually choose the number of characters to wrap at, but the combination of strwrap and paste will do what you want.

    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))
    
    0 讨论(0)
提交回复
热议问题