はじめに
Mac上のRについて、plot関数で日本語を表示させようとすると、□□と表示される問題があります。調べると、少し前の記事でかつ古い環境ではありますが、全く同様の問題がWeb検索でヒットし、私の環境で試したところ同じように解決できたため、この記事はそこまで意味のあるものではありません。
意味があるとすれば、2019/05/30現在でも同様の対応で解決できたことを示すこと、および、自分の備忘録、という点の2点のみです。
環境について(R, RStudio, MacOSのバージョン)
次で日本語が文字化けする問題が発生しました。2019/05/30現在では最新の環境と思います。
- R version 3.6.0 (2019-04-26)"Planting of a Tree"
- RStudio 1.2.1335
- MacOS Mojave 10.14.5
一時的に問題を回避する方法
Rとウェブ解析:MACでグラフの日本語文字化けを防ぐ簡単な方法に記載の通りなのですが、実行するRスクリプトの先頭に、使用フォントを指定する関数を記載するだけです。
par(family= "HiraKakuProN-W3")
フォントは別のものを指定しても構いません。FontBook.appにてインストールされており、かつ、好きなものを記載すればいいと思います。
しかし、毎回このように書くのは少し面倒に感じたので、設定ファイルなどの記載で解決する方法を探したところ、次がありました。
.Rprofileにて解決する方法
RStudio for Mac OS X で日本語のプロットが上手くいかない場合の対処法に記載の通りなのですが、次のように~/.Rprofileを作成すれば解決できました。quartzFontの設定の箇所は、先と同じようにインストール済みの好きなフォントを指定して良いと思います。
setHook(packageEvent("grDevices", "onLoad"),
function(...){
if(.Platform$OS.type == "windows")
grDevices::windowsFonts(sans ="MS Gothic",
serif="MS Mincho",
mono ="FixedFont")
if(capabilities("aqua"))
grDevices::quartzFonts(
sans =grDevices::quartzFont(
c("Hiragino Kaku Gothic Pro W3",
"Hiragino Kaku Gothic Pro W6",
"Hiragino Kaku Gothic Pro W3",
"Hiragino Kaku Gothic Pro W6")),
serif=grDevices::quartzFont(
c("Hiragino Mincho Pro W3",
"Hiragino Mincho Pro W6",
"Hiragino Mincho Pro W3",
"Hiragino Mincho Pro W6")))
if(capabilities("X11"))
grDevices::X11.options(
fonts=c("-kochi-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*",
"-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*"))
grDevices::pdf.options(family="Japan1GothicBBB")
grDevices::ps.options(family="Japan1GothicBBB")
}
)
attach(NULL, name = "JapanEnv")
assign("familyset_hook",
function() {
winfontdevs=c("windows","win.metafile",
"png","bmp","jpeg","tiff","RStudioGD")
macfontdevs=c("quartz","quartz_off_screen","RStudioGD")
devname=strsplit(names(dev.cur()),":")[[1L]][1]
if ((.Platform$OS.type == "windows") &&
(devname %in% winfontdevs))
par(family="sans")
if (capabilities("aqua") &&
devname %in% macfontdevs)
par(family="sans")
},
pos="JapanEnv")
setHook("plot.new", get("familyset_hook", pos="JapanEnv"))
setHook("persp", get("familyset_hook", pos="JapanEnv"))
最後に
リンクを貼らせて頂いたページの作成者の方々のおかげで、問題が解決できました。感謝致します。また、.Rprofileでの解決方法については、@Mysk35S様のMacでRの日本語処理関係の記事のおかげで該当ページにたどることができました。併せて感謝致します。