11.14 グラフに後処理をかける (*)
コードチャンクでグラフが生成された後, チャンクオプション fig.process
によってグラフに後処理をかけることが出来ます. これはファイルパスを引数にとり, 生成された画像ファイルのパスを返す関数であるべきです. この関数はオプションで第2引数 option
を取ることができ, これには現在のチャンクのオプションのリストが与えられます.
R のロゴをグラフに埋め込むために, とても強力な magick パッケージ (Ooms 2021b) を使用する例を以下にお見せします. このパッケージに詳しくないなら, オンラインドキュメントか, 豊富な使用例を含むパッケージのヴィネットをを読むことをお薦めします. 初めに, 関数 add_logo()
を定義します.
add_logo <- function(path, options) {
# コードチャンクで作成された画像
img <- magick::image_read(path)
# R のロゴ
logo <- file.path(R.home("doc"), "html", "logo.jpg")
logo <- magick::image_read(logo)
# デフォルトの重心は `northwest` (左上) で,
# ユーザーはチャンクオプション `magick.gravity`
# で変更できる
if (is.null(g <- options$magick.gravity))
g <- "northwest"
# ロゴを画像に追加する
img <- magick::image_composite(img, logo, gravity = g)
# 新しい画像を書き出す
magick::image_write(img, path)
path
}
基本的にこの関数は R のグラフのパスをとり, R のロゴを追加し, 元画像のパスに新しい画像を保存します. デフォルトでは, ロゴはグラフの左上 (northwest) の隅に追加されますが, ユーザーはカスタムチャンクオプション magick.gravity
で位置をカスタマイズできます. このオプション名は任意に決められます.
では上記の処理関数を fig.process = add_logo
と magick.gravity = "northwest"
オプションで以下のコードチャンクに適用します. よってロゴは右上の隅に追加されます. 実際の出力は図11.1になります.
par(mar = c(4, 4, 0.1, 0.1))
hist(faithful$eruptions, breaks = 30, main = "", col = "gray",
border = "white")
あなたが magick パッケージにより詳しくなったら, R のグラフに後処理をするための, より創造的で有用なアイディアを思いつくことでしょう.
最後に, fig.process
オプションのもう1つの応用例をお見せします. 以下の pdf2png()
関数は PDF 画像を PNG に変換します. 第11.15節ではグラフの生成のために tikz
グラフィックデバイスを使用する例を見せました. この方法の問題は, デバイスが PDF を生成するため, LaTeX 以外の出力文書に対しては機能しないということです. チャンクオプション dev = "tikz"
と fig.process = pdf2png
を使えば, グラフの PNG 版を図11.2に示すことができます.