11.15 高品質なグラフィック (*)
rmarkdown パッケージはそれぞれの出力フォーマットに対して妥当なデフォルトのグラフィックデバイスを設定しています. 例えば HTML 出力に対しては png()
を使うので, knitr は PNG 画像ファイルを生成し, PDF 出力に対しては pdf()
デバイスを使う, などです. あなたがデフォルトのグラフィックデバイスの品質に不満なら, チャンクオプション dev
によって変更することができます. knitr によってサポートされているグラフィックデバイスの一覧は次のようになります. "bmp"
, "postscript"
, "pdf"
, "png"
, "svg"
, "jpeg"
, "pictex"
, "tiff"
, "win.metafile"
, "cairo_pdf"
, "cairo_ps"
, "quartz_pdf"
, "quartz_png"
, "quartz_jpeg"
, "quartz_tiff"
, "quartz_gif"
, "quartz_psd"
, "quartz_bmp"
, "CairoJPEG"
, "CairoPNG"
, "CairoPS"
, "CairoPDF"
, "CairoSVG"
, "CairoTIFF"
, "Cairo_pdf"
, "Cairo_png"
, "Cairo_ps"
, "Cairo_svg"
, "svglite"
, "ragg_png"
, "tikz"
大抵の場合, グラフィックデバイスの名前は関数名でもあります. デバイスについてもっと詳しく知りたいなら, あなたは R のヘルプページを読むことができます. 例えば R コンソールで ?svg
と打てば svg
デバイスの詳細を知ることができます. このデバイスは base R に含まれています. さらに quartz_XXX
デバイスは quartz()
関数を元にしたもので, macOS でのみ有効です. CairoXXX
デバイスは Cairo (Urbanek and Horner 2021) パッケージによるアドオンで, Cairo_XXX
デバイスは cairoDevice package から39, svglite
デバイスは svglite パッケージ (Wickham et al. 2022) から, tikz
は tikzDevice パッケージ (Sharpsteen and Bracken 2020) からのデバイスです. アドオンパッケージ由来のデバイスを使いたいなら, そのパッケージをまずインストールしなければなりません.
大抵はベクタ画像はラスタ画像よりも高品質であり, ベクタ画像は品質を損なうことなく縮尺を変更できます. HTML 出力では, SVG のグラフのために dev = "svg"
または dev = "svglite"
を使うことを検討してください. SVG はベクタ画像形式で, デフォルトの png
デバイスはラスタ画像形式であることに注意してください.
あなたが PDF 出力時のグラフ内の書体に対してこだわりが強い人なら, dev = "tikz"
を使うこともできます. これは LaTeX がネイティヴでサポートしているからです. つまり, テキストや記号を含むグラフの全ての要素が LaTeX を介して高品質にレンダリングされるということです. 図11.2に, dev = "tikz"
で R のグラフ内で LaTeX 数式表現を書く例を示します.
par(mar = c(4, 4, 2, .1))
curve(dnorm, -3, 3, xlab = '$x$', ylab = '$\\phi(x)$',
main = 'The density function of $N(0, 1)$')
text(-1, .2, cex = 3, col = 'blue',
'$\\phi(x)=\\frac{1}{\\sqrt{2\\pi}}e^{\\frac{-x^2}{2}}$')
base R は実は数式表現をサポートしていますが, LaTeX を介してレンダリングされていないことに注意してください (詳細は ?plotmath
を見てください). tikz
デバイスの細かい組版を調整するいくつかの発展的なオプションがあります. ?tikzDevice::tikz
で, できることを確認できます. 例えばグラフにマルチバイト文字が含まれているなら, 次のオプションを設定するといいでしょう.
これは, LaTeX 文書でマルチバイト文字を処理する観点では, xetex
の方が大抵の場合はデフォルトのエンジン pdftex
より優れているからです.
tikz
の主な欠点が2つあります. 1つ目は LaTeX のインストールが必要ということですが, これはそこまで深刻ではありません (1.2節参照). 他にもいくつかの LaTeX パッケージが必要になりますが, TinyTeX を使用しているなら簡単にインストールできます.
2つ目の欠点は, デバイスが LaTeX ファイルを生成してから PDF にコンパイルするため, グラフのレンダリングが顕著に遅くなるということです. コードチャンクに時間がかかると感じるなら, チャンクオプション cache = TRUE
でキャッシュを有効にすることもできます (第11.4節参照).
図11.2には, チャンクオプション fig.process = pdf2png
が使われています. pdf2png
は11.14節で定義された, 出力フォーマットが LaTeX でない時に PDF 画像を PNG に変換するものです. 変換しない場合, 本書のオンライン版をウエブブラウザで閲覧しても PDF グラフは見られないでしょう.
参考文献
訳注: 名前のよく似た
cairo_pdf
は base R に含まれていることに注意してください.↩︎