マークダウンにknitrを使用してローカル画像のサイズを設定するにはどうすればよいですか?


149

ローカルイメージを.Rmdファイルに含め、それknitをでHTMLスライドに変換しますPandocこの投稿ごとに、これはローカル画像を挿入します:
![Image Title](path/to/your/image)

このコードを変更して画像サイズも設定する方法はありますか?


5
サイズをより細かく制御するには、HTML imgタグ
Marius

5
2番目の@Mariusのコメント:daringfireball.net/projects/markdown/syntaxは次のように述べています。 」
ベンボルカー2013年

12
HTMLタグを使用した場合の問題は、Rmd変換プロセスによって画像が外部リソースとして認識されなくなったため、レンダリングされたHTMLのスタンドアロンバージョンに含まれないことです。
ファビアン

回答:


101

pngたとえば、パッケージを使用して画像を読み取り、パッケージgrid.rasterから使用する通常のプロットのようにプロットすることもできgridます。

```{r fig.width=1, fig.height=10,echo=FALSE}
library(png)
library(grid)
img <- readPNG("path/to/your/image")
 grid.raster(img)
```

この方法を使用すると、画像のサイズを完全に制御できます。


ありがとう、これはslidyを使用して動作します。(dzslidesではうまく機能しませんが、提供されているソリューションの問題だとは思いません)。
アダム・スミス

1
でファイルパスを引用符で囲む必要がありimg <- readPNG("path/to/your/image")ますが、ソリューションを編集できませんでした。
アダム・スミス

1
@AdamSmith私path/to/your/imageはあなたの質問からあなたをコピーしました。はい、パス名は文字列であり、文字列を定義するには引用符が必要です。私は明確に願っています。
agstudy 2013年

1
これをRStudioで実行すると、レンダリングされたpngに大きなマージンが作成されます。
Paulo E. Cardoso 14

19
将来の読者:この答えは時代遅れです。
CL。

190

質問は古いですが、それでも多くの注目を集めています。既存の回答は古くなっているので、ここではより最新のソリューションを示します。

ローカル画像のサイズ変更

とおりknitr1.12、機能がありますinclude_graphics?include_graphics(強調鉱山):

この関数を使用する主な利点は、knitrサポートされているすべてのドキュメント形式で機能するという意味で移植可能であるため、外部を埋め込むために、たとえばLaTeXやMarkdown構文を使用する必要があるかどうかを考える必要がないことです。画像。通常のRプロットで機能するグラフィックス出力に関連するチャンクオプションは、out.widthおよびなどのこれらの画像でも機能しout.heightます。

例:

```{r, out.width = "400px"}
knitr::include_graphics("path/to/image.png")
```

利点:

  • オーバーagastudyの答え:外部ライブラリまたは画像を再ラスタの必要はありません。
  • オーバーShrutiカプールの答え:手動で書き込みHTMLへの必要はありません。さらに、画像はファイルの自己完結型バージョンに含まれています。

生成された画像を含む

チャンクで生成された(含まれていない)プロットへのパスを作成するには、チャンクオプションopts_current$get("fig.path")(Figureディレクトリへのパス)およびopts_current$get("label")(現在のチャンクのラベル)が役立つ場合があります。次の例ではfig.path、最初のチャンクに生成された(ただし表示されていない)2つのイメージの2番目を含めるために使用します。

```{r generate_figures, fig.show = "hide"}
library(knitr)
plot(1:10, col = "green")
plot(1:10, col = "red")
```

```{r}
include_graphics(sprintf("%sgenerate_figures-2.png", opts_current$get("fig.path")))
```

図のパスの一般的なパターンはです[fig.path]/[chunklabel]-[i].[ext]。ここでchunklabeliは、プロットが生成されたチャンクのラベル、(このチャンク内の)プロットインデックス、およびextファイル拡張子(pngRMarkdownドキュメントではデフォルト)です。


18
PDF出力の場合、図の寸法の単位を指定する必要があります。たとえばout.width='100pt'、ラテックスを使用しない場合、違法な測定単位に関するエラーがスローされます。
andybega

4
MS Word出力でも機能しますが、out.widthとout.heightは機能しません
Ben

