How to italicize part (one or two words) of an axis title

73,445

Solution 1

You could make an expression like this:

my_y_title <- expression(paste("No. of ", italic("bacteria X"), " isolates with corresponding types"))
.... + labs(y=my_y_title)

Solution 2

This can be achieved using element_markdown() from the ggtext package.

ggplot(fig1, aes(cf, Freq, fill = Var1)) +
  geom_bar(stat = "identity") +
  labs(
    x = "Groups",
    y = "No. of *bacteria X* isolates with corresponding types",
    fill = "Var1"
  ) +
  theme(axis.title.y = ggtext::element_markdown())

Notice the * around bacteria X in the y axis title. Setting axis.title.y to element_markdown has the effect that the axis title is rendered as markdown. Thus, text inside * will be displayed in italics.

An even easier solution is using the mdthemes package which provides themes that interpret text as makrdown out of the box, i.e. no need to call theme. Here's an example.

ggplot(mtcars, aes(hp, mpg)) +
  geom_point() +
  mdthemes::md_theme_classic() +
  labs(title = "**Bold Title**", x = "*Italics axis label*")

enter image description here

Solution 3

I believe RFelber's suggestion is what you are after. Try this:

labs(x="Groups",
     y=expression('No. of'~italic(bacteria X)~'isolates with corresponding types'),
     fill="Var1")

I did not need to use the bquote() function. The tildes produce single spaces for terms that are outside of the quotes.

Share:
73,445
Admin
Author by

Admin

Updated on July 28, 2022

Comments

  • Admin
    Admin almost 2 years

    Is there any way to change the style of part of an axis title while keep the rest part unchanged? In my case, How could I italicize
    "bacteria X" in the y-axis title? To my knowledge, the command theme(axis.title.y=element_text(face="italic")) can only change the whole y-aixs title, is it?

    ggplot(fig1,aes(x=cf,y=Freq,fill=Var1)) +
    geom_bar(stat="identity") +
    labs(x="Groups",y="No. of bacteria X isolates with corresponding types",fill="Var1") +
    theme(axis.title.y=element_text(face="italic"))
    
  • Bobby
    Bobby almost 6 years
    How does this work when part of the title text (inside paste) comes from a variable in the workspace? I noticed that when I bring other variables into the paste, then "paste" is interpreted literally and the title starts with "paste(Chart title..."
  • MS Berends
    MS Berends almost 6 years
    Exactly, our problem too. I've put a suggestion on the ggplot GitHub page: github.com/tidyverse/ggplot2/issues/2743
  • RFelber
    RFelber over 5 years
    @Bobby word <- "the word in italic" followed by bquote('Example map with'~italic(.(word))) found at stackoverflow.com/questions/31927984/…
  • smartse
    smartse over 4 years
    Thanks - that's a whole lot simpler than using paste or bquote. Whereabouts it the documentation that explains that the tilde works like that?
  • GenesRus
    GenesRus about 4 years
    Calling this variable within ggtitle() also will not interpret this correctly. Using in bquote(custom_title), bquote(.(custom_title)), or bquote(~.(custom_title)) do not produce anything close to the desired result. This answer may not be up-to-date and should be edited to provide an example of what you mention, RFelber.
  • GenesRus
    GenesRus about 4 years
    What can do you if you don't want spaces where the tildes are?
  • stephanmg
    stephanmg almost 4 years
    Use the paste answer?
  • Susie Derkins
    Susie Derkins over 2 years
    Is there a way to use mdthemes to allow use of markdown in the titles without changing the theme of the entire graph?
  • Thomas Neitmann
    Thomas Neitmann over 2 years
    Please take a look at the {ggtext} package for this kind of functionality. Essentially you have to use ggtext::element_markdown() rather than element_text() inside theme().
  • tjebo
    tjebo about 2 years
    Might be pure coincidence, but it seems as if the author of the mdthemes package (which seems to be awesome) has the same name as you. If it is you, a disclaimer is generally considered good practice.
  • Felix
    Felix almost 2 years
    @ThomasNeitmann Surprisingly, I am unable to italicize using the ggtext::element_markdown() approach, the asterisks don't get rendered but the text isn't italic. Subscript, etc. using <sub>...</sub> works. Did anyone else encounter that issue? UPDATE: Issue has already been reported and will be fixed in the next version: github.com/wilkelab/ggtext/issues/83