How to italicize part (one or two words) of an axis title
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*")
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.
Admin
Updated on July 28, 2022Comments
-
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 commandtheme(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 almost 6 yearsHow 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 almost 6 yearsExactly, our problem too. I've put a suggestion on the
ggplot
GitHub page: github.com/tidyverse/ggplot2/issues/2743 -
RFelber over 5 years@Bobby
word <- "the word in italic"
followed bybquote('Example map with'~italic(.(word)))
found at stackoverflow.com/questions/31927984/… -
smartse over 4 yearsThanks - that's a whole lot simpler than using paste or bquote. Whereabouts it the documentation that explains that the tilde works like that?
-
GenesRus about 4 yearsCalling this variable within
ggtitle()
also will not interpret this correctly. Using inbquote(custom_title)
,bquote(.(custom_title))
, orbquote(~.(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 about 4 yearsWhat can do you if you don't want spaces where the tildes are?
-
stephanmg almost 4 yearsUse the paste answer?
-
Susie Derkins over 2 yearsIs there a way to use mdthemes to allow use of markdown in the titles without changing the theme of the entire graph?
-
Thomas Neitmann over 2 yearsPlease take a look at the {ggtext} package for this kind of functionality. Essentially you have to use
ggtext::element_markdown()
rather thanelement_text()
insidetheme()
. -
tjebo about 2 yearsMight 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 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