Search code examples
rggplot2labelfacet-gridggtext

ggplot2 facet labels - second line is not displayed


I have a script that used to produce a facetted plot with strip text on multiple lines. But this does not work anymore. Below is a MWE where the strip text should be parsed from, e.g. "bold(A)\nreally~long~extra" to:

A
really long extra

The second line is cut off as you can see via the debug function. I even increased the margins but to no avail...

Any ideas what is the issue?

exmpl = data.frame(a = 1:100,
               b = rep(1:5, 20),
               f = factor(rep(LETTERS[1:5], each = 20))) %>% 
  as_tibble() %>% 
  mutate(f2 = paste0("bold(",f, ")\nreally~long~extra"))

ggplot(exmpl, aes(x = b, y = a)) +
  facet_grid(. ~ f2, labeller = label_parsed) +
  geom_point() +
  theme(strip.text.x = element_text(size = 10, hjust = 0, margin = margin(.5, 0, .5, 0, "cm"), debug = T))

enter image description here

EDIT:

And while we are at it, I only came up with this workaround because my previous solution of using label_bquote() does not work anymore. Please have a look at this other question, maybe you can help me with this, too?


Solution

  • Not sure wether this works for you. But one way to achieve the desired result would be to make use of the ggtext package, which allows you to style your facet labels using HTML and CSS. To this end ggtext introduces a new theme element element_markdown. Try this:

    library(ggplot2)
    library(dplyr)
    
    exmpl = data.frame(a = 1:100,
                       b = rep(1:5, 20),
                       f = factor(rep(LETTERS[1:5], each = 20))) %>% 
      as_tibble() %>% 
      mutate(f2 = paste0("<b>", f, "</b><br>", "really long extra"))
    
    
    ggplot(exmpl, aes(x = b, y = a)) +
      facet_grid(. ~ f2) +
      geom_point() +
      theme(strip.text.x = ggtext::element_markdown(size = 10, hjust = 0))
    

    And for the second question in your former post a solution might look like so:

    mylabel <- function(x) {
      mutate(x, Species = paste0(letters[Species], " <i>", Species, "</i>"))
    }
    
    p <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point()
    
    p + facet_grid(. ~ Species, labeller = mylabel) +
      theme(strip.text.x = ggtext::element_markdown())