2.4 Figuras
Por defecto, las figuras no tienen títulos en la salida generada por knitr, lo que significa que solo pueden colocarse en el lugar en el que se generaron en el código en R. A continuación se muestra un ejemplo de ello.
par(mar = c(4, 4, .1, .1))
plot(pressure, pch = 19, type = 'b')
La desventaja de realizar figuras de esta manera es que cuando no hay suficiente espacio en la página actual para colocar una figura, puede o bien llegar a la parte inferior de la página (por lo tanto excede el margen de la página), o ser empujada a la página siguiente, dejando un gran margen blanco en la parte inferior de la página actual. Esto es, básicamente, porque hay “ambientes flotantes” en LaTeX: los elementos que no se pueden dividir en varias páginas (como las figuras) se ponen en entornos flotantes, para que puedan deambular a una página que tenga espacio suficiente para sostenerlos. Sin embargo, claramente es una desventaja el hecho de que floten las cosas hacia adelante o hacia atrás. Es decir, los lectores pueden tener que saltar a una página diferente para encontrar la figura mencionada en la página actual. Esto es simplemente una consecuencia natural de tener que componer las cosas en varias páginas de tamaños fijos. Este problema no existe en HTML ya que todo se puede colocar de forma continua en una sola página (presumiblemente de altura infinita), y no hay necesidad de dividir nada a través de múltiples páginas del mismo tamaño de página.
Si se asigna un pie de figura a un chunk a través de la opción fig.cap
, los gráficos en R se pondrán dentro de entornos figura, que serán etiquetados y numerados de forma automática, y también pueden usarse como una referencia cruzada. La etiqueta de un entorno figura se genera a partir de la etiqueta del chunk, por ejemplo, si la etiqueta es foo
, la etiqueta de la figura seráfig: foo
(el prefijo fig
se añade antes de foo
). Para hacer referencia a una figura, utilice la sintaxis \@ref(etiqueta)
,6 donde label
es la etiqueta de la figura, por ejemplo,fig: foo
.
Para aprovechar el formato Markdown en el subtítulo de la figura, necesitará usar referencias de texto (consulte la sección ??). Por ejemplo, una leyenda de la figura que contiene _texto en bastardilla_
no funcionará cuando el formato de salida sea LaTeX/PDF, ya que el carácter de subrayado es un carácter especial en LaTeX, pero si utiliza referencias de texto,_texto en bastardilla_
será traducido a código LaTeX cuando la salida sea LaTeX.
La opción del chunk fig.asp
se puede utilizar para establecer la relación de aspecto de los gráficos, es decir, la relación entre la altura/anchura. Si el ancho de la figura es de 6 pulgadas (fig.width = 6
) yfig.asp = 0.7
, la altura de la figura se calcula automáticamente con fig.width * fig.asp = 6 * 0,7 = 4.2
. La figura 2.1 es un ejemplo utilizando las opciones del chunk fig.asp = 0.7
, fig.width = 6
, y fig.align = 'center'
, generado a partir del código de abajo:
par(mar = c(4, 4, .1, .1))
plot(pressure, pch = 19, type = 'b')
Figura: 2.1: Un ejemplo de figura con el aspecto especificado, ancho, y alineación.
El tamaño real de un gráfico se determina por las opciones del chunk fig.width
y fig.height
(el tamaño del gráfico generado desde un dispositivo gráfico), y se puede especificar el tamaño de salida de los gráficos a través de las opciones del chunk out.width
y out.height
. El valor posible de estas dos opciones depende del formato de salida del documento. Por ejemplo, out.width = '30%'
es un valor válido para la salida HTML, pero no para la producción de documentos LaTeX/PDF. Sin embargo, knitr convertirá automáticamente a un valor de porcentaje para out.width
de la forma`x%
a (x / 100) \linewidth
, por ejemplo, out.width = '70%'
se intrpretará como .7 \linewidth
cuando el formato de salida es LaTeX. Esto hace que sea posible especificar una anchura relativa de un gráfico de una manera consistente. La figura 2.2 es un ejemplo de out.width = 70%
.
par(mar = c(4, 4, .1, .1))
plot(cars, pch = 19)
Figura: 2.2: Una figura de ejemplo con un ancho relativo de 70%.
Si desea poner varios gráficos en un entorno de figuras, debe utilizar la opción del chunk fig.show = 'hold'
para disponer de múltiples gráficos en un chunk e incluirlas en un único entorno. También puede poner gráficos uno al lado del otro si la suma de la anchura de todas los gráficos es menor o igual a la anchura de la línea actual. Por ejemplo, si dos gráficos tienen la misma anchura 50%
, serán ubicados uno al lado del otro. Del mismo modo, puede especificar out.width = '33% '
para organizar tres gráficos en una sola línea. La figura 2.3 es un ejemplo de dos gráficos, cada una con una anchura de 50%
.
par(mar = c(4, 4, .1, .1))
plot(pressure, pch = 19, type = 'b')
plot(cars, pch = 19)
Figura: 2.3: Dos gráficos dispuestos uno al lado del otro.
A veces es posible que tenga imágenes que no se generaron a partir de código en R. A pesar de esto, puede incluirlas en R Markdown a través de la función knitr::include_graphics()
. La figura 2.4 es un ejemplo de tres logotipos de knitr incluidos en un entorno gráfico. Se pueden incluir una o varias imágenes con la función include_graphics()
, y todas las opciones del chunk que se aplican a los gráficos en R también se aplican a estas imágenes, por ejemplo, se puede usar out.width = '33% '
para establecer las anchuras de estas imágenes en el documento de salida.
knitr::include_graphics(rep('images/knit-logo.png', 3))



Figura: 2.4: Tres logos de knitr incluidos en el documento desde una imagen PNG externa.
Las ventajas de usar include_graphics()
son:
- Usted no necesita preocuparse por el formato de salida de documentos, por ejemplo, cuando el formato de salida es LaTeX, puede que tenga que utilizar el comando LaTeX
\includegraphics{}
para incluir una imagen, y cuando el formato de salida es Markdown, usted tiene que usar![]()
. La funcióninclude_graphics()
en knitr se ocupa de estos detalles de forma automática. - La sintaxis para el control de los atributos de la imagen es el mismo que cuando las imágenes se generan a partir de código en R, por ejemplo, las opciones del chunk
fig.cap
,out.width
, yfig.show
tienen todas la misma función. include_graphics()
es lo suficientemente versátil como para utilizar gráficos PDF de forma automática cuando el formato de salida es LaTeX y existen gráficos en formato PDF, por ejemplo, una ruta de la imagenfoo/bar.png
puede sustituirse automáticamente porfoo/bar.PDF
si existe esta última. Las imágenes en PDF a menudo tienen mejores cualidades que las imágenes de mapa de bits en la producción de LaTeX/PDF. Por supuesto, se puede desactivar esta funcióninclude_graphics(auto_pdf = FALSE)
.- Se pueden escalar fácilmente estas imágenes de forma proporcional utilizando la misma razón. Esto se puede hacer a través del argumento
dpi
(puntos por pulgada), que toma el valor de la opción del chunkdpi
por defecto. Si se trata de un valor numérico y la opción del chunkout.width
no está establecida, el ancho de salida de una imagen será su anchura real (en píxeles) dividido pordpi
, y sus unidades estarán en pulgadas. Por ejemplo, para una imagen de tamaño de 672 x 480, su anchura de salida será de 7 pulgadas (7in
) cuandodpi = 96
. Esta función requiere del paquete png y/o jpeg. Siempre se puede anular el cálculo automático del ancho en pulgadas, proporcionando un valor no nulo a la opción del chunkout.wdith
, o usarinclude_graphics(dpi = NA)
.
No olvide de la barra invertida inicial! y también note el paréntesis
()
después deref
; no hay corchetes{}
.↩