グラフィックス
knitr におけるグラフィックスの力について
オリジナルの記事: https://yihui.org/knitr/demos/graphics
オリジナルの更新日: 2011/12/9
このページは主に R Markdown ではなく Rnw を想定していることに注意してください.
グラフィックスマニュアル
グラフィックスマニュアルでは knitr のグラフィックスに彩りを加えるものを紹介します.
- グラフィックスマニュアルのソースと出力は以下です
- Rnw ソース: knitr-graphics.Rnw
- LyX ソース: knitr-graphics.lyx
- PDF 出力: knitr-graphics.pdf
刊行にあたって R グラフィックスの改善の余地が大いにあることに気づくかもしれません. R があなたにもたらすものを鵜呑みにしないでください. あなたのグラフを美しくプロフェッショナルにすることを考える時間です.
マニュアルからいくつかスクリーショットを提示します.
tufte-handout
クラスの作者に感謝します. 上記の例はこれを利用しています. そして tikzDevice パッケージは文書クラスと一貫したフォントスタイルのグラフをもたらしてくれます (セリフフォントを使用しています).
カスタムグラフィックデバイスについての補足
チャンクオプション の dev
は3つの引数をとる R 関数として定義されたカスタムグラフィックデバイスに対応します. これは pointsize
10 を使用した PDF デバイスの例です29.
my_pdf = function(file, width, height) {
pdf(file, width = width, height = height, pointsize = 10)
}
これでチャンクオプションでこのデバイスを使えるようになりますが, 1つ重要なことを覚えておいてください. knitr はグラフファイルに対して適切なファイル拡張子を推測できないため, fig.ext
オプションも同時に指定する必要があります. 最終的に, このカスタムデバイスはこのように使われます.
文書全体でこのデバイスを使用したい場合は, もちろん \SweaveOpts{}
を使ってグローバルに設定することもできます.
デバイスに追加の引数を与える
dev.args
オプションを通してグラフィカルデバイスをよく制御できます. pointsize = 10
とハードコーディングする代わりに, チャンクに dev.args = list(pointsize = 10)
を与えることができます. これが例です.
dev.args
はリストなので, デバイスの引数として可能なものを取るべきです. たとえば pdf()
には dev.args=list(pointsize=11, family='serif')
. dev.args
の全ての要素はチャンクのグラフィカすデバイスに与えられます.
R グラフィックスにハイパーリンクを付ける
tikzDevice パッケージのおかげで, R グラフィックスではほとんどの LaTeX コマンドを使うことができます. ハイパーリンクを付ける例を示します: links.Rnw (Jonathan Kennel に感謝).
特記事項として, あなたは \usepackage{hyperref}
を tikzDevice パッケージのメトリックのリストに与える必要があります. そうでなければ \hyperlink
や \hypertarget
コマンドは認識されません.
マルチバイト文字のエンコーディング
あなたのグラフにマルチバイト文字が含まれている場合, pdf()
デバイスの encoding
オプションを指定する必要があります. issue #172 を参照してください. 可能なエンコーディングのリストは以下で確認できます.
## [1] "AdobeStd.enc" "AdobeSym.enc" "CP1250.enc" "CP1251.enc"
## [5] "CP1253.enc" "CP1257.enc" "Cyrillic.enc" "Greek.enc"
## [9] "ISOLatin1.enc" "ISOLatin2.enc" "ISOLatin7.enc" "ISOLatin9.enc"
## [13] "KOI8-R.enc" "KOI8-U.enc" "MacRoman.enc" "PDFDoc.enc"
## [17] "TeXtext.enc" "WinAnsi.enc"
このような警告メッセージを目にした場合, エンコーディングの設定が必要かもしれません.
Warning: conversion failure on '<var>' in 'mbcsToSbcs': dot substituted for <var>`.
別の手段として, pdf
の代わりに cairo_pdf
を使うというものがあります. (issue #436 を参照してください)3031:
options(device = function(file, width = 7, height = 7, ...) {
cairo_pdf(tempfile(), width = width, height = height, ...)
})
もし Windows 環境でこれが失敗するのなら, issue #527 を確認してください.
装飾フォント
pdf()
のドキュメントによれば, useDingbats
引数は小さな円を含む PDF のファイルサイズを減らしてくれる可能性があります. RStudio 上で knitr を使っている場合, このオプションはデフォルトで無効になっています. 巨大な散布図を含む場合, ソース文書に pdf.options(useDingbats = TRUE)
と書くことで有効になるでしょう. 詳細な議論は issue #311 を参照してください.
アニメーション
チャンクオプション fig.show='animate'
が設定されコードチャンクで複数のグラフが生成されている場合, 全てのグラフが統合されアニメーションになります. LaTeX の出力では, LaTeX パッケージの animate が使われ, HTML/Markdown の出力に対しては, デフォルトでは FFmpeg が使われ WebM 動画が作られます. FFmpeg をインストールする際に libvpx のサポートを有効にする必要があることに注意してください. Linux および Windows ユーザーは FFmpeg ウェブサイトのダウンロードリンクを確認してください (バイナリ版では libvpx は有効になっています). OSX ユーザーは, Homebrew 経由で FFmpeg をインストールできます.