2016-05-04 19 views
1

R Markdown文書をPDFにタイプ設定すると、関数が複数のプロットを描画すると、最初のプロットだけが完全に横並びに表示されることがよくありますページの余白の範囲内にある。R Markdown:PDFに組版するときに余白が外れるループ内のプロット

最小限R値引き例:ここ

--- 
title: "Example re plotting problem" 
author: "Daniel E. Weeks" 
date: "May 3, 2016" 
output: pdf_document 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE) 
``` 

## Multiple plots within a loop 


```{r} 
plots <- function() { 
    plot(rnorm(100)) 
    hist(rnorm(100)) 
} 

for (i in 1:3) { 
plots() 
} 
``` 

問題を示す生成されたPDF

の2ページのスクリーンショットです。私はオンラインで検索しましたが、この問題の解決策はまだ見つかりませんでした。

ありがとうございます。


user2554330で提案されているプロットフック解決策は簡単であり、うまく機能します。したがって、このコードは、結果のPDFの余白内の全てのプロットを描画します。

--- 
title: "Example re plotting problem" 
author: "Daniel E. Weeks" 
date: "May 3, 2016" 
output: pdf_document 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE) 
``` 

## Multiple plots within a loop 


```{r} 
plots <- function() { 
    plot(rnorm(100)) 
    hist(rnorm(100)) 
} 
``` 

## Call plotting function 

```{r} 
my_plot_hook <- function(x, options) 
paste("\n", knitr::hook_plot_tex(x, options), "\n") 
knitr::knit_hooks$set(plot = my_plot_hook) 
for (i in 1:3) { 
plots() 
} 
``` 
+0

'layout'関数を使ってプロットを配置することができます。また、プロット領域やマージンなどを操作するのに役立つparには多くの引数があります。 –

+0

各チャンクにオプションを設定することもできます。 'fig.width ='と 'fig.height ='は私がプロットを調整するために使ったものです。 –

+0

提案していただきありがとうございますが、私の質問は、上記の最小限の例で示したように、__R Markdownが生成されるPDF__の余白内にすべてのプロットをプロットしていないという問題を解決する方法です。所望の出力は、ドキュメントの余白内のすべてのプロットで、通常の幅と高さになります。この問題は、他のプロット関数(プロット関数を簡単に変更する方法がない場合)を使用する場合にも発生することに注意してください。 –

答えて

1

問題が発生した.texファイルは} \ includegraphics {の間にスペースを持っていない呼び出すことです。 LaTeXは、グラフィックスがライン上に単独で座るのに十分な大きさではなく、各ライン上に2つを置くと大きすぎるため、過度のhboxについての警告を出す。

あなたはコードチャンクの前のテキストに

\pretolerance=10000 

を追加することにより、各ライン上の2つの数字を入れずに悪いライン出力にはLaTeX(本当にTeXに)伝えることができます。おそらく、コードチャンクの後に戻ってそのデフォルト値

\pretolerance=100 

にそれを設定したいと思う、またはラテックスは、その後のハイフネーションをしようとはしませんし、テキストは本当に醜い見ることができます。

これを修正するもう1つの方法は、各図を独自の段落にすることです。これを行うには、プロットする前にコードを追加してください。

my_plot_hook <- function(x, options) 
    paste("\n", knitr::hook_plot_tex(x, options), "\n") 
knitr::knit_hooks$set(plot = my_plot_hook) 

これにより、各図の前後に空白行 が置かれます。

+0

ありがとうございます - 私は、単純で効果的な 'my_plot_hook'ソリューションが好きです。 –

関連する問題