また、Rマークダウンをhtmlと.docx / .odtの両方に変換し、適切なサイズと解像度の図を作成したいと思います。これまで、これを行う最良の方法は、.mdドキュメント(dpi、fig.width、fig.heightオプション)でグラフの解像度とサイズを明示的に定義することであることがわかりました。これを行うと、公開に使用できる優れたグラフが得られ、odt/docxは問題ありません。デフォルトの72dpiよりもはるかに高いdpiを使用する場合の問題は、htmlファイルでグラフが大きくなりすぎることです。これを処理するために私が使用した3つのアプローチは次のとおりです(NB私はspin()構文でRスクリプトを使用します):
1)knitrオプションでout.extra ='WIDTH = "75%"'を使用します。これにより、htmlのすべてのグラフがウィンドウ幅の75%を占めるようになります。これは迅速な解決策ですが、サイズが大きく異なるプロットがある場合は最適ではありません。(注:私はインチよりもセンチメートルで作業することを好みます。したがって、どこでも/2.54です)
library(knitr)
opts_chunk$set(echo = FALSE, dev = c("png", "pdf"), dpi = 400,
fig.width = 8/2.54, fig.height = 8/2.54,
out.extra ='WIDTH="75%"'
)
data(iris)
#' # Iris datatset
summary(iris)
boxplot(iris[,1:4])
#+ fig.width=14/2.54, fig.height=10/2.54
par(mar = c(2,2,2,2))
pairs(iris[,-5])
2)out.widthとout.heightを使用して、グラフのサイズをピクセル単位でhtmlファイルに指定します。定数「sc」を使用して、プロットのサイズをhtml出力に縮小します。これはより正確なアプローチですが、問題は、グラフごとにfig.witdth/heightとout.width/heightの両方を定義する必要があり、これは本当につまらないことです。理想的には、グローバルオプションで、たとえばout.width = 150 * fig.width(fig.widthがチャンクごとに変わる)を指定できる必要があります。たぶんそのようなことは可能ですが、私には方法がわかりません。
#+ echo = FALSE
library(knitr)
sc <- 150
opts_chunk$set(echo = FALSE, dev = c("png", "pdf"), dpi = 400,
fig.width = 8/2.54, fig.height = 8/2.54,
out.width = sc*8/2.54, out.height = sc*8/2.54
)
data(iris)
#' # Iris datatset
summary(iris)
boxplot(iris[,1:4])
#+ fig.width=14/2.54, fig.height=10/2.54, out.width= sc * 14/2.54, out.height= sc * 10/2.54
par(mar = c(2,2,2,2))
pairs(iris[,-5])
これらの2つのソリューションでは、mdファイルをpandocを使用してodtに直接変換することはできないと思います(図は含まれていません)。mdをhtmlに変換し、次にhtmlをodtに変換します(docxでは試していません)。そのようなもの(以前のRスクリプトが「figsize1.R」という名前の場合):
library(knitr)
setwd("/home/gilles/")
spin("figsize1.R")
system("pandoc figsize1.md -o figsize1.html")
system("pandoc figsize1.html -o figsize1.odt")
3)ドキュメントを2回コンパイルするだけです。1回はhtml出力用に低dpi値(〜96)で、もう1回はodt / docx出力用に高解像度(〜300)でコンパイルします。これが今の私の好みの方法です。主な欠点は、2回コンパイルする必要があることですが、エンドユーザーに提供するためにジョブの最後にのみodtファイルが必要になるため、これは私にとって実際には問題ではありません。Rstudioのhtmlノートブックボタンを使用して、作業中にhtmlを定期的にコンパイルします。
#+ echo = FALSE
library(knitr)
opts_chunk$set(echo = FALSE, dev = c("png", "pdf"),
fig.width = 8/2.54, fig.height = 8/2.54
)
data(iris)
#' # Iris datatset
summary(iris)
boxplot(iris[,1:4])
#+ fig.width=14/2.54, fig.height=10/2.54
par(mar = c(2,2,2,2))
pairs(iris[,-5])
次に、次のスクリプトを使用して2つの出力をコンパイルします(ここでは、mdファイルをhtmlに直接変換できます)。
library(knitr)
setwd("/home/gilles")
opts_chunk$set(dpi=96)
spin("figsize3.R", knit=FALSE)
knit2html("figsize3.Rmd")
opts_chunk$set(dpi=400)
spin("figsize3.R")
system("pandoc figsize3.md -o figsize3.odt")