2013-07-31 14 views
51

Non si adatta alla diapositiva per impostazione predefinita, non stampa nemmeno con altri mezzi.Dimensioni e risoluzione del plotter con markdown R, knitr, pandoc, beamer

Ecco il .Rmd: Modifica: sembra che sia necessario utilizzare plot() in ogni blocco. La seconda trama ora stampa.

# Plot should show at high resolution 

```{r echo=FALSE, comment = ""} 
# load some data 
require(plyr) 
rbi <- ddply(baseball, .(year), summarise, 
    mean_rbi = mean(rbi, na.rm = TRUE)) 
``` 

```{r} 
# plot 
plot(mean_rbi ~ year, type = "l", data = rbi) 
``` 

# Second attempt 
```{r, fig.width = 2, fig.height = 2} 
plot(mean_rbi ~ year, type = "l", data = rbi) 
``` 

# Third attempt 
```{r, out.width = 2, out.height = 2} 
plot(mean_rbi ~ year, type = "l", data = rbi) 
``` 

# Fourth attempt 
```{r, out.width = '200px', out.height = '200px'} 
plot(mean_rbi ~ year, type = "l", data = rbi) 
``` 

# Fifth attempt 
```{r, out.width = '\\maxwidth'} 
plot(mean_rbi ~ year, type = "l", data = rbi) 
``` 

Salva che, come test.Rmd quindi compilare a Tex con Beamer:

knit("test.Rmd") 
system("pandoc -s -t beamer --slide-level 1 test.md -o test.tex") 

aperto test.tex in RStudio e fare clic su "Compila PDF".

Ho letto documentation di Yihui e spero di non aver perso qualcosa di veramente ovvio.

Modifica nuovo codice che incorpora i suggerimenti di Yihui.

```{r setup, include=FALSE} 
opts_chunk$set(dev = 'pdf') 
``` 

# Plot should show at high resolution 

```{r echo=FALSE, comment = ""} 
# load some data 
require(plyr) 
rbi <- ddply(baseball, .(year), summarise, 
    mean_rbi = mean(rbi, na.rm = TRUE)) 
``` 

```{r} 
# plot 
plot(mean_rbi ~ year, type = "l", data = rbi) 
``` 

# Second attempt 
```{r, fig.width = 4, fig.height = 4} 
plot(mean_rbi ~ year, type = "l", data = rbi) 
``` 

sessionInfo()

R version 3.0.1 (16/05/2013) 
Platform: x86_64-pc-linux-gnu (64-bit) 

Local: 
[1] LC_CTYPE = en_US.UTF-8 LC_NUMERIC = C LC_TIME = C LC_COLLATE = C   
[5] LC_MONETARY=C  LC_MESSAGES=C  LC_PAPER=C   LC_NAME=C   
[9] LC_ADDRESS=C   LC_TELEPHONE=C  LC_MEASUREMENT=C  LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] plyr_1.8  markdown_0.6 knitr_1.2  rCharts_0.3.51 slidify_0.3.52 

loaded via a namespace (and not attached): 
[1] RJSONIO_1.0-3 codetools_0.2-8 digest_0.6.3 evaluate_0.4.3 formatR_0.8  
[6] grid_3.0.1  lattice_0.20-15 stringr_0.6.2 tools_3.0.1  whisker_0.3-2 
[11] yaml_2.1.7 
+1

Ho modificato il tuo post e rimosso 'print (x)' poiché è sia privo di significato che molto fuorviante. Spero non ti dispiaccia. –

risposta

36

penso che è una domanda frequente circa il comportamento di figure in diapositive videoproiettore prodotte da Pandoc e Markdown. Il vero problema è che R Markdown produce immagini PNG per impostazione predefinita (da knitr), ed è difficile ottenere la dimensione delle immagini PNG corrette in LaTeX di default (non so perché). È abbastanza facile, tuttavia, ottenere la dimensione delle immagini PDF corrette. Una soluzione è quella di ripristinare il dispositivo grafica predefinita per PDF nel primo blocco:

```{r setup, include=FALSE} 
opts_chunk$set(dev = 'pdf') 
``` 

Poi tutte le immagini sarà scritto come file PDF, e LaTeX sarà felice.

Il secondo problema è che si confondono le unità HTML con unità LaTeX in out.width/out.height. LaTeX e HTML sono tecnologie molto diverse. Non dovresti aspettarti che \maxwidth funzioni in HTML o 200px in LaTeX. Soprattutto quando si desidera convertire Markdown in LaTeX, è preferibile non impostare out.width/out.height (utilizzare fig.width/fig.height e lasciare che LaTeX utilizzi la dimensione originale).

+0

Questo aiuta, ma non è ancora abbastanza. La prima trama è ancora enorme. La seconda trama è piccola, ma a una risoluzione molto bassa. Ho provato ad aggiungere il codice da [questa domanda simile] (http://stackoverflow.com/questions/13004001) direttamente nel file .tex (dopo il lavoro a maglia). Controlla la larghezza, ma cade ancora dalla parte inferiore della diapositiva.Ci scusiamo per la grafica di base 'print()'. Io uso Ubuntu - le informazioni sulla sessione arrivano direttamente. – nacnudus

+5

@nacnudus è meglio rimuovere la directory 'figure' prima di eseguire nuovamente knitr; ci sono molti fatti oscuri su LaTeX, ad es. preferisce PNG su PDF di default, quindi se ci sono un 'foo.png' e un' foo.pdf', '\ includegraphics {foo}' userà 'foo.png' –

15

Le dimensioni delle figure sono specificate in pollici e possono essere incluse come opzione globale del formato di output del documento. Per esempio:

--- 
title: "My Document" 
output: 
    html_document: 
    fig_width: 6 
    fig_height: 4 
--- 

e le dimensioni della trama nel dispositivo grafico può essere aumentata a livello di blocco:

```{r, fig.width=14, fig.height=12}   #Expand the plot width to 14 inches 

ggplot(aes(x=mycolumn1, y=mycolumn2)) +  #specify the x and y aesthetic 
geom_line(size=2) +       #makes the line thicker 
theme_grey(base_size = 25)     #increases the size of the font 
``` 

È anche possibile utilizzare i out.width e out.height argomenti per definire direttamente la dimensione della trama nel file di output:

```{r, out.width="200px", out.height="200px"} #Expand the plot width to 200 pixels 

ggplot(aes(x=mycolumn1, y=mycolumn2)) +  #specify the x and y aesthetic 
geom_line(size=2) +       #makes the line thicker 
theme_grey(base_size = 25)     #increases the size of the font 
``` 
+0

il livello del blocco" fig.width "non non funziona per me – theforestecologist

+0

@theforestecologist Probabilmente hai bisogno di una virgola prima della prima opzione, come '{r chunk-name, opt = val, opt = val2}'. In questo modo funziona per me. Non sono abbastanza alfabetizzato per modificarlo, comunque. – Frank