web-dev-qa-db-ja.com

Rmdを使用したknitrの解像度が低い

.Rmdファイルがあり、pandoc関数を使用して.docxファイルを作成しようとしています。

最終的な解像度が504x504ピクセル(つまり、72xpiで7x7インチ)のフィギュアが欲しいのですが。残念ながら、デフォルトの72 dpiは品質が低すぎるため、最終解像度を変更せずに、たとえば150 dpiに増やしたいと考えています(そのため、.docxファイル内ですでに正しいサイズになっています)。オプションのfig.widthとfig.height = 7を維持し、dpi = 150を設定すると、希望する品質が得られますが、最終的な解像度が高くなり、図が.docxマージンの外に飛び出します。引数out.widthとout.heightを試してみましたが、それらを含めると、最終的な.docxに何もプロットされません。

アイデア?

.Rmdコードの例:

My title
-------------------------

*(this report was produced on: `r as.character(Sys.Date())`)*  

That's my plot

```{r echo=FALSE}
    plot(0,0,type="n",xlim=c(0,500), ylim=c(-12,0), las=1)
    color  <-  Rainbow(500)
    text(380,-1,"Test",pos=4)
    lseq   <-  seq(-6,-2,length.out=500)
    for(j in seq_along(lseq)) {
        lines(c(400,450), rep(lseq[j], 2), col=color[j])
    }
    polygon(c(400,450,450,400), c(-6,-6,-2,-2), lwd=1.2)
```

.docxへの変換

library(knitr)
library(markdown)
knit("example.Rmd")  # produces the md file
pandoc("example.md", format = "docx") #prodces the .docx file

フィギュアを再スケールしようとしてもうまくいきません。未満:

My title
-------------------------

*(this report was produced on: `r as.character(Sys.Date())`)*  

That's my plot

```{r echo=FALSE, dpi=150, fig.width=7, fig.height=7, out.width=504, out.height=504}
    plot(0,0,type="n",xlim=c(0,500), ylim=c(-12,0), las=1)
    color  <-  Rainbow(500)
    text(380,-1,"Test",pos=4)
    lseq   <-  seq(-6,-2,length.out=500)
    for(j in seq_along(lseq)) {
        lines(c(400,450), rep(lseq[j], 2), col=color[j])
    }
    polygon(c(400,450,450,400), c(-6,-6,-2,-2), lwd=1.2)
```
29
dbarneche

この質問が出されて以来、ソフトウェアは改善された可能性が高いです。プロットの解像度を上げる方法を探すためにこの質問に行きました。 OPの元のアプローチはそのまま使用できることがわかりました。

したがって、dpi=300dpi=150は、チャンクのパラメータに十分に明らかな違いを生み出しませんでした。Word内の画像の物理的なサイズを変更せずに、はるかに高品質の画像を作成しました。

```{r, echo=FALSE, dpi=300, fig.width=7, fig.height=7}
plot(0,0,type="n",xlim=c(0,500), ylim=c(-12,0), las=1)
color  <-  Rainbow(500)
text(380,-1,"Test",pos=4)
lseq   <-  seq(-6,-2,length.out=500)
for(j in seq_along(lseq)) {
    lines(c(400,450), rep(lseq[j], 2), col=color[j])
}
polygon(c(400,450,450,400), c(-6,-6,-2,-2), lwd=1.2)
```

ただし、out.widthおよびout.height警告が表示され、画像の生成が完全に削除されます。「fig.align、out.width、out.height、out.extraはWord出力ではサポートされていません」.

20
Matthew Walker

これは、出力タイプ用のknitrの組み込み動的カスタマイズ機能を利用する絶好の機会です。これは両方の出力ターゲットでテストされました...

````{r img-setup, include=FALSE, cache=FALSE}
out.format <- knitr::opts_knit$get("out.format")
img_template <- switch( out.format,
                     Word = list("img-params"=list(fig.width=6,
                                                   fig.height=6,
                                                   dpi=150)),
                     {
                       # default
                       list("img-params"=list( dpi=150,
                                               fig.width=6,
                                               fig.height=6,
                                               out.width="504px",
                                               out.height="504px"))
                     } )

knitr::opts_template$set( img_template )
````

生成されたすべての画像にimg_templateを使用したくない場合は、set関数を呼び出さずに、代わりにopts.label="img_template"を使用するチャンクのパラメーターに追加するか、チャンクのパラメーターを明示的に指定してimg_templateをオーバーライドします。

10
Thell

単純に、すべてのチャックを300 dpiに設定し、幅を広くしてください。

最初にこれを実行します。

```{r setup, include=FALSE}
knitr::opts_chunk$set(dpi=300,fig.width=7)
```
5
mmann1123