『Rグラフィックスクックブック 第2版』の追補Bに、グラフに日本語を入れる方法が記されている。しかし、PDFファイルに保存するまでの方法がなかったので、調べた。
PNGファイルならば普通にggsave()で対応できるが、PDFファイルになるとトラブルがでた。さらに調べると、『Rによる計量政治学』p.112に、該当する記述があった。
環境は:macOS 10.15.2、R 3.6.2、RStudio 1.2.5019、ggplot2 3.6.2、cowplot 1.0.0、patchwork 1.0.0
下のコードではcowplot(テーマだけ使った)、patchworkでのグラフの組合せを使っていないが、これらを使っても日本語が入った。
# Rグラフィックスクックブック 第2版 B.4 rm(list = ls()) # Environmentを初期化 if( dev.cur() > 1 ) dev.off() # Plotsを初期化 cat( "\014" ) # Consoleを初期化 # Cookbookで使うライブラリー library(dplyr) library(ggplot2) library(gcookbook) library(cowplot) # フォントファミリーを定義する # 4つのスタイルに同じフォントを使ってしまう場合 # quartzFonts(HiraKaku = quartzFont(rep("HiraginoSans-W3", 4))) # ウエイトだけ使い分ける場合 # quartzFonts(HiraKaku =quartzFont(c("HiraginoSans-W3", "HiraginoSans-W6", "HiraginoSans-W3", "HiraginoSans-W6"))) # ヒラギノがHelveticaにくらべて細めにみえるので、ウエイトを増やす quartzFonts(HiraKaku = quartzFont(c("HiraginoSans-W5", "HiraginoSans-W7", "HiraginoSans-W5", "HiraginoSans-W7"))) # フォントファミリーを確認 quartzFonts() # テーマを設定し、フォントも定義しておく # デフォルトのテーマの場合 # theme_set(theme_bw(base_family = "HiraKaku")) # cowplotのテーマを使う場合 # theme_set(theme_cowplot(font_family = "HiraKaku")) # 日本語が大きめになるのでデフォルトのサイズ14から12へ theme_set(theme_cowplot(font_family = "HiraKaku", font_size = 12)) # タイトルとアノテーションを日本語にしてグラフを描く myplot <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point() + ggtitle("日本語タイトル") + annotate("text", x=15, y=53, label="アノテーション", family="HiraKaku") # テーマでのフォントの定義がannotate("text")には及ばないらしい myplot # プロットエリアに日本語が表示された # PNGで保存 ggsave("myplot.png", width = 5, height = 4) # 日本語の入ったグラフがPNGで保存された # PDFで保存 # ggsave("myplot.pdf", width = 5, height = 4) # 以下のエラーがでて、PDFができない # grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, でエラー: # フォントタイプが不正です # 追加情報: 50 件以上の警告がありました (最初の 50 個の警告を見るには warnings() を使って下さい) # プロットエリアのグラフをExportコマンドでPDFに保存すると、PDFはできるが日本語の部分が消えている。 # quartzを使うとPDFで保存できた。 # https://books.google.co.jp/books?id=hSyBDwAAQBAJ&pg=PA111&lpg=PA111&dq=ggsave+pdf+日本語&source=bl&ots=GVX6GsEKuc&sig=ACfU3U1UdNpsFj4e5IC6459gI_2MV2RBbA&hl=ja&sa=X&ved=2ahUKEwiup9H3nrzmAhUCxYsBHSk-BfY4ChDoATABegQIChAB#v=onepage&q=ggsave%20pdf%20日本語&f=false quartz(file = "myplot.pdf", type = "pdf", family = "HiraKaku", width = 5, height = 4, pointsize = 10) print(myplot) dev.off()

macOS 11.4、RStudio 1.4.1717、R 4.1.0で、またやってみた。
# グラフに日本語を入れてファイルに保存する
# 日本語が文字化けするので、ハマりがち
# https://heavywatal.github.io/rstats/ggplot2.html より改変
# RStudioを初期化
rm(list = ls()) # Environmentを初期化
if( dev.cur() > 1 ) dev.off() # Plotsを初期化
cat( "\014" ) # Consoleを初期化z
# ライブラリーを読み込む
library(tidyverse)
# 組み込みデータmpgを確認
# mpgについてはこちら
# https://ggplot2.tidyverse.org/reference/mpg.html
mpg
# グラフを描く
p5 <-
ggplot(data = mpg) + # mpgデータでキャンバス準備
aes(x = displ, y = cty) + # displ,cty列をx,y軸にmapping
geom_point() + # 散布図を描く
facet_wrap(~ drv) + # drv列に応じてパネル分割
theme_bw() # テーマをbwに変更
print(p5)
# PNGファイルに保存する
# dpiで解像度を指定できる(デフォルトは300)。パワポやWordには300で十分。出版原稿には大きく(600など)
ggsave("mpgE.png", p5, width = 6, height = 4, dpi = 300)
# PDFファイルに保存する
ggsave("mpgE.pdf", p5, width = 6, height = 4)
# グラフに日本語を入れてみる
# これだと日本語が化ける
p6 <-
p5 +
xlab("排気量(リットル)") +
ylab("燃費(マイル/ガロン)")
print(p6)
# themeでフォント指定をすると文字化けが直る
p7 <-
p6 +
theme_bw(base_family = "HiraKakuPro-W3") # 日本語のフォント指定:macOS用
print(p7)
# PNGで保存
# 日本語も大丈夫なはず
ggsave("mpgJ.png", p7, width = 6, height = 4)
# PDFに保存
# 出版用にはPDFのほうが拡大縮小に耐えるので、出版原稿にしたり大きく印刷するなどのときによい
# ggsaveで保存してみる
# 日本語が消え、グラフが乱れる
ggsave("mpgJ.pdf", p7, width = 6, height = 4)
# 別な方法で
# https://oku.edu.mie-u.ac.jp/~okumura/stat/first.html
# print()の出力先をQuartzにするよと指定
# QuartzはmacOS標準の画像処理エンジンで、画面出力や紙への印刷などを扱っている
# この場合Quartzで描かれる画像をファイルに「印刷」するように指定している
# Macでしか使えない方法
# pointsize=10がデフォルトらしい。10のままでよければ省略可
quartz(file = "mpgJ_quartz.pdf", type = "pdf", family = "HiraKaku", width = 6, height = 4, pointsize = 10)
# 出力する
print(p7)
# 出力先をデフォルト(RStudioのPlots)に戻す
dev.off()
# この先は参考まで
# 文字処理を国際化するためのraggパッケージがtidyverseの開発者からでた
# フォント関係がスッキリ処理できるようになるらしい
# https://www.tidyverse.org/blog/2021/02/modern-text-features/
library(ragg)
# ggsave()でデバイスをagg_png, agg_tiffなどと指定する
# グラフ中でフォント指定してなくても(p6の状態)、日本語がでる
ggsave(device = agg_png, "mpgJ_ragg.png", p6, width = 6, height = 4)
# デバイスにPDFがない(agg_pdfというのはない)ので、PDFに保存したいときは使えない
# raggを常に使うようにすることもできる
# RStudioで、Preferences > General > Graphics > Backend と進み、AGGを選択する
# こうするとPlotsの画面表示にもファイル保存にもAGGが使われるようになる
# しかしPDFには対応していないので、その場合は結局上の方法で
