Markdown için knitr kullanarak yerel görüntü için boyut nasıl ayarlanır?


150

Ben daha .Rmdsonra knitve HTML slaytları dönüştürmek bir dosyaya dahil etmek istiyorum yerel bir görüntü var Pandoc. Bu gönderi başına , yerel resim eklenir:
![Image Title](path/to/your/image)

Görüntü boyutunu da ayarlamak için bu kodu değiştirmenin bir yolu var mı?


5
Boyutlar üzerinde daha hassas kontrol için, bir HTML img etiketi
Marius

5
ikinci @ Marius'un yorumu: daringfireball.net/projects/markdown/syntax "Bu yazıdan itibaren Markdown'ın bir görüntünün boyutlarını belirtmek için bir sözdizimi yok; bu sizin için önemliyse, normal HTML <img> etiketlerini kullanabilirsiniz ."
Ben Bolker

12
HTML etiketlerini kullanmadaki sorun, görüntünün artık Rmd dönüştürme işlemi tarafından harici bir kaynak olarak tanınmamasıdır, bu nedenle oluşturulan HTML'nin bağımsız bir sürümüne dahil edilmez.
fabians

Yanıtlar:


101

Ayrıca kullanarak görüntüyü okuyabilir pngörneğin paketi ve kullanma düzenli arsa gibi çizmek grid.rastergelen gridpaketin.

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

Bu yöntemle görüntünüzün boyutunu tam olarak kontrol edebilirsiniz.


Teşekkür ederim, bu kaygan kullanarak çalışıyor. (Dzslides ile iyi çalışmıyor, ancak sağlanan çözümle ilgili bir sorun olduğuna inanmıyorum).
Adam Smith

1
Dosyayolu etrafında alıntı yapmak gerekiyor, img <- readPNG("path/to/your/image")ancak çözümü düzenleyemedim.
Adam Smith

1
@AdamSmith Sorunu yeni kopyaladım path/to/your/image. Evet yol adı bir dizedir, ve bir dize tanımlamak için tırnak işaretleri gerekir. Umarım netim.
agstudy

1
Bunu RStudio altında çalıştırarak, işlenmiş png için büyük bir marj oluşturacaksınız.
Paulo E. Cardoso

19
Gelecek okuyucular: Bu cevap modası geçmiş .
CL.

190

Soru eski, ama yine de çok dikkat çekiyor. Mevcut cevaplar modası geçmiş olduğundan, burada daha güncel bir çözüm:

Yerel görüntüleri yeniden boyutlandırma

İtibariyle knitr1.12 , fonksiyon yoktur include_graphics. Kimden ?include_graphics(vurgu mayın):

Bu işlevi kullanmanın en büyük avantajı, knitrdestekleyen tüm belge formatları için çalışması anlamında taşınabilir olmasıdır , bu nedenle harici bir gömmek için örneğin LaTeX veya Markdown sözdizimini kullanmanız gerekip gerekmediğini düşünmenize gerek yoktur. görüntüsü. Normal R grafikleri için çalışan grafik çıkışıyla ilgili yığın seçenekleri out.widthve gibi bu görüntüler için de çalışır out.height.

Misal:

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

Avantajları:

  • Aşırı agastudy cevabı : Harici kütüphaneler için ya da görüntüyü yeniden rastering gerek yok.
  • Aşırı Shruti Kapoor'un cevap : elle yazma HTML gerek yok. Ayrıca, görüntü dosyanın kendi içinde bulunan sürümüne eklenir.

Oluşturulan görüntüler dahil

Bir öbekte oluşturulan (ancak dahil edilmeyen) bir çizimin yolunu oluşturmak için , öbek seçenekleri opts_current$get("fig.path")(şekil dizinine giden yol) ve opts_current$get("label")(geçerli öbek etiketi) faydalı olabilir. Aşağıdaki örnek fig.path, ilk parçaya oluşturulan (ancak görüntülenmeyen) iki görüntünün ikincisini eklemek için kullanılır:

