15  Tablas, gráficos e imágenes

15.1 Introducción

Como ya hemos podido ver en el apartado anterior, los chunks de Quarto nos permiten integrar tablas, gráficos e imágenes. En este apartado veremos un poco más en detalle cómo funciona la creación de cada uno de estos elementos.

15.2 Marco de datos

Para reproducir un marco de datos, en primer lugar deberemos haberlo creado previamente como objeto en el mismo chunk o en algún chunk anterior. De lo contrario, cuando pulsemos Render no nos reconocerá el objeto y el proceso se detendrá. En el tutorial, podemos observar que en uno de los primeros chunks del documento hemos creado el objeto nmc. Por tanto, podremos realizar cualquier acción con nmc siempre y cuando en el documento de Quarto la acción se haga en una línea posterior a la creación del objeto.

Esto es lo que hemos hecho. En una línea del documento hemos creado el objeto y en una línea de código posterior hemos aplicado una acción a ese objeto. Si el marco de datos en cuestión es de tipo tibble, nos reproducirá las 10 primeras observaciones en un formato muy similar al que vemos cuando lo reproducimos en la consola.

nmc
## # A tibble: 14,322 × 10
##    stateabb ccode  year milex milper  irst   pec  tpop  upop   cinc
##    <chr>    <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
##  1 USA          2  1816  3823     17    80   254  8659   101 0.0397
##  2 USA          2  1817  2466     15    80   277  8899   106 0.0358
##  3 USA          2  1818  1910     14    90   302  9139   112 0.0361
##  4 USA          2  1819  2301     13    90   293  9379   118 0.0371
##  5 USA          2  1820  1556     15   110   303  9618   124 0.0371
##  6 USA          2  1821  1612     11   100   321  9939   130 0.0342
##  7 USA          2  1822  1079     10   100   332 10268   136 0.0329
##  8 USA          2  1823  1170     11   110   345 10596   143 0.0331
##  9 USA          2  1824  1261     11   110   390 10924   151 0.0330
## 10 USA          2  1825  1336     11   120   424 11252   158 0.0342
## # ℹ 14,312 more rows

Sin embargo, hay funciones que nos permiten presentar los marcos de datos en un formato visualmente mucho más atractivo que mediante la opción que acabamos de ver. Una de ellas es la función kable() del paquete knitr. Esta función nos reproduce por defecto todas las filas del marco de datos. Para evitar que en Html nos reproduzca las más de 14.000 filas del objeto nmc, lo más adecuado es combinar las funciones kable() y head(), como vemos en el siguiente código, donde pedimos que nos reproduzca solo las ocho primeras filas de nmc y nos lo muestre en formato kable.

knitr::kable(head(nmc, 8))
stateabb ccode year milex milper irst pec tpop upop cinc
USA 2 1816 3823 17 80 254 8659 101 0.0396975
USA 2 1817 2466 15 80 277 8899 106 0.0358166
USA 2 1818 1910 14 90 302 9139 112 0.0361265
USA 2 1819 2301 13 90 293 9379 118 0.0371332
USA 2 1820 1556 15 110 303 9618 124 0.0370869
USA 2 1821 1612 11 100 321 9939 130 0.0341731
USA 2 1822 1079 10 100 332 10268 136 0.0329391
USA 2 1823 1170 11 110 345 10596 143 0.0331075

Una segunda alternativa para visualizar marcos de datos en Quarto es la función datatable() del paquete DT. Esta función es interesante porque presenta el marco de datos con distintos campos dinámicos que nos permiten navegar por el marco de datos, seleccionar el número de filas que visualizamos o filtrar las filas por un valor en concreto.

DT::datatable(nmc)

Sea cual sea el formato que escojamos, lo normal será realizar algunas modificaciones en los datos antes de presentar el marco de datos. Por eso lo más recomendable es utilizar las funciones pipe (las veremos con detalle más adelante en otro módulo). Las funciones pipe se articulan con el símbolo |> y nos sirven para enlazar funciones que tienen como denominador común un mismo objeto. Por ejemplo, en el siguiente código:

  • Utilizamos el marco de datos nmc.
  • Seleccionamos y renombramos las variables que nos interesan con select().
  • Filtramos las primeras ocho observaciones con head().
  • Mostramos los datos en formato kable()
nmc |> 
  select(State = stateabb, Year = year, Population = tpop, CINC = cinc) |> 
  head(8) |> 
  knitr::kable()
State Year Population CINC
USA 1816 8659 0.0396975
USA 1817 8899 0.0358166
USA 1818 9139 0.0361265
USA 1819 9379 0.0371332
USA 1820 9618 0.0370869
USA 1821 9939 0.0341731
USA 1822 10268 0.0329391
USA 1823 10596 0.0331075
Cuidado con kable

En Quarto, con la función kable() las tablas se reproducen siempre con todas sus observaciones. Esto significa que si una tabla tiene 1.000 observaciones, se reproducirá entera si no la cortamos mediante código. Lo aconsejable es utilitzar primero head() para mostrar solo las primeras observaciones del marco de datos.

Ejercicio 15.1 (Modifica el marco de datos) Modifica el código anterior para que en tu tutorial aparezcan:

  • Las 10 primeras filas del marco de datos.
  • Las columnas State, Year y Military Expenditure (para renombrar una variable con espacios dentro de select() tendrás que hacerlo entre acentos abiertos: `Military Expenditure`).

15.3 Imatges

Tenemos dos formas de insertar imágenes en Quarto.

  1. Con los símbolos ![](), donde dentro de los corchetes podemos indicar opcionalmente el título de la imagen y dentro del paréntesis indicaremos, entre comillas, la dirección donde se encuentra la imagen. En lugar de la dirección dentro del directorio de trabajo, también podemos indicarle una dirección web.
![Cinc structure]("cinc-structure.png")
  1. A través de un chunk, con la función include_graphics() del paquete knitr.
```{r echo = FALSE}
include_graphics("img/cinc-structure.png")
```

Las dimensiones de la imagen se pueden cambiar modificando los parámetros del chunk. Por ejemplo, podemos cambiar la anchura (fig.width), la altura (fig.height) o el alineamiento (fig.align). O, si las proporciones nos están bien, podemos simplemente indicar qué ancho ocupará la imagen sobre el ancho total del documento (fig.width). Por ejemplo:

```{r cinc-str, fig.align = "center", fig.width = 50%}

```

Para ver más información sobre cómo modificar las proporciones de la imagen, puedes consultar el siguiente enlace.

15.4 Gráficos

De forma muy parecida a los marcos de datos, Quarto también puede integrar gráficos. Solo será necesario teclear dentro de un chunk un código que reproduzca un gráfico, como en el caso siguiente.

nmc |> 
  filter(stateabb %in% c("USA", "CHN")) |> 
  ggplot(aes(x = year, y = milper, col = stateabb)) +
  geom_line() +
  labs(title = "Pon título al gráfico")

También podemos modificar las dimensiones de la imagen utilizando los mismos parámetros que hemos aprendido en la edición de las imágenes.

Ejercicio 15.2 (Modifica el gráfico) Lee el último apartado del tutorial (Imágenes y gráficos). Modifica el código anterior para que en tu tutorial aparezcan:

  • Dos países distintos a USA y CHN.
  • Una variable distinta a milper.
  • Pon título al gráfico.

Para consultar la lista de países tendrás que trabajar en modo R Script. Para ello, deberás crear primero en el Global Environment el objeto nmcy consultar los países con sort(unique(nmc$stateabb)).