はじめに
ggplot2でグラフを作図していて、軸のラベルやグラフタイトルなどにフォントサイズの違う文字を含む文を書きたいことがある。
例として、以下のコードで作図したグラフを考えてみる。
library(ggplot2)
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
geom_point() + xlab("Sepal Length[cm]") + ylab("Sepal Width[cm]") +
ggtitle("Large text\nSmall text") +
theme(plot.title = element_text(size = 20, hjust = 0.5),
axis.title.x = element_text(size = 16),
axis.title.y = element_text(size = 16),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.text = element_text(size = 10),
legend.title = element_text(size = 12)
)
このグラフを以下のように変更したい。
- グラフタイトルの"Large text"と"Small text"の間でフォントサイズを変える。
- 軸のラベルに含まれる単位の部分だけフォントサイズを小さくする。
ggtextによる実装例
library(ggplot2)
library(ggtext)
g2 <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
geom_point() +
xlab("<span style='font-size:16pt'>Sepal Length</span><br><span style='font-size:12pt'>[cm]</span>") +
ylab("<span style='font-size:16pt'>Sepal Width</span><span style = 'font-size:12pt'>[cm]</span>") +
ggtitle("<span style='font-size:20pt'>Large text</span><br><span style='font-size:12pt'>Small text</span>") +
theme(plot.title = element_markdown(hjust = 0.5),
axis.title.x = element_markdown(),
axis.title.y = element_markdown(),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.text = element_text(size = 10),
legend.title = element_text(size = 12)
)
簡単な解説
ggtextにより、Markdownの記法やHTML/CSSのタグを使うことができるようになる。それらの記法やタグに基づいて、テキストを太字にしたり斜体にしたり、テキストのフォントや色やサイズを変えたり、テキストを下付きや上付きに変更することができるようになる。しかし、Markdown/HTML/CSSの全ての記法やタグを使えるようになるわけではないらしい(ここの2段落目に書かれている)。
基本的な使い方は以下の2点。
-
ylab()、xlab()、ggtitle()などの中に以下のタグを使ってスタイルを変更したいテキストを挟む。
"<span style='font-size:20pt'>ここにテキストを書く</span>"
Markdown記法も使えるので、*でテキストを挟むことでイタリックにしたり、**でテキストを挟むことで太字に変更することもできる。 -
ggtextによるMarkdown/HTML/CSSの読み込みを行うため、オリジナルのコードでフォントサイズの変更に使っていたtheme()の内側のelement_text()を、element_markdown()に変更する。
これでggtextを用いて柔軟にテキストのフォントサイズの変更が行えるようになる。注意点として、Rで使われている改行タグ"\n"が使えなくなるため、改行したい場合は代わりに"<br>"を使う必要がある。
蛇足
折角なので、ggtextでできる他の機能も試してみる。
次の変更点は以下の4つ。
- タイトルの"Large text"を太字の"Bold Large text"に変更する。
- タイトルの"Small text"を斜体の"Italic Small text"に変更する。
- y軸の"[cm]"の色を青色に変える。
- x軸の"Sepal Length"のフォントを"Times New Roman"に変更する。
library(ggplot2)
library(ggtext)
g3 <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
geom_point() +
xlab("<span style='font-size:16pt; font-family:Times New Roman'>Sepal Length</span><br><span style='font-size:12pt'>[cm]</span>") +
ylab("<span style='font-size:16pt'>Sepal Width</span><span style = 'color:#0072B2;' style = 'font-size:12pt'>[cm]</span>") +
ggtitle("<span style='font-size:20pt'>**Bold Large text**</span><br><span style='font-size:14pt'>*Italic Small text*</span>") +
theme(plot.title = element_markdown(hjust = 0.5),
axis.title.x = element_markdown(),
axis.title.y = element_markdown(),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
legend.text = element_text(size = 10),
legend.title = element_text(size = 12)
)
ggtextを使いこなせるようになると作図が捗りそう。
参考
この記事は以下の情報を参考にして執筆しました。
https://stackoverflow.com/questions/74534630/ggplot2-two-different-font-sizes-on-y-axis
https://stackoverflow.com/questions/52852882/use-different-font-sizes-for-different-portions-of-text-in-ggplot2-title
https://wilkelab.org/ggtext/articles/introduction.html