@andybegaコメントありがとうございます。私はそれを答えに組み込んだ。
CL。

2
あなたはおそらく望んでいますr, echo=FALSE, ...
Jameson Quinn

1
@jzadra問題の再現可能なコードを使用して新しい質問を作成してください。現時点では問題を再現できません(2番目のコードスニペットをそのままRMDファイルにコピーし、HTMLとWordに編成しました)。
CL。

112

未更新の回答:knitr 1.17あなたは単に使用できます

![Image Title](path/to/your/image){width=250px}

@jsbからのコメントに従って編集

これはスペースなしでのみ機能することに注意してください。たとえば、{width = 250px}ではなく{width = 250px}です。


6
私はこれをknitr 1.16で試してみましたが、ioslidesを使用すると機能しませんでした。この機能は削除されましたか、それともioslidesの問題ですか?
マイク博士、

2
すべてのパッケージの最新バージョンでは、私にとっても機能しません。
slhck 2017

3
knitr 1.17を使用して動作します。あなたはスペースを入れずに書くことを確認し、例えば{width=250px}ません{width = 250px}
jsb 2018

2
私にとっては、最も簡単な解決策です。
軍艦

これは、使用して私のために動作しないでしょうxaringanknitr_1.21
Lyngbakr

37

以下は、画像を再表示せずにファイルを自己完結させるいくつかのオプションです。

divタグで画像を囲む

<div style="width:300px; height:200px">
![Image](path/to/image)
</div>

スタイルシートを使用する

test.Rmd

---
title: test
output: html_document
css: test.css
---

## Page with an image {#myImagePage}

![Image](path/to/image)

test.css

#myImagePage img {
  width: 400px;
  height: 200px;
}

複数の画像がある場合は、この2番目のオプションにn番目の子の疑似セレクターを使用する必要がある場合があります。


1
これは良い解決策ですが、html出力でのみ使用できます!他の出力は設定を無視します
xhudik

<div> ... </div>解決策は非常に単純なようです。styleアスペクト比を維持しながら画像を固定パーセントに再スケーリングする設定は何ですか?
user101089 2017

pxの代わりに%を使用してみてください。
ニックケネディ

20

HTMLに変換する場合は、次のHTML構文を使用して画像のサイズを設定できます。

  <img src="path/to/image" height="400px" width="300px" />

または、任意の高さと幅を指定します。


6
このソリューションの問題は、画像がRmd変換プロセスによって外部リソースとして認識されなくなるため、レンダリングされたHTMLのスタンドアロンバージョンに含まれないことです。
ファビアン

8

今日同じ問題があり、knitr 1.16PDFに編成するときに別のオプションが見つかりました(これにはpandocがインストールされている必要があります):

![Image Title](path/to/your/image){width=70%}

この方法では、適切なサイズを見つけるために少し試行錯誤する必要がある場合があります。2つの画像を並べて配置することで、見栄えがよくなるため、特に便利です。例えば:

![Image 1](path/to/image1){width=70%}![Image 2](path/to/image2){width=30%}

クリエイティブになって、これらの2つを並べて積み重ね、必要に応じてサイズを調整できます。その他のアイデアと例については、https://rpubs.com/RatherBit/90926を参照してください


2
これは上記の私の答えとまったく同じではありませんか?
InspectorSands

2
@hermestrismegistusとほぼ同じですが、ピクセル幅ではなく幅のパーセントを使用しています。私は正確な幅を与えたときに、より良い、このように振る舞っている、私の特定のケースでは、私は複数の画像を並べて入れていたので、このオプションは有用であることが判明
テイラーPellerin

5

私のために働いた別のオプションは、次のknitr::include_graphics()ようなdpiオプションで遊ぶことです:

```{r}
knitr::include_graphics("path/to/image.png", dpi = 100)
```

...確かに(計算を行わない限り)チャンクの寸法を定義するのに比べて試行錯誤ですが、多分それは誰かを助けるでしょう。


4

knitr :: include_graphicsソリューションは図のサイズ変更にうまく機能しましたが、並べてサイズ変更された図を作成するためにそれを使用する方法を理解できませんでした。私が見つかりました。この記事は、そうするために有用。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.