Waves, Currents and Insights

旧データ分析メモと北欧生活。データ分析、計量経済・統計とR、水産資源管理、英語勉強、海外生活などについて備忘録や自分の勉強のOutputの場所として

MENU

Macでggplot2を日本語でPDF出力する

Macでggplot2を使って日本語PDF出力をするのに、生成AIに聞いたりして色々やってみたがエラーを吐く(うまく日本語が表示されない)ので検索して調べた結果、こちらの記事の中にある記述で解決した。

ill-identified.hatenablog.com


ggsave()の引数にdevice=quartzと指定することで日本語フォントを含んでいても出力できる。

p <- ggplot(...) + ...

ggsave("...pdf", plot=p, device = quartz, type = "pdf")

ggplot日本語化の問題

ggplot2で日本語で描画するときに、macではきちんとフォントを指定しないと豆腐化する(文字化けして□になる)は知られた問題である。

library(tidyverse)

# 図の例:mtcarsでシリンダーの数と燃費を比較
p <- ggplot(mtcars, aes(x=cyl,y = mpg, fill = factor(cyl))) + 
  geom_boxplot() +
  labs(x = "シリンダー数", y="燃費(ガロンあたりのマイル)",
       fill="シリンダー数")

p
豆腐化したggplot


theme_bw(base_family="...")とかtheme(text = element_text(family = "..."))でフォントを指定すると解決する。

# library
library(tidyverse)
library("systemfonts")

# システム上で使える日本語フォントのリストを探す
japanese_fonts <- system_fonts() |> 
        filter(grepl("Hira|JP|Japanese|Gothic", family)) |>
        pull(family) |>
        unique()
      
# 日本語フォント一覧の表示
print(japanese_fonts)


# 修正した図の例:mtcarsでシリンダーの数と燃費を比較
p <- ggplot(mtcars, aes(x=cyl,y = mpg, fill = factor(cyl))) + 
  geom_boxplot() +
  labs(x = "シリンダー数", y="燃費(ガロンあたりのマイル)",
       fill="シリンダー数")+
  theme(text = element_text(family = "Hiragino Sans"))

p
豆腐化を解決した図

ggplot日本語化のpdf出力問題

ggsave()を使って、pdf出力するときにきちんと日本語が表示されなかった。

ggsave("シリンダーと燃費.pdf",
       plot = p,
       device="pdf")
Error in grDevices::pdf(file = filename, ..., version = version) : 
  unused argument (type = "pdf")

出力されたファイルを見ると、文字があるべきところが真っ白になっている。

以下のようにdeviceにquartzと指定すると、きちんと日本語が表示される。

ggsave("シリンダーと燃費.pdf",
       plot = p,
       device=quartz,
       type="pdf")

元記事では、MacでもX11(Xquartz)をインストールして、cairo_pdf()を使うことが推奨されているが、とりあえず出力したい場合はこの方法が一番簡単そう。