2015-03-26 11 views
12

Sto tentando di risolvere una differenza notevole nella dimensione del carattere quando si confrontano i grafici generati per un documento knitr. L'output HTML/markdown sembra essere quello che considererei la dimensione corretta mentre l'output PDF/Latex è di circa 2-4 pts più grande (ad esempio, se mi aspettassi 12pt, l'output è più vicino 14 o 16 pts). Nota che il problema sembra essere limitato al testo della trama/figura e non sembra manifestarsi con altro testo nel documento di output.Raggiungimento di dimensioni di carattere di figure coerenti con knitr, HTML/markdown e PDF/Latex

Il modo più semplice per me di dimostrarlo è con il contenuto predefinito che RStudio (versione 0.99.329) popola quando viene creato un nuovo file *.Rmd. Un confronto side-by-side è disponibile tramite this link. Ai miei occhi, la versione HTML è dimensionata correttamente e la versione PDF/Latex non lo è.

A mia conoscenza, non ho alcuna impostazione personalizzata nel mio profilo .Rpr o in altri luoghi che potrebbero avere un impatto su questo problema. Ho provato a disabilitare/abilitare il ritaglio PDF e questo non sembra avere alcun impatto sul problema. Ho duplicato il problema su una macchina di colleghi (anche con OS X e la stessa versione di RStudio).

Al di fuori del framework (ad esempio, è sufficiente eseguire il codice R) non sembra esserci una tale differenza tra l'output PDF e PNG. Ad esempio, il codice seguente produce un output che è abbastanza simile:

library(ggplot2) 
r <- ggplot(data = diamonds, 
    aes(x = carat, y = price, color = cut, group = cut)) 
r + geom_smooth(size = 2) + 
    ggtitle("Plant growth with\ndifferent treatments") 

ggsave(file="test.pdf") 
ggsave(file="test.png") 

Dato che questo codice precedente produce trame di uscita che sono abbastanza simili, io sono sospettoso i problemi che sto vedendo sono legati alla knitr o rmarkdown/processo di conversione pandoc.

Quindi, la mia domanda principale è se il livello di differenze che sto vedendo tra i formati di output è previsto? Sono l'unico? È unico per il mio sistema?

Se si prevede un comportamento, in che modo la gente riconcilia il problema? Per i ggplot, ho utilizzato theme_bw(8.5) per ridimensionare i caratteri per l'output PDF/latex. Funziona, ma aggiunge un altro livello di complessità durante la creazione di output per più piattaforme/usi dallo stesso file *.Rmd ... uno dei principali vantaggi di .

Specifiche del mio setup e del sistema

  • OS X 10.10.2, MacBook Pro (Retina, 15-inch, Early 2013)
  • RStudio versione 0.99.329
  • R versione 3.1.2 (2014/10/31) - "Pumpkin Helmet"
  • rmarkdown 0.5.1
  • Pandoc 1.13.1
+0

Ho lo stesso problema. Penso che abbia qualcosa a che fare con i diversi dispositivi grafici standard per PDF e file HTML ('dev: (' pdf 'per output LaTeX e' png 'per HTML/markdown; carattere)', http://yihui.name/knitr/options /). Se imposto manualmente 'dev = pdf' per i file html, non può più essere visualizzato, ma il file generato mostra le stesse dimensioni del font della generazione pdf. Se imposto manualmente 'dev = 'png'' per i file pdf, ottengo l'errore': argomento inutilizzato (pdf = elenco (useDingbats = FALSE) ', che potrebbe avere qualcosa a che fare con il componente' dev.args' -option Qui penso che potrebbe anche essere la soluzione ... – Julian

risposta

1

Hai provato la soluzione this, che imposta diversi dispositivi di output per diversi formati di output? Eccolo:

soluzione per la produzione di PDF e output HTML da un file Markdown unica impostando opzioni specifiche per knitr nel Makefile:

$(PDF): $(SRC) Makefile 
Rscript \ 
    -e "library(knitr)" \ 
    -e "opts_chunk[['set']](dev = 'pdf')" \ 
    -e "pat_gfm()" \ 
    -e "knit('$<', 'temp.md')" 
$(PANDOC) temp.md -o [email protected] 
rm temp.md 

This risposta ha anche idee interessanti.

Eccolo:

provare a mettere questo codice pezzo all'inizio del documento Rmd.

```{r setup, cache=FALSE, include=FALSE} 
library(knitr) 
output <- opts_knit$get("rmarkdown.pandoc.to") 
if (output=="html") opts_chunk$set(fig.width=11, fig.height=11) 
if (output=="docx") opts_chunk$set(fig.width=6, fig.height=6) 
``` 

Una delle opzioni del pacchetto restituiti da opts_knit $ get() è markdown.pandoc.to. Questo è evidentemente impostato su "html", "docx" o "latex" a seconda del formato di output scelto (HTML, Word o PDF). Quindi puoi testarlo e impostare le opzioni del chunk fig.width e fig.height di conseguenza.

+0

Sebbene questo link possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte solo per collegamento possono diventare non valide se la pagina collegata cambia –

+0

Fatto. Grazie per avermelo fatto sapere! –