Rのグラフィックスで日本語や記号を化け・ヌケなく表示する
結論
RStudioの中では
raggパッケージを描画に使用するよう設定しましょう。
PNG / JPEGの場合
|
|
PDFの場合
|
|
上の結論だけで十分だと思いますが…少し説明
タイトルは文字数の関係でやや対象が広くなっていますが、実際には、(1) Windows環境で (2) RのグラフィックスをPNG / JPEG / PDF出力する (3) 日本語が表示されればフォントの種類にこだわらない 時の話です。(1) OSを限定しない、(2) より汎用的な出力形式で (3) 任意のフォントを使う 場合についての解説として、以下のようなものがあります。
- Rグラフィックスの文字化け問題中間報告 (2021年版) - ill-identified diary
- 日本語プロットの文字化けストレスを低減する - RStudio v1.4とraggパッケージを使う - cucumber flesh
ただ、長くてムズカシイんで…。Rを長く、本格的に使う方は、Rがフォントを取り扱う仕組みなども学習するとよいと思いますが、「ネット記事をコピペしてRでグラフを描いたら文字が出ない!明日レポートの提出なのに!」といった “普通の” 方には、「とりあえずこうしたら解決するよ」という情報を提示するのも重要かなと思います。
raggパッケージを用いたPNG / JPEG形式の出力
グラフィックスをファイルに出力する場合、PNG / JPEGとPDFでは、方法が異なります。PNG / JPEGについては、近年利用が広まっているraggパッケージを使うと簡単です。標準ではインストールされていないので、install.packages("ragg")
としてインストールしましょう。
RStudioでは、標準でグラフィックスにraggパッケージのデバイスを使う機能が組み込まれているので、それを選択するだけで、文字化け・ヌケはなくなります。[Tools] - [Global Options] - [General] - [Graphics] から設定します。また、その操作の際、raggパッケージがインストールされていなければ自動的にインストールもしてくれます。
設定を行ったうえで、[Plots] タブの [Export] ボタンからPNG / JPEGファイルに出力すれば、文字化け・ヌケのないグラフィックスが得られます。
ただしこれは、あくまでRStudioのPlotsタブの設定なので、RStudioを使っていても、プログラム中で png()
関数や ggsave()
関数を使っている部分には反映されません。
プログラム中でグラフィックスを出力したい場合は、raggパッケージが提供する agg_png()
や agg_jpeg()
デバイスを使います。
ggplot2を使う場合、ggsave()
関数ではraggパッケージがインストールされていれば、デフォルトで使用されるため、特にデバイス名を指定する必要はありません。
|
|
systemfontsパッケージを用いたPDF形式の出力
PDFの場合、伝統的には、pdf(..., family="Japan1GothicBBB")
と指定する方法があります。ただ、これはフォントを埋め込まず、「日本語のゴシック体」という概念を指定しているだけなので、実際にどのようなフォントで表示されるかはPDFリーダーとOSの設定次第になります。特に、Webサービスなどでは日本語を表示する設定がされていないことが多く、アップロードしたファイルで日本語がヌケてしまうことが多いです。
そのため、PDFにフォントを埋め込むほうが安全です。こちらも、伝統的にいろいろな方法が提案されてきました。
- (2012) R のグラフで日本語を使う - 知に至る病 https://amano41.hatenablog.jp/entry/plot-with-japanese-fonts-in-R
- (2015) R 好きな日本語書体でグラフに書き込める showtext パッケージ : 研究に使うポスグレ http://kenpg2.seesaa.net/article/415323425.html
- (2020) 須通り_統計_Rにおける作図時のフォント設定を極める https://sudori.info/stat/stat_fig_font.html
2022年現在、もっとも手軽な方法は、systemfontsパッケージを使う方法だと思います。Windowsでは、インストールしたフォントをそのまま扱えます。また、OSにインストールしたフォントを使用するには、cairo_pdf()
デバイスを使用します。
プログラム例は以下のようになります。
ggplot2を使う場合も、ggsave()
関数の device
オプションと family
オプションで日本語フォントを使用できるようになります。
|
|
なお、お使いのWindowsで使用できるフォントの情報は、systemfontsパッケージの system_fonts()
関数で得られます。以下は、筆者の環境での例です。
|
|
R Markdownの場合
R Markdown文書では、setup
チャンクに以下のように書いておけば、文書内で作成するグラフィックスのデバイスを指定できます。
```{r setup, include=FALSE}
knitr::opts_chunk$set(cache = FALSE, dev = "ragg_png")
```
Posit Cloudの場合
Posit Cloud (旧RStudio Cloud) では、裏で動いているOS (Ubuntu Linux) が「標準の日本語フォント」を知らないので、出力時に family
を明示する必要があります。Posit CloudにはIPAexフォントがインストールされているので、family = "IPAexGothic"
といったように指定すればよいでしょう。
まとめ
昔に比べれば、Rのグラフィックスにおける日本語の表示は格段に簡単になりました。フォントやそのバックエンドの知識がなくても、「とりあえずragg」「とりあえずsystemfonts」を使えば、表示できます。
論文や社内文書などでも、「MSゴシックで」などアホみたいなフォントの指定が求められることがありますが、この記事で紹介した方法で対応可能です。