2016-06-23 26 views
3

Ich habe eine R-Schleife, die eine Wald-Grafik in jeder Iteration mit Metafor erzeugt. Ein Forest-Graph hat eine Zeile pro Sample, und jede Iteration hat eine andere Anzahl von Samples. Daher muss die Höhe beträchtlich variieren (derzeit zwischen 2,5 und 8 Zoll).Knitr variieren Figur Größe in der gleichen Brocken

Ich habe mehrere Optionen wie this one versucht, aber egal was ich mache, jede Grafik, die ich erstelle, hat die gleiche Höhe in der .pdf-Dateiausgabe (es scheint einfach die Dateien quadratisch zu machen), es gibt nur sehr große weiße Ränder über und unter.

Ich fand auch die Notiz auf benutzerdefinierten Grafikgeräten here, aber ich weiß nicht, wie Sie das Grafikgerät in der Mitte eines Stücks ändern. Ich habe versucht, einfach opts_chunk$set(fig.width=fheight) in jeder Schleife Iteration zu verwenden, aber kein Glück.


MWE

\documentclass{article} 

\begin{document} 

<<Mwe, echo=FALSE, results = 'asis', message='FALSE', fig.width=7,warning='FALSE'>>= 

heights <- c(2.5, 8) 

for(counter in 1:length(heights)) { 
    opts_chunk$set(fig.height=heights[counter]) #This doesn't appear to change anything 
    par(fin=c(7, heights[counter]) #this makes the plot have the correct height, but I get a 2.5 inch high plot vertically centered in a 7 inch high pdf. 
    hist(rnorm(100)) 

    cat("Some long text which describes a lot of stuff about this graphic before making a new subsection for the next one") 
} 

@ 

\end{document} 

Antwort

0
\documentclass{article} 

\begin{document} 

<<Mwe, echo=FALSE, results = 'asis', message = F, warning = F>>= 
library(knitr) 
library(magrittr) 

heights <- c(2.5, 8) 

captions <- c("Caption 1", "Caption 2") 

# Template for a plot chunk 
template <- "<<plot-chunk-{{i}}, fig.height = {{ph}}, fig.cap = '{{pc}}', echo = FALSE>>= 
    hist(rnorm(100)) 
@" 

# Knit the chunk and cat() the results using knit, knit_expand 
knitfun <- function(i) { 
    knit_expand(text = template, i = i, ph = heights[i], pc = captions[i]) %>% 
    knit(text = ., quiet = T) %>% 
    cat() 
} 

invisible(lapply(1:2, knitfun)) 


@ 

\end{document} 

ich auf this Antwort auf eine ähnliche Frage diese Antwort bin stützen.