(PART) 応用編 {-}

このパートについて {-}

このパートでは, ここまでで紹介した基本機能の応用で, さまざまな R パッケージやその他の外部プログラムの出力を埋め込む方法を紹介する

様々なグラフィックプログラムの埋め込み {#advanced-graph}

tikz を使う

r rmdja::texlogo("latex") で使われる tikzdevice を利用して, 直接 tikz の記述による画像を埋め込むことができる. チャンクのエンジンを tikz とすることで使用でき, 相互参照やキャプション, 画像サイズの指定といったチャンクオプションも使える. 図 \@ref(fig:tikz-venn) は tikz で生成した図である. これはHTMLでも表示できる. TODO: しかし現状ではpdflatex以外のエンジンに変更できないため, 日本語表示が難しい.

```{tikz tikz-venn, fig.cap="tikzを利用した図の表示"} \def\firstcenter{(135:1.75cm)} \def\secondcenter{(45:1.75cm)} \def\firstcircle{\firstcenter circle (2.0cm)} \def\secondcircle{\secondcenter circle (2.0cm)} \def\wholerect{(-4.0, -1.1) rectangle(4.0, 3.35)} \begin{tabular}{cc} % A cap B \begin{tikzpicture} \begin{scope} \clip \secondcircle; \fill[cyan] \firstcircle; \end{scope} \draw \wholerect; \draw \firstcircle; \draw \secondcircle; \begin{scope}[font=\small] \draw(90:.5cm) node[text=black, below]{\texttt{A INNER JOIN B}}; \end{scope} \end{tikzpicture} & % A u B \begin{tikzpicture} \begin{scope} \draw \wholerect; \fill[cyan]\firstcircle; \fill[cyan]\secondcircle; \end{scope} \begin{scope}[font=\small] \draw(90:.5cm) node[text=white, below]{\texttt{A OUTER JOIN B}}; \end{scope} \end{tikzpicture} \ % A LEFT B \begin{tikzpicture} \draw \wholerect; \draw \firstcircle; \draw \secondcircle; \begin{scope} \fill[cyan]\firstcircle; \draw\firstcenter; \draw\secondcenter; \end{scope} \begin{scope}[font=\small] \draw\firstcenter node[text=black, below]{\texttt{A LEFT JOIN B}}; \end{scope} \end{tikzpicture} & % A RIGHT B \begin{tikzpicture} \draw \wholerect; \draw \firstcircle; \draw \secondcircle; \begin{scope} \fill[cyan]\secondcircle; \draw\firstcenter; \draw\secondcenter; \end{scope} \begin{scope}[font=\small] \draw\secondcenter node[text=black, below]{\texttt{A RIGHT JOIN B}}; \end{scope} \end{tikzpicture} \ \end{tabular}

## Asymptote を使う

同様に, Asymptote のプログラムを埋め込むこともできる. 私は Asymptote が分からないので RCB [Ch. 15.9 Create graphics with Asymptote](https://bookdown.org/yihui/rmarkdown-cookbook/eng-asy.html) と同様のプログラムを書いておく. ( \@ref(fig:asymptote-graph)).

```{asy asymptote-graph, out.height="50%", fig.cap="Asymptote による画像"}
import graph3;
import grid3;
import palette;
settings.prc = false;
currentprojection=orthographic(0.8,1,2);
size(500,400,IgnoreAspect);
real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
surface S=planeproject(unitsquare3)*s;
S.colors(palette(s.map(zpart),Rainbow()));
draw(S,nolight);
draw(s,lightgray+opacity(0.7));
grid3(XYZgrid);

(TODO) その他のプログラム

D3.js なども使える

(TODO) その他の R プログラム

DOT 言語とグラフィカルモデル

graphviz などで使用される DOT 言語を使用してグラフィカルモデルを描画することもできる. この場合, チャンクのエンジンを dot にするのではなく, エンジンは r のままで, engine="dot" を指定すると, コードブロックが DOT 言語として評価される. 図\@ref(fig:dot-example) がその結果である.

digraph test {
  graph [layout = dot, rankdir = TB];
  node [shape = rectangle];
  rec1 [label = "Step 1. 起床する"];
  rec2 [label = "Step 2. コードを書く"];
  rec3 [label = "Step 3. ???", color=blue, style=filled];
  rec4 [label = "Step 4. 給料をもらう", fontsize=20, fontcolor=red];
  rec1 -> rec2 -> rec3 -> rec4;
  }

なお, RCB, Ch. 4.15 でも紹介されているように DOT 言語は DiagrammeR パッケージを経由して使うこともできる[^dot-lang-syntax]が, grViz() 関数の出力は HTML を前提としているため, PDF での出力時のサイズや解像度の調整がうまくいかないことが多い.

一方で, ggdag パッケージはggplot2 ベースのパッケージなので, 一般的な R グラフィックスと同じ扱いでグラフィカルモデルを描画できる (つまり名前に反して DAG 以外のネットワーク図も記述可能である). ggplot2 風の構文で記述できるので習熟も容易である.

[^dot-lang-syntax]: 私も詳しいことは知らないが, DiagrammeR::grViz() の構文は本来の DOT と少し異なるようだ, 本来はステートメントごとにセミコロンで区切ることが必要であり, 文字列もダブルクオーテーションで囲まなければならないが, grViz() ではそのような制約がない.

表のデザイン {#advanced-tabulate}

kableExtra による表のスタイルのカスタマイズ

include_graphics(if(is_latex_output()) "img/kableExtra.pdf" else "img/kableExtra.svg")

kableExtra パッケージは knitr::kable の拡張であり, 様々なスタイルの表を出力できる. そしてそれは HTML でも PDF でも有効である.

まず, knitrExtra::kbl() は既に紹介した kable() のラッパであり, 内部で呼び出すのは kable() のため booktabs といった従来の引数が使える上に, オプション設定の構文がより分かりやすくなっている. さらに kableExtra の独自機能として, 表 \@ref(tab:kableextra-color) にみられるように条件書式のような装飾が可能である[^mtcars-term].

``{block kableextra-official, type="memo"}kableExtra` パッケージはヘルプドキュメントはもちろん, 公式の解説や用例も充実している.

https://haozhu233.github.io/kableExtra/

https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html

(ref:kableextra-color-cap) `kabeExtra` パッケージを利用した表の作成, 公式ドキュメントの用例より

```r
colnames_mtcars_ja <- c(
  "ガロン毎マイル", "シリンダ", "排気量", "総馬力",
  "ギア比", "重量", "加速性能", "トランスミッション", "ギア数", "キャブレター数")
that_cell <- c(rep(F, 7), T)
mtcars[1:8, 1:8] %>%
  kbl(booktabs = T, linesep = "",
      format = if(knitr::is_latex_output()) "latex" else "html",
      caption = "(ref:kableextra-color-cap)",
      col.names = colnames_mtcars_ja[1:8]
      ) %>%
  kable_paper(full_width = F) %>%
  kable_styling(latex_options = "scale_down") %>%
  column_spec(2, color = spec_color(mtcars$mpg[1:8]),
              link = "https://haozhu233.github.io/kableExtra") %>%
  column_spec(6, color = "white",
              background = spec_color(mtcars$drat[1:8], end = 0.7),
              popover = paste("am:", mtcars$am[1:8])) %>%
  column_spec(9, strikeout = that_cell, bold = that_cell,
              color = c(rep("black", 7), "red"))

上記の例で使われている, kableExtra の便利な機能をいくつか挙げる.

グラフのインライン挿入も可能である (表 \@ref(tab:kableextra-plot)). しかしこのような細かいグラフの羅列は可読性に欠けることに注意する.

(ref:kableextra-plot-cap) kabeExtra パッケージによる表内グラフ, 公式ドキュメントの用例より

mpg_list <- split(mtcars$mpg, mtcars$cyl)
disp_list <- split(mtcars$disp, mtcars$cyl)
inline_plot <- data.frame(cyl = c(4, 6, 8), mpg_box = "", mpg_hist = "",
mpg_line1 = "", mpg_line2 = "", mpg_points1 = "", mpg_points2 = "", mpg_poly = "")
inline_plot %>%
  kbl(booktabs = T, format = if(knitr::is_latex_output()) "latex" else "html",
      caption = "(ref:kableextra-plot-cap)",
      col.names = c("シリンダ数", "ガロン毎マイル", "", "", "", "", "", "")
      ) %>%
  kable_paper(full_width = FALSE) %>%
  kable_styling(latex_options = "scale_down") %>%
  column_spec(2, image = spec_boxplot(mpg_list)) %>%
  column_spec(3, image = spec_hist(mpg_list)) %>%
  column_spec(4, image = spec_plot(mpg_list, same_lim = TRUE)) %>%
  column_spec(5, image = spec_plot(mpg_list, same_lim = FALSE)) %>%
  column_spec(6, image = spec_plot(mpg_list, type = "p")) %>%
  column_spec(7, image = spec_plot(mpg_list, disp_list, type = "p")) %>%
  column_spec(8, image = spec_plot(mpg_list, polymin = 5))

その他細かい使用上の注意をいくつか挙げる.

その他, テキストの回り込み, 画像の挿入など様々なことが可能である. 詳細は公式の解説である "Create Awesome HTML Table with knitr::kable and kableExtra" および PDF版 が役に立つ.

[^mtcars-term]: ところで私は自動車の性能を表す用語に詳しくない. これは mtcars データセットの列名を日本語訳したのだが, した表記に誤りがあれば指摘してほしい.

formattable パッケージとの併用

formattable パッケージは以前からある表を装飾するパッケージである. kableExtra との併用も可能だが, r rmdja::texlogo("LaTeX") に対応しておらず, HTMLタグをtexファイルに吐き出してしまうため動作しない. PDF にも同様に表示するには StackOverflowで提案されているように, webshot 使うなど工夫が必要である. そこまでしてこの装飾にこだわるメリットは薄いと私は考えるので現在この問題に対応する予定はない. kableExtra か後述する huxtable を使うべきだと考える.

huxtable パッケージによる作表

huxtable::hux_logo(latex = is_latex_output(), html = is_html_output()) %>%
  huxtable::set_caption("`huxtable` のロゴはランダムに生成される.")

huxtable は HTML と r rmdja::texlogo("LaTeX") に対応した作表パッケージであり, 公式ドキュメントによると他の類似パッケージと比較して多機能であることを強調している. 全体的に tidyverse を意識した構文が用意され, kableExtra のようにパイプラインを使った記述が捗る. さらに「1行ごとに背景色を変更」「stargazer風の表」などよく使われるスタイルを簡単に設定できるようになっていたり, はては tidyr のような表のロング・ワイド変形機能まで備えている. 例えば公式用例集を参考に, 条件書式を付けた表 \@ref(tab:huxtable-example) を作成する.

(ref:huxtable-example-cap) huxtable パッケージによる作表

require(huxtable)
head(mtcars[1:5]) %>% set_names(colnames_mtcars_ja[1:5]) %>%
  as_huxtable(add_rownames = "Model") %>%
  set_caption("(ref:huxtable-example-cap)") %>%
  set_bold(1, everywhere, T) %>%
  theme_article() %>%
  map_text_color(
    everywhere, "ガロン毎マイル", by_colorspace("navy", "red", "yellow")) %>%
  map_background_color(
    everywhere, "総馬力", by_quantiles(0.8, c("white", "yellow"))) %>%
  map_italic(everywhere, "Model", by_regex("Merc.*" = T)) %>%
  set_number_format(col = "ギア比", value = fmt_percent(digits = 2))

huxtable パッケージの関数の多くには set_ という接頭辞がついているものとそうでないものがある. ついているものは上記のようにパイプラインでつなげて使うために用意された関数群で, ついていないものは R 組み込みの colnames() のように1行ごとに処理を書くスタイルに向いている. そのままでは罫線の設定が set_top_border(), set_bottom_border(), などしかなく, 複雑な条件を指定するのが大変だが, ggplot2 のテーマ関数のようにスタイルのプリセットが theme_*() の名前でいくつか用意されている. 例えば上記では theme_article() という学術論文風テーマを適用し, 表の上下とヘッダにだけ罫線を引いている. 条件書式は map_*() 関数群で実行できる. また, フォーマットは set_number_format() に値を変換するフォーマット関数を与える形で適用できる. こちらはパーセンテージなども正しく表示できる.

なお, 動作させるにあたっていくつか注意が必要である.

[^huxtable-bookdown]: おそらくはこの辺の処理の問題だが, 未解決 https://github.com/hughjonesd/huxtable/blob/3eb96b62a5fde1000924daba39078f2e72839383/R/knitr.R

また, huxreg() は名前の通り回帰分析の結果を表にするなど stargazer パッケージに似た機能を提供する. これも同じクラスなので同様にスタイル設定が可能である (表 \@ref(tab:huxreg-example)).

(ref:huxreg-example-cap) huxtable::huxreg() による出力

lm1 <- lm(mpg ~ cyl, mtcars)
lm2 <- lm(mpg ~ cyl + hp, mtcars)
glm1 <- glm(I(mpg > 20) ~ cyl, mtcars,
          family = binomial)
huxreg(lm1, lm2, glm1, stars = NULL, error_pos = "below", note = "括弧内は標準誤差") %>%
  set_caption("(ref:huxreg-example-cap)") %>%
  set_text_color(everywhere, "model1", "green") %>%
  set_text_color(everywhere, "model2", "blue")

その他の作例は CRANの 公式 vignettes を参考にせよ.

TeX/HTML を出力する関数

stargazerpander のように表を出力するための HTML や r rmdja::texlogo("LaTeX") や Markdown のソースコードを出力してくれるパッケージがある. これらは results='asis' のチャンクオプションを指定することで関数の出力するテキストをそのまま埋め込むことができる. よって, あとは HTMLか\LaTeX{=latex}LaTeX{=html} かといった出力形式の違いに気をつければ表示できる. stargazer はオプションが豊富で, 例えば表 \@ref(tab:stargazer-table)では, align = T を指定することで, dcolumn.sty を使って 数字のアラインメントを小数点で揃えることができる. その他, 複数の回帰モデルの結果を並べて表示したり, その際の表示スタイルも比較的かんたんに調整できる. stargazer の詳しい使い方はむかし私が書いた『R での分析結果を LaTeX 形式で出力するパッケージ比較 (後編)』を参考に.

(ref:stargazer-title) stargazer による要約統計量の出力

require(stargazer)
stargazer(mtcars, header = F, align = T,
          type = if(knitr::is_latex_output()) 'latex' else 'html',
          title = "(ref:stargazer-title)",
          label = knitr::opts_current$get("label")
          )

ただし stargazer はここ数年更新されておらず, R Markdown に対応した機能追加なども行われていないため, 相互参照に対応していない. bookdown リポジトリの issue #175 にあるように, PDFに限れば簡易的な方法で対処できるが, HTMLでも相互参照するには stargazer_bookdown のインストールが必要になる.

その他, Hmisc::latex(), stats::xtable() という古典的な関数がある. 後者は名前の通り r rmdja::texlogo("LaTeX") のソースをかなりの自由度で出力できるが, ここまでやるならもう最初から全部 r rmdja::texlogo("LaTeX") で書いたほうがいいのでは, という気もする. r rmdja::texlogo("LaTeX") に詳しくない場合, かえって難しいかも知れない. 既に紹介した kableExtra, huxtable などでできる範囲でやったほうが簡単だろう.

その他の作表パッケージ

そのほか有名なパッケージとして, DT, flextable, gt などがある. DT はインタラクティブな表ウィジェットを作成し, flextable は Word へのエクスポート機能をフィーチャーしているが, PDF に対しては画像として出力するなどくせがある. gt は RStudio 社が開発しているパッケージで, huxtable のように tidyverse 的なシンプルな構文が用意されている一方で, まだ R Markdown の相互参照機能に対応していない[^gt-crossref]. 以上からすでに紹介した kableExtrahuxtable がより rmdja の対応する出力媒体に適したパッケージであり, それ以外のパッケージの詳しい紹介は避ける.

RCB 10.3 Other packages for creating tables も参考にせよ.

[^gt-crossref]: Issue #115 にあるように, 機能を追加したいという声はある. しかし現時点では gt の R Markdown 対応作業の優先度は高くないようである.

文献引用の詳細設定 {#biblio-advaneced}

(u)p\BibTeX{=latex}(u)pBibTeX{=html} を使う

``{block2 upbibtex-customize, type="caution"} このセクションの説明の理解には多少の\LaTeX{=latex}LaTeX{=html} の知識を要する. Ver. 0.4.3 以降では BibLaTeX 用の日本語スタイルとして最低限のクオリティだけは保ったjauthoryear` を用意しているため, どうしても文献リストのスタイルにこだわりたい以外はここで紹介される方法は使わないほうが良い.

`.bst` ファイルのスタイルを使いたい場合,  (u)`r rmdja::texlogo("pBibTeX")` が必要であり, そのためには現在の R Markdown および `rmdja` の仕様では, YAMLフロントマターとグローバルオプションを変更する必要がある. 例えば `jecon.bst` を使いたい参考文献リストを出力したい場合, YAMLフロントマターは以下のような記述となる.

```yaml
output:
  rmdja::pdf_book_ja:
    citation_package: natbib
    citation_options: numbers
biblio-style: jecon
bibliogpraphy: citations.bib

r rmdja::texlogo("BibLaTeX") では citation_options にスタイルまで指定していたが, natbib を選択した場合 biblio-style.bst ファイルを指定し, フォーマット関数の citation_options 引数は natbib.sty に対するオプションを指定する項目となる (トップレベルの natbiboptions でも可). 上記の例では numbers を指定しているため本文中の参照トークンは [1], [2, 3] のような番号形式となる. デフォルトは authoryear , つまり「著者 - 出版年」形式である.

次に, 最初のチャンク, またはコンソールでグローバルオプションを変更する.

options(tinytex.latexmk.emulation = F)

この状態で knit または build すれば .bst ファイルのスタイルが適用される.

このような操作が必要な理由を説明する. rmarkdowntinytex というパッケージでインストールされたスタンドアローンな r rmdja::texlogo("LaTeX") 処理系で PDF を生成している. しかしこれは (u)r rmdja::texlogo("pBibTeX") の使用が想定されていない. (u)r rmdja::texlogo("pBibTeX") は日本語コミュニティで開発されたマルチバイト文字対応版 r rmdja::texlogo("BibTeX") だから, rmarkdown 開発メンバーたちがこれらの存在に詳しくないのも仕方ないことだ (YiHui 氏は中国出身だが, 中国語圏では BibLaTeX を使うことが多いようだ). 冒頭のチャンクで options(tinytex.latexmk.emulation = F) を指定することで, 自分のマシンにインストールされた, おそらくあなたが普段使っているであろう r rmdja::texlogo("LaTeX") 処理系に処理させることができる. この方法では latexmk コマンドを使用してPDFの生成が行われる, その場合TeX Wikiに記載のあるように, 日本語出力のため .latexmkrc ファイルが必要となっている. rmdja では natbib を指定した場合に自動でカレントディレクトリに .latexmkrc をコピーするようにしている. しかしログが残らないなどデバッグしづらいところがあるため, このやり方はやや使いづらく r rmdja::texlogo("LaTeX") に対するそれなりの知識を要する. たとえばこの説明を読んで初めて latexmk の存在を知った, そもそも r rmdja::texlogo("LaTeX") をどうインストールしたか記憶がない, といった人は慣れるまで大変かもしれない.

(TODO) pandoc-citeproc と CSL について

TODO: せめて日本語文献の姓名表示をなんとかしたスタイルを用意する

(WIP) r rmdja::texlogo("BibLaTeX") について

r rmdja::texlogo("BibLaTeX") の全てのオプションに対応しているわけではないので詳しいことは r rmdja::texlogo("BibLaTeX") のドキュメントを読んでいただきたい. 残念ながら, 日本語の情報は非常に乏しい. ここではよく使う style のことだけ言及する.

citation_packages/biblatexoptions で指定できるのは, インクルード時の style= に指定できるものに対応する(表 \@ref(tab:biblatex-styles)). つまり, 引用文献の見出しや, 表示順といった設定である. これは引用リストと本文中の引用子のスタイル両方に影響する.

tibble(
  item = c("`numeric`", "`alphabetic`", "`authoryear`", "`authortitle`", "`verbose`", "`reading`", "`draft`", "`debug`"),
  description = c("'[1]' のような番号", "著者名の略称+出版年2桁", "著者-出版年形式, natbib の標準と同じ", "著者名のみ, リストでは出版年は後置され, 引用子では脚注になる", "authortitle と同じだが, 引用子にリスト同様の内容を出力する", "個人的なリーディングリスト向け. ファイルやメモ欄も出力する", ".bib ファイルのIDで表示. 名前通り下書き", "`.bib` の全フィールドを表示")
) %>% kable(
  booktabs = T,
  caption = "biblatex の `bilio-style` で指定できるもの一覧",
  col.names = c("名称", "概要"))

その他 apa, ieee など特定の学会が使用するスタイルも用意されているが, これらは基本欧文しか想定していないし, アカデミックの事情に詳しい人しかこれらの使用にこだわらないだろうから詳しくは解説しない. これらを含めたそれぞれの出力例は https://www.overleaf.com/learn/latex/biblatex_bibliography_styles に一覧があるのでそちらを参考に. なお, 引用リストのスタイルと引用子のスタイルを個別にすることはできる (bibstyle/citestyle)

現時点では各分野の学会で日本語文献に対応した r rmdja::texlogo("BibLaTeX") フォーマットを配布しているという情報は見つけられなかった. 参考として私のブログで対応のヒントについて書いた^biblatex-note.

TODO: その他の非ラテン文字, キリル文字, アラビア文字 ヘブライ文字等は?

なお, 普段文献管理ソフトを使っていないが, 数本程度の文献を引用リストに載せたい利用者は, biblatex の構文を利用して書くのがよいかもしれない.

(TODO) Web アプレットの挿入 {#webapp}

TODO: plotly

TODO: shiny

Python スクリプトの埋め込み {#python}

``{block py-warning, type="caution"} 現時点ではreticulateによる Python 実行はグラフィック関係や環境設定でまだまだバギーなところが多い. つまり, エラーが発生した場合には原因が Python 側にあるのか RStudio やreticulate` パッケージ側にあるのか判断しなければならない. よってあなたがどちらかに習熟していなかったり, まだエラーメッセージを注意深く読む習慣がついていない初心者である場合, 作業が非効率になることが予想される.

Python スクリプトを埋め込むこともできる. 方法は2通りあり, 都度システムコマンドから呼び出す方法と, `reticulate` パッケージを使うものがある. `reticulate` 登場以前はチャンクごとに呼び出していたため複数のチャンクに分割して記述するのが難しかったが, 現在は `reticulate` パッケージを利用することでRと同じような感覚で, あるいは Jupyter のコードセルと同じような感覚で書ける.

`pyenv` を使用する場合, 共有ライブラリのインストールが必要なことに注意[^pyenv-lib].

[^pyenv-lib]: 詳しくはこちらを参考に https://ill-identified.hatenablog.com/entry/2019/11/15/010746

初めて使う場合は先に `reticulate` 単体でPythonが実行できるか検証してからの方が良い.

```r
require(reticulate)
# Python エンジンを認識しているか確認
py_discover_config()
repl_python()

# 以下, Python コマンド実行, `exit` で抜ける

現在 (knitr 1.18以降) は R Markdown はデフォルトで reticulate を使う. システムコマンド経由にしたい場合はチャンクオプション python.reticulate=F を設定する, あるいは reticulate::eng_python に変わるエンジンを自作する[^reticulate-knitr].

[^reticulate-knitr]: 参考: https://rstudio.github.io/reticulate/articles/r_markdown.html

あとはチャンクのエンジンに r ではなく python を指定することでPythonコードを埋め込める.

matplotlib エンジンで描いたグラフに日本語フォントを埋め込む場合, matplotlib-japreset を使えば必要な設定を一括で行う.

``{block type="warning"}matplotlib-japreset` は現在, Linux 以外での動作保証をしていない

```sh
pip install -U git+https://github.com/Gedevan-Aleksizde/matplotlib-japreset.git@master

```{python py-settings, echo=T} from matplotlib_japreset import mplj_cairo from matplotlib import rcParams from plotnine import * from plotnine.data import mtcars rcParams['font.family']

`matplotlib-japreset` によって主要OSで標準インストールされている日本語フォントが自動的に選ばれる. 気に入らない場合は `rcParams['font.family']` に好きなフォント名を上書きする.

(ref:py-plotnine-cap) Python の `plotnine` によるグラフ表示例

```{python py-plotnine-cap, echo=T, results='hide', warning=F, fig.width=7, message=F, fig.cap="(ref:py-plotnine-cap)"}
ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)')
) + geom_point() + stat_smooth(method='lm') + facet_wrap('~gear')

現状ではmatplotlibの標準出力や警告も表示されてしまうため, チャンクオプション results='hide', warning=F, message=F で隠すと良い.

Python のグラフィックに関する制約

matplotlib ベースのグラフィックを出力したい場合, いくつかの制約がある.

よって, 現状では matplotlib エンジンでグラフィックを描くときはなるべく plotnine を使ったほうがトラブルが少ない.

また plotly, bokeh などの matplotlib に依存しないモジュールはPDFには対応していないため直接表示できない. 一旦画像を保存して, あらためて画像ファイルを埋め込む必要がある.



Gedevan-Aleksizde/rmdja documentation built on Sept. 28, 2021, 2:49 a.m.