2012-07-26 30 views
13

Hi nasıl değiştirilir ben iki çok farklı boyut çıkışlarını almak için beklediğiniz aşağıdaki kodu çalıştırarakknitr seçenekleri orta yığın

.. Yeni bir yığın oluşturmak zorunda kalmadan, bir yığın seçenekleri, orta yığın değiştirmek istiyorum, ama bir sebepten dolayı durum böyle görünmüyor.

Ayrıca, ikinci çizimde hiç çizilmiyor ... (bunu arsaya değiştirdiğinizde (2: 1000) ... ama her iki şekilde de ilk çıktı aynı boyutta. fig.width=7 . Nerede yanlış yapıyorum ben?

Pls 'orta yığın' önemini not Bunun nedeni farklı boyutlarda farklı çıkışlarını almak için bir işlev çalıştırırken yığın seçenekleri birkaç kez değiştirmek istiyorum olmasıdır.

aşağıdaki gibi
```{r} 
sessionInfo() 

opts_chunk$set(fig.width=3) 

plot(1:1000) 

opts_chunk$set(fig.width=10) 

plot(1:1000) 

``` 

sessionInfo çıktısı:

## R version 2.15.1 (2012-06-22) 
## Platform: i386-pc-mingw32/i386 (32-bit) 
## 
## locale: 
## [1] LC_COLLATE=English_United Kingdom.1252 
## [2] LC_CTYPE=English_United Kingdom.1252 
## [3] LC_MONETARY=English_United Kingdom.1252 
## [4] LC_NUMERIC=C       
## [5] LC_TIME=English_United Kingdom.1252  
## 
## attached base packages: 
## [1] stats  graphics grDevices datasets utils  methods base  
## 
## other attached packages: 
## [1] knitr_0.7 
## 
## loaded via a namespace (and not attached): 
## [1] digest_0.5.2 evaluate_0.4.2 formatR_0.5 parser_0.0-16 
## [5] plyr_1.7.1  Rcpp_0.9.13 stringr_0.6 tools_2.15.1 

html preview

+1

teoride, 'fig.width = c (3, 10) 'işlevini kullanmanıza izin verebilirim ve iki grafiği sırasıyla 3 ve 10 inç olarak kaydedebilirim, ancak sorun, grafikleri kaydettiğimde yalnızca bir tane kullanabilirim yığın boyutu, çizim boyutu ve çizim boyutu farklıysa, çizimleriniz doğru görünmeyebilir ([kullanım kılavuzu] konusuna bakın (https://github.com/downloads/yihui/knitr/knitr-graphics.pdf) Ayrıntılar için) –

+0

http://stackoverflow.com/q/11653573/559676, kod parçalarının programlanabilir bir şekilde nasıl oluşturulacağını ve örüleceğini göstermek için iyi bir örnek olmalıdır; Bu durumdan daha karmaşık olabilir, ancak yine de yapabilirsiniz –

cevap

5

İki soru: Her iki rakamlar, tutmak olmak

```{r fig.keep='all'} 

Standart sadece (senin iki parsel aynıdır, çünkü ikincisi kaldırılır benzersiz araziler tutar kullanmak istediğinizde; Ayrıntılar için bkz. knitr graphics manual.

```{r} 
opts_chunk$set(fig.width=10) 
``` 


```{r} 
opts_chunk$set(fig.width=2) 
# Our figure is 10 wide, not 2 
plot(1:1000) 
``` 

```{r} 
# Our figure is 2 wide, not 10 
opts_chunk$set(fig.width=10) 
plot(1:1000) 
``` 
+0

'fig.keep =' all'' parçası üzerinde anlaşılmıştır. Bunun için teşekkür ederim, bunu takdir ediyorum ... ama sorunun ana kısmının bütün noktası kodu ayrı parçalara ayırmak için DEĞİLDİ ... bahsettiğim gibi, farklı boyut çıktı görüntüleri üreten tek bir fonksiyon çalıştırıyorum Oluşturulacak ve tüm figürasyon için 'fig.width' ayarının bazı görüntüler için tamamının olması, diğerlerinin çok küçük veya çok büyük olmasını sağlar, bu yüzden bir opts_current $ setini koymak için kodu düzenlemek istedim (fig.width = x) işlevdeki parseller arasında. –

+0

Düzenleme için teşekkürler @Yihui, bu fig.keep kalıntılar vardı. –

+0

@ h.l.m kısa cevap hayır, bu şekilde opts_current' kullanmak mümkün değildir. –

9

Bu github Yui gelen ipuçları dayalı benim için çalışıyor: Bir sonraki öbek (ler) açık olduğunda

Küresel yığın seçenekleri aktif.

\documentclass{article} 

\begin{document} 
<<setup,echo=FALSE>>= 
opts_knit$set(progress = F, verbose = F) 
opts_chunk$set(comment=NA, warning=FALSE,message=FALSE,fig.width=6, echo=F) 
kexpand=function(){ 
    cat(knit(
    text=knit_expand(text= 
        "<<yfig-{{cap}}-,fig.cap='{{cap}}',results='markup',echo=FALSE,fig.height={{figheight}},out.height={{outheight}}>>=\n 
        .q\n 
        @" 
) 
))} 
@ 

<<results='asis'>>= 
library(ggplot2) 
.q=qplot(1:10);cap="first caption";figheight=9;outheight=90 
kexpand() 
.q=qplot(1:20);cap="second caption";figheight=12;outheight=160 
kexpand() 

@ 
\end{document} 

Yani bir önemli şey, aksi takdirde çıkış yok F ilerleme ve ayrıntılı ayarlamaktır. Daha sonra küçük işlev kexpand işlevi, işlevin bir parçası olarak metin olarak yazılan bir satır içi şablonu genişletir. Ardından, çiziminizi .q ve altyazı olarak kapak ve yükseklikler vb. Olarak tanımlayabilirsiniz. Diğer seçenekleri kontrol etmek için işlevi uyarlayabilirsiniz. Strangely, .q ve altyazı, işlev için parametreler olmak zorunda değil, bunları yalnızca mevcut ortamda ayarlayabilir ve yine de işlev tarafından yakalanabilirler. Bunun iyi bir uygulama mı yoksa neden işe yarayıp yaramadığını bilmiyorum.

+0

Herhangi bir nedenle, bu sizin örnekinizi tam olarak takip ettiğimde sadece benim için çalışır. Eğer ggplot'tan başka çizimlerim varsa, (taban R, metafor orman arsası) işe yaramıyor. Bir tuhaflık bile olsa, bir vektörde yüksekliklere sahip olursam ve vektörü oluşturan şekillere dönüşürse, o da işe yaramaz. Metodunuzun benim durumum için çalışacak şekilde değiştirilip değiştirilemeyeceği hakkında bir fikrin var mı? http://stackoverflow.com/questions/37998364 – rumtscho