1  Introducción

You are reading the work-in-progress third edition of the ggplot2 book. This chapter is currently a dumping ground for ideas, and we don’t recommend reading it.

1.1 Bienvenido a ggplot2

ggplot2 es un paquete R para producir gráficos estadísticos o de datos. A diferencia de la mayoría de los otros paquetes de gráficos, ggplot2 tiene una gramática subyacente, basada en la Gramática de Gráficos (Wilkinson 2005), que le permite componer gráficos combinando componentes independientes. Esto hace que ggplot2 sea poderoso. En lugar de limitarse a conjuntos de gráficos predefinidos, puede crear gráficos novedosos que se adapten a su problema específico. Si bien la idea de tener que aprender una gramática puede parecer abrumadora, ggplot2 es realmente fácil de aprender: existe un conjunto simple de principios básicos y muy pocos casos especiales. La parte difícil es que puede tomar un poco de tiempo olvidar todas las ideas preconcebidas que trae consigo al usar otras herramientas gráficas.

ggplot2 proporciona gráficas hermosas y sin complicaciones que se ocupan de detalles complicados como dibujar leyendas. De hecho, sus valores predeterminados cuidadosamente elegidos significan que puede producir gráficos con calidad de publicación en segundos. Sin embargo, si tiene requisitos de formato especiales, el completo sistema de temas de ggplot2 le facilita hacer lo que quiera. En última instancia, esto significa que, en lugar de dedicar su tiempo a hacer que su gráfico se vea bonito, puede concentrarse en crear el gráfico que mejor revele el mensaje de sus datos.

ggplot2 está diseñado para funcionar de forma iterativa. Comienzas con una capa que muestra los datos sin procesar. Luego agrega capas de anotaciones y resúmenes estadísticos. Esto le permite producir gráficos utilizando el mismo pensamiento estructurado que usaría para diseñar un análisis. Esto reduce la distancia entre la trama en tu cabeza y la de la página. Esto es especialmente útil para estudiantes que aún no han desarrollado el enfoque estructurado de análisis utilizado por los expertos.

Aprender la gramática no sólo te ayudará a crear gráficos con los que estás familiarizado, sino que también te ayudará a crear gráficos mejores y más nuevos. Sin una gramática, no hay una teoría subyacente, por lo que la mayoría de los paquetes de gráficos son sólo una gran colección de casos especiales. Por ejemplo, en base R, si diseña un gráfico nuevo, se compone de elementos gráficos sin formato, como líneas y puntos, por lo que es difícil diseñar nuevos componentes que se combinen con los gráficos existentes. En ggplot2, las expresiones utilizadas para crear un nuevo gráfico se componen de elementos de nivel superior, como representaciones de los datos sin procesar y transformaciones estadísticas, que se pueden combinar fácilmente con nuevos conjuntos de datos y otros gráficos.

Este libro proporciona una introducción práctica a ggplot2 con muchos códigos y gráficos de ejemplo. También explica la gramática en la que se basa ggplot2. Al igual que otros sistemas formales, ggplot2 es útil incluso cuando no se comprende el modelo subyacente. Sin embargo, cuanto más aprenda al respecto, más eficazmente podrá utilizar ggplot2.

Este libro le presentará ggplot2 suponiendo que sea un novato y no esté familiarizado con la gramática; enseñarle los conceptos básicos para que pueda recrear gráficas con las que ya está familiarizado; mostrarle cómo utilizar la gramática para crear nuevos tipos de gráficos; y, finalmente, convertirte en un experto que pueda crear nuevos componentes para ampliar la gramática.

1.2 ¿Cuál es la gramática de los gráficos?

Wilkinson (2005) creó la gramática de los gráficos para describir las características fundamentales que subyacen a todos los gráficos estadísticos. La gramática de los gráficos es una respuesta a la pregunta de ¿qué es un gráfico estadístico? ggplot2 (Wickham 2009) se basa en la gramática de Wilkinson centrándose en la primacía de las capas y adaptándola para su uso en R. En resumen, la gramática nos dice que un gráfico asigna los datos a los atributos estéticos (color, forma, tamaño). de objetos geométricos (puntos, líneas, barras). El gráfico también puede incluir transformaciones estadísticas de los datos e información sobre el sistema de coordenadas del gráfico. El facetado se puede utilizar para trazar diferentes subconjuntos de datos. La combinación de estos componentes independientes son los que forman un gráfico.

