2015-04-15 19 views
5

Ho scoperto di recente knitr e lo utilizzo principalmente per produrre grafici con dev=tikz per ottenere facilmente la composizione di lattice. Tuttavia, non capisco come impostare le opzioni di blocco fig.width e out.width con coerenza.Come rendere fig.width e out.width coerenti con knitr?

Cioè, so che il primo è un'opzione R mentre il secondo è l'opzione lattice venire con \includegraphics ma sembra che se fig.width è troppo grande rispetto alla out.width quindi le linee sono molto sottili perché lattice ridurre la immagine. D'altra parte, se è troppo piccolo, il lattice lo allunga e tutto è troppo grande.

Fondamentalmente mi piacerebbe avere un'impostazione in cui scelgo solo lo out.width e quindi lo spessore delle linee e dei testi è coerente con la dimensione del testo del documento.

Includo un MWE che illustra il mio problema. Inoltre ho impostato fig.height nel primo esempio, altrimenti l'immagine era più grande della pagina, non lo capisco davvero.

Qualsiasi aiuto è benvenuto!

\documentclass[12pt,a4paper]{article} 
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 
\usepackage[T1]{fontenc} 
\usepackage{graphicx} 

<<setup, include=FALSE, cache=FALSE>>= 
    library(knitr) 
    options(formatR.arrow=TRUE,width=50) 
    opts_chunk$set(fig.path='figure/graphics-', 
       cache.path='cache/graphics-', 
       fig.align='center', 
       dev='tikz') 
@ 

\begin{document} 
\begin{figure}[!ht] 
    <<fig_1,fig.width=2, fig.height = 3,out.width = '\\textwidth',echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
    @ 
\end{figure} 
\begin{figure}[!ht] 
<<fig_2,fig.width=10, out.width = '\\textwidth',echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
    @ 
\end{figure} 

\end{document} 
+0

l'altezza cifra ha un valore predefinito (immagino circa 5 pollici, non ha controllato), e dal momento che si sta impostando una larghezza minore, lattice quando ridimensiona l'immagine a tutta la larghezza della pagina, l'altezza scoppia in proporzione. – baptiste

risposta

6

In sostanza nessun ridimensionamento dovrebbe essere fatto dopo la tikzpicture è stato creato, perché sarà persa la coerenza con lo stile del testo. In effetti, quando l'opzione chunk cache=FALSE è impostata, quindi out.width non ha alcun effetto perché non viene creato nessun output PDF. Quindi uno deve specificare le misure esatte in pollici per fig.width e fig.height per ogni blocco.

Dopo alcune ricerche sia su StackOverflow e nel Knitr siti web, ho trovato un trucco per avere quasi la stessa esperimento utente, vale a dire che io non voglio cura di dimensioni reali, ma solo che relativamente al \textwidth e altri variabili lattice:

  • nel chunk configurazione, definire le variabili R con nome esplicito (come paperwidth, textwidth corrispondente al lattice quella in pollici, ad esempio un foglio A4 è (w, h) = (8.3, 11.7)
  • in ogni blocco con un grafico, è quindi possibile utilizzare fig.width = 0.5*paperwidth per ex ampio

Ecco un MWE:

\documentclass[12pt,a4paper]{article} 
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 
\usepackage[T1]{fontenc} 
\usepackage{graphicx} 
\usepackage{tikz} 
<<setup, include=FALSE, cache=FALSE>>= 
    library(knitr) 
    options(formatR.arrow=TRUE,width=50) 
    opts_chunk$set(fig.path='figure/graphics-', 
       cache.path='cache/graphics-', 
       fig.align='center', 
       dev='tikz', 
       external=TRUE, 
       echo=FALSE 
       ) 
    a4width<- 8.3 
    a4height<- 11.7 
@ 

\begin{document} 
\begin{figure}[!ht] 
\centering 
<<fig_1, fig.width = 0.4*a4width, fig.height = 0.2*a4height>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

<<fig_2, fig.width = 0.2*a4width, fig.height = 0.5*a4height>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

\caption{Test figure} 
\end{figure} 
\end{document} 
1

Probabilmente non dovrebbe avere \begin{figure} dal knitr li includerà per voi. Inoltre, trovo la cosa migliore quando LaTeX non ridimensiona affatto le cifre, cioè hanno già le giuste dimensioni. Ecco un esempio, in cui ho impostato la larghezza del testo su 6 pollici e la larghezza della figura sullo stesso valore.

\documentclass[12pt,a4paper]{article} 
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 
\usepackage[T1]{fontenc} 
\usepackage{graphicx} 

<<setup, include=FALSE, cache=FALSE>>= 
    library(knitr) 
    options(formatR.arrow=TRUE,width=50) 
    opts_chunk$set(fig.path='figure/graphics-', 
       cache.path='cache/graphics-', 
       fig.align='center', 
       dev='tikz') 
@ 

\usepackage[text={6in,9in},centering]{geometry} 
\begin{document} 

    <<fig_1, fig.width=6, echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

<<fig_2, fig.width=6, out.width = '\\textwidth',echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

\end{document} 
+0

grazie per la risposta. Non era che mi aspettassi esattamente, ma mi ha fatto guardare più in profondità le opzioni di knitr. Finalmente avevi ragione sul fatto che "out.width" NON dovrebbe essere usato con il dispositivo tikz. Ho diversi commenti alla mia domanda, quindi la aggiungo come risposta. – clemlaflemme

+0

e l'ambiente figura è impostato solo se l'opzione chunk 'fig.cap' è impostata – clemlaflemme