```{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ür yollarının genel kalıptır [fig.path]/[chunklabel]-[i].[ext]nerede chunklabel, arsa oluşturulduktan öbek etikettir i(bu yığın içinde) arsa endeksi ve ext(varsayılan olarak dosya uzantısıdır pngRMarkdown belgelerinde).


18
PDF çıktısı için, şekil boyutları için birimler belirtmeniz gerekecektir, örneğin out.width='100pt', lateks yasadışı ölçü birimi hakkında bir hata verecektir.
andybega

4
MS Word çıktısı için de çalışır, ancak out.width ve out.height çalışmıyor
Ben

@andybega Yorumunuz için teşekkür ederiz; Cevaba ekledim.
CL.

2
muhtemelen istersinizr, echo=FALSE, ...
Jameson Quinn

1
@jzadra Lütfen sorununuz için tekrarlanabilir kodla yeni bir soru oluşturun. Şu anda sorununuzu yeniden oluşturamıyorum (ikinci kod snippet kelimesini bir RMD dosyasına kopyalayıp HTML ve Word'e ördüm).
CL.

112

Un güncellenmiş cevap: içinde knitr 1.17sadece kullanabilirsiniz

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

düzenlemek @jsb gelen açıklama gereği

Bunun yalnızca boşluk olmadan çalıştığını unutmayın, örn. {Width = 250px} değil {width = 250px}


6
Bunu knitr 1.16'da denedim ve ioslides kullanırken işe yaramadı. Bu özellik daha sonra kaldırıldı mı yoksa bir ioslides sorunu mu?
Dr. Mike

2
Benim için de çalışmıyor, tüm paketlerin en son sürümünde.
slhck

3
Knitr 1.17 kullanarak benim için çalışıyor. Emin, boşluksuz örn yazma olun {width=250px}değildir {width = 250px}.
jsb

2
Benim için çalışıyor, en kolay çözüm.
savaş gemisi

Bu kullanarak benim için işe yaramaz xaringanile knitr_1.21.
Lyngbakr

37

Görüntüyü yeniden düzenlemeden dosyayı kendi içinde tutan bazı seçenekler şunlardır:

Görüntüyü divetiketler

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

Stil sayfası kullanma

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;
}

Birden fazla görüntünüz varsa, bu ikinci seçenek için n. Alt sözde seçiciyi kullanmanız gerekebilir.


1
bu iyi bir çözümdür ancak yalnızca html çıktısı ile kullanılabilir! Diğer çıkış ayarı görmezden gelecek
xhudik

<div> ... </div>Çözümü çok basit görünüyor. En styleboy oranını koruyarak görüntüyü sabit bir yüzde olarak yeniden ölçeklendirme ayarı nedir ?
user101089

Px yerine% kullanmayı deneyin.
Nick Kennedy

20

HTML'ye dönüştürüyorsanız, HTML sözdizimini kullanarak görüntünün boyutunu aşağıdakileri kullanarak ayarlayabilirsiniz:

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

veya hangi yükseklik ve genişliği vermek istersiniz.


6
bu çözümdeki sorun, görüntünün artık Rmd dönüştürme işlemi tarafından harici bir kaynak olarak tanınmamasıdır, bu nedenle oluşturulan HTML'nin bağımsız bir sürümüne dahil edilmeyecektir.
fabians

8

Bugün aynı sorunu vardı ve knitr 1.16PDF'ye örme yaparken başka bir seçenek buldu (pandoc yüklü olmasını gerektirir):

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

Bu yöntem, sizin için uygun boyutu bulmak için biraz deneme yanılma yapmanızı gerektirebilir. Özellikle uygundur, çünkü iki görüntüyü yan yana daha güzel bir işlem haline getirir. Örneğin:

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

Yaratıcı olabilir ve bunlardan birkaçını yan yana istifleyebilir ve uygun gördüğünüz şekilde boyutlandırabilirsiniz. Daha fazla fikir ve örnek için https://rpubs.com/RatherBit/90926 adresine bakın .


2
bu yukarıdaki cevabımla tam olarak aynı değil mi?
InspectorSands

2
@hermestrismegistus neredeyse, ama piksel genişliği yerine genişlik yüzdesi kullanıyorum. Bu seçeneği faydalı buldum çünkü benim özel durumumda, birden fazla görüntüyü yan yana koyuyordum, bu da daha iyi davrandığımda tam genişlik verdiğimde
Taylor Pellerin

5

Benim için çalışan bir başka seçenek de dpi seçeneği ile oynamaktır knitr::include_graphics():

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

... emin olun (matematiği yapmazsanız), yığındaki boyutları tanımlamaya kıyasla deneme yanılmadır, ama belki birine yardımcı olacaktır.


4

Knitr :: include_graphics çözümü rakamları yeniden boyutlandırmak için iyi çalıştı, ancak yan yana yeniden boyutlandırılmış rakamlar üretmek için nasıl kullanılacağını anlayamadım. Bu gönderiyi yararlı buldum .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.