A medida que avance el libro, la gramática formal se explicará con mayor detalle. La primera descripción de los componentes sigue a continuación. Introduce parte de la terminología que se utilizará a lo largo del libro y describe la función básica de cada componente. No se preocupe si no tiene sentido de inmediato: tendrá muchas más oportunidades de aprender sobre los componentes y cómo funcionan juntos.

Todos los gráficos se componen de datos, la información que desea visualizar, y un mapeo, la descripción de cómo las variables de los datos se asignan a los atributos estéticos. Hay cinco componentes de mapeo:

  • Una capa es una colección de elementos geométricos y transformaciones estadísticas. Los elementos geométricos, geoms para abreviar, representan lo que realmente se ve en el gráfico: puntos, líneas, polígonos, etc. Las transformaciones estadísticas, stats para abreviar, resumen los datos: por ejemplo, agrupar y contar observaciones para crear un histograma o ajustar un modelo lineal.

  • La escala asigna valores en el espacio de datos a valores en el espacio estético. Esto incluye el uso de color, forma o tamaño. Las escalas también dibujan la leyenda y los ejes, lo que permite leer los valores de datos originales del gráfico (un mapeo inverso).

  • Una coord, o sistema de coordenadas, describe cómo se asignan las coordenadas de los datos al plano del gráfico. También proporciona ejes y líneas de cuadrícula para ayudar a leer el gráfico. Normalmente utilizamos el sistema de coordenadas cartesiano, pero hay otros disponibles, incluidas coordenadas polares y proyecciones cartográficas.

  • Una faceta especifica cómo dividir y mostrar subconjuntos de datos como pequeños múltiplos. Esto también se conoce como acondicionamiento o enrejado/enrejado.

  • Un tema controla los puntos más finos de la visualización, como el tamaño de fuente y el color de fondo. Si bien los valores predeterminados en ggplot2 se han elegido con cuidado, es posible que necesites consultar otras referencias para crear una trama atractiva. Un buen punto de partida son los primeros trabajos de Tufte (Tufte 1990, 1997, 2001).

También es importante tener en cuenta lo que la gramática no hace:

  • No sugiere qué gráficos usar. Si bien este libro se esfuerza por promover un proceso sensato para producir gráficas, la atención se centra en cómo producir las gráficas que desea, no en qué trama producir. Para obtener más consejos sobre cómo elegir o crear argumentos para responder la pregunta que le interesa, puede consultar a Robbins (2013), Cleveland (1993), Chambers et al. (1983) y Tukey (1977).

  • No describe gráficos interactivos, sólo estáticos. Básicamente, no hay diferencia entre mostrar gráficos de ggplot2 en la pantalla de una computadora e imprimirlos en una hoja de papel.

1.3 ¿Cómo encaja ggplot2 con otros gráficos R?

Hay varios otros sistemas de gráficos disponibles en R: gráficos base, gráficos de cuadrícula y gráficos de lattice/enrejado. ¿En qué se diferencia ggplot2 de ellos?

  • Los gráficos base fueron escritos por Ross Ihaka basándose en la experiencia en la implementación del controlador de gráficos S y en parte en Chambers et al. (1983). Los gráficos base tienen un modelo de lápiz sobre papel: solo puede dibujar sobre el gráfico, no puede modificar ni eliminar el contenido existente. No existe ninguna representación (accesible para el usuario) de los gráficos, aparte de su aparición en la pantalla. Los gráficos básicos incluyen herramientas para dibujar primitivos y gráficos completos. Las funciones gráficas básicas son generalmente rápidas, pero tienen un alcance limitado. Si ha creado un único diagrama de dispersión, un histograma o un conjunto de diagramas de caja en el pasado, probablemente haya utilizado gráficos básicos.

  • El desarrollo de gráficos de “cuadrícula”, un sistema mucho más rico de primitivas gráficas, comenzó en el año 2000. Grid fue desarrollado por Paul Murrell, como resultado de su trabajo de doctorado (Murrell 1998). Los grobs de cuadrícula (objetos gráficos) se pueden representar independientemente del gráfico y modificarse más tarde. Un sistema de ventanas gráficas (cada una con su propio sistema de coordenadas) facilita el diseño de gráficos complejos. Grid proporciona primitivas de dibujo, pero no herramientas para producir gráficos estadísticos.

  • El paquete lattice, desarrollado por Deepayan Sarkar, utiliza gráficos de cuadrícula para implementar el sistema de gráficos enrejado de Cleveland (1993) y supone una mejora considerable con respecto a los gráficos básicos. Puede producir fácilmente gráficos condicionados y algunos detalles del trazado (por ejemplo, leyendas) se cuidan automáticamente. Sin embargo, los gráficos reticulares carecen de un modelo formal, lo que puede dificultar su ampliación. Los gráficos de lattice se explican en profundidad en Sarkar (2008).

  • ggplot2, iniciado en 2005, es un intento de tomar las cosas buenas de los gráficos base y reticulares y mejorarlas con un modelo subyacente sólido que admita la producción de cualquier tipo de gráfico estadístico, basado en los principios descritos anteriormente. El sólido modelo subyacente de ggplot2 facilita la descripción de una amplia gama de gráficos con una sintaxis compacta, y los componentes independientes facilitan la extensión. Al igual que lattice, ggplot2 usa una cuadrícula para dibujar los gráficos, lo que significa que puedes ejercer mucho control de bajo nivel sobre la apariencia de la trama.

  • htmlwidgets, http://www.htmlwidgets.org, proporciona un marco común para acceder a herramientas de visualización web desde R. Los paquetes creados sobre htmlwidgets incluyen leaflet (https://rstudio.github.io/leaflet/, mapas), dygraph (http://rstudio.github.io/dygraphs/, series temporales) y networkD3 (http://christophergandrud.github.io/networkD3/, redes).

  • plotly, https://plotly-r.com, es un popular kit de herramientas de visualización de JavaScript con una interfaz R. Es una gran herramienta si desea crear gráficos interactivos para documentos HTML, e incluso viene con una función ggplotly() que puede convertir muchos gráficos ggplot2 en sus equivalentes interactivos.

Muchos otros paquetes de R, como vcd (Meyer, Zeileis, y Hornik 2006), plotrix (Lemon et al. 2008) y gplots (Warnes 2007), implementan gráficos especializados, pero ningún otro proporciona un marco para producir gráficos estadísticos. Puede encontrar una lista completa de todas las herramientas gráficas disponibles en otros paquetes en la vista de tareas de gráficos en http://cran.r-project.org/web/views/Graphics.html.

1.4 Sobre este libro

El primer capítulo, Capítulo 2, describe cómo comenzar rápidamente a usar ggplot2 para crear gráficos útiles. Este capítulo presenta varios conceptos importantes de ggplot2: geoms, mapeos estéticos y facetas.

Capítulo 3 a Capítulo 9 exploran cómo utilizar la caja de herramientas básica para resolver una amplia gama de problemas de visualización que probablemente encontrará en la práctica.

Luego, Capítulo 10 a Capítulo 12 le muestran cómo controlar las escalas más importantes, lo que le permite modificar los detalles de los ejes y las leyendas.

En “La gramática” describimos la gramática en capas de los gráficos que subyace a ggplot2. La teoría se ilustra en Capítulo 13, que demuestra cómo agregar capas adicionales a su trama, ejerciendo control total sobre las geoms y las estadísticas utilizadas dentro de ellas.

Comprender cómo funcionan las escalas es crucial para afinar las propiedades perceptuales de su trama. La personalización de escalas brinda un control preciso sobre la apariencia exacta de la trama y ayuda a respaldar la historia que estás contando. Capítulo 10, ?sec-scale-color y Capítulo 12 le mostrarán qué escalas están disponibles, cómo ajustar sus parámetros y cómo controlar la apariencia de los ejes y las leyendas.

Los sistemas de coordenadas y facetados controlan la posición de los elementos de la trama. Estos se describen en Sección 13.7. El facetado es una herramienta gráfica muy poderosa, ya que le permite comparar rápidamente diferentes subconjuntos de sus datos. Con menos frecuencia se necesitan diferentes sistemas de coordenadas, pero son muy importantes para ciertos tipos de datos.

Para pulir sus gráficos para su publicación, necesitará conocer las herramientas descritas en ?sec-polish. Allí aprenderá cómo controlar el sistema de temas de ggplot2 y cómo guardar gráficos en el disco.

1.5 Requisitos previos

Antes de continuar, asegúrese de tener todo el software que necesita para este libro:

  • R: Si aún no tienes R instalado, es posible que estés leyendo el libro equivocado; Asumimos una familiaridad básica con R a lo largo de este libro. Si desea aprender a utilizar R, le recomendamos R para ciencia de datos, que está diseñado para que pueda empezar a utilizar R con un mínimo de alboroto.

  • RStudio: RStudio es un entorno de desarrollo integrado (IDE) gratuito y de código abierto para R. Si bien puede escribir y usar código R con cualquier entorno R (incluida la GUI de R y [ESS] (http://ess.r-project.org)) , RStudio tiene algunas características interesantes específicamente para crear y depurar su código. Recomendamos intentarlo, pero no es necesario para tener éxito con ggplot2 o con este libro. Puede descargar RStudio Desktop desde https://posit.co/download/rstudio-desktop

  • R packages: Este libro utiliza varios paquetes R. Puedes instalarlos todos a la vez ejecutando:

    install.packages(c(
      "babynames", "bookdown", "bslib", "colorBlindness", "conflicted", 
      "desc", "directlabels", "downlit", "dplyr", "ggforce", "gghighlight", 
      "ggnewscale", "ggplot2", "ggraph", "ggrepel", "ggtext", "ggthemes", 
      "hexbin", "Hmisc", "jsonlite", "mapproj", "maps", "munsell", 
      "ozmaps", "paletteer", "patchwork", "rmapshaper", "scico", 
      "seriation", "sessioninfo", "sf", "stars", "tidygraph", "tidyr", 
      "wesanderson" 
    ))

1.6 Otros recursos

Este libro le enseña los elementos de la gramática de ggplot2 y cómo encajan entre sí, pero no documenta cada función con todo detalle. Necesitará documentación adicional a medida que su uso de ggplot2 se vuelva más complejo y variado.

El mejor recurso para obtener detalles específicos de las funciones de ggplot2 y sus argumentos siempre será la documentación incorporada. Se puede acceder a él en línea, https://ggplot2.tidyverse.org/reference/index.html y desde R utilizando la sintaxis de ayuda habitual. La ventaja de la documentación en línea es que puede ver todos los gráficos de ejemplo y navegar entre temas más fácilmente.

Si utiliza ggplot2 con regularidad, es una buena idea registrarse en la lista de correo de ggplot2, http://groups.google.com/group/ggplot2. La lista tiene un tráfico relativamente bajo y es muy amigable para los nuevos usuarios. Otro recurso útil es stackoverflow, https://stackoverflow.com. Hay una comunidad ggplot2 activa en stackoverflow y ya se han formulado y respondido muchas preguntas comunes. En cualquier lugar, es mucho más probable que obtenga ayuda si crea un ejemplo mínimo reproducible. El paquete reprex de Jenny Bryan proporciona una manera conveniente de hacer esto y también incluye consejos sobre cómo crear un buen ejemplo. Cuanta más información proporciones, más fácil será para la comunidad ayudarte.

La cantidad de funciones en ggplot2 puede ser abrumadora, pero RStudio proporciona algunas excelentes hojas de referencia para refrescar su memoria en https://posit.co/resources/cheatsheets/.

Finalmente, el código fuente completo del libro está disponible en línea en https://github.com/hadley/ggplot2-book. Contiene el texto completo del libro, así como todo el código y los datos necesarios para recrear todas las gráficas.

1.7 Colofón

Este libro fue escrito en RStudio usando bookdown. El sitio web está alojado en netlify y se actualiza automáticamente después de cada confirmación mediante Github Actions. La fuente completa está disponible en GitHub.

Esta versión del libro se creó con R version 4.5.0 (2025-04-11) y los siguientes paquetes:

package version source
babynames 1.0.1 CRAN (R 4.5.0)
bookdown 0.43 CRAN (R 4.5.0)
bslib 0.9.0 CRAN (R 4.5.0)
colorBlindness 0.1.9 CRAN (R 4.5.0)
conflicted 1.2.0 CRAN (R 4.5.0)
desc 1.4.3 CRAN (R 4.5.0)
directlabels 2024.1.21 CRAN (R 4.5.0)
downlit 0.4.4 CRAN (R 4.5.0)
dplyr 1.1.4 CRAN (R 4.5.0)
ggforce 0.4.2 CRAN (R 4.5.0)
gghighlight 0.4.1 CRAN (R 4.5.0)
ggnewscale 0.5.1 CRAN (R 4.5.0)
ggplot2 3.5.2 CRAN (R 4.5.0)
ggraph 2.2.1 CRAN (R 4.5.0)
ggrepel 0.9.6 CRAN (R 4.5.0)
ggtext 0.1.2 CRAN (R 4.5.0)
ggthemes 5.1.0 CRAN (R 4.5.0)
hexbin 1.28.5 CRAN (R 4.5.0)
Hmisc 5.2-3 CRAN (R 4.5.0)
jsonlite 2.0.0 CRAN (R 4.5.0)
mapproj 1.2.11 CRAN (R 4.5.0)
maps 3.4.2.1 CRAN (R 4.5.0)
munsell 0.5.1 CRAN (R 4.5.0)
ozmaps 0.4.5 CRAN (R 4.5.0)
paletteer 1.6.0 CRAN (R 4.5.0)
patchwork 1.3.0 CRAN (R 4.5.0)
rmapshaper 0.5.0 CRAN (R 4.5.0)
scico 1.5.0 CRAN (R 4.5.0)
seriation 1.5.7 CRAN (R 4.5.0)
sessioninfo 1.2.3 CRAN (R 4.5.0)
sf 1.0-20 CRAN (R 4.5.0)
stars 0.6-8 CRAN (R 4.5.0)
tidygraph 1.3.1 CRAN (R 4.5.0)
tidyr 1.3.1 CRAN (R 4.5.0)
wesanderson 0.3.7 CRAN (R 4.5.0)
Chambers, John, William Cleveland, Beat Kleiner, y Paul Tukey. 1983. Graphical methods for Data Analysis. Wadsworth.
Cleveland, William. 1993. Visualizing Data. Hobart Press.
Lemon, Jim, Ben Bolker, Sander Oom, Eduardo Klein, Barry Rowlingson, Hadley Wickham, Anupam Tyagi, et al. 2008. plotrix: Various plotting functions.
Meyer, David, Achim Zeileis, y Kurt Hornik. 2006. «The Strucplot Framework: Visualizing Multi-Way Contingency Tables with vcd». Journal of Statistical Software 17 (3): 1-48. http://www.jstatsoft.org/v17/i03/.
Murrell, Paul. 1998. «Investigations in Graphical Statistics». Tesis doctoral, The University of Auckland.
Robbins, Naomi. 2013. Creating More Effective Graphs. Chart House.
Sarkar, Deepayan. 2008. Lattice: Multivariate Data Visualization with R. Springer.
Tufte, Edward R. 1990. Envisioning Information. Graphics Press.
———. 1997. Visual Explanations. Graphics Press.
———. 2001. The Visual Display of Quantitative Information. Second. Graphics Press.
Tukey, John W. 1977. Exploratory Data Analysis. Addison–Wesley.
Warnes, Gregory. 2007. gplots: Various R programming tools for plotting data.
Wickham, Hadley. 2009. «A layered grammar of graphics». Journal of Computational and Graphical Statistics.
Wilkinson, Leland. 2005. The Grammar of Graphics. 2nd ed. Statistics y Computing. Springer.