Creación de gráficos
eficientes con ggplot2
31 de Marzo 2016
Ramón Sáez Martínez
1
@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Algunos consejos para la creación de gráficos realmente informativos:
 Ten en cuenta que el objetivo principal de un gráfico debe ser transmitir un mensaje de forma clara e intuitiva. Lo ideal es
que la información que queremos mostrar se capte de un solo vistazo.
 En lo posible, persigue la sencillez. No se trata de mostrar competencia técnica o crear gráficos espectaculares, lo
importante es transmitir un mensaje. Ponle fácil al receptor del gráfico el interpretar la información.
 Enfatiza los elementos del gráfico que son realmente importantes (la tinta informativa).
 Reduce al mínimo los elementos auxiliares (la tinta no informativa). El objetivo es que estos elementos no supongan una
distracción sobre la información importante.
 Cuida las escalas. Mantén siempre una correspondencia precisa entre las cantidades mostradas y la escala visual.
 Si un gráfico se vuelve demasiado complejo, divídelo en varios.
2@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
#' ---
#' title: ADD BACKGROUND WITH CATS PACKAGE
#' ---
library(ggplot2)
this_base <- "0002_add-background-with-cats-package"
## devtools::install_github("hilaryparker/cats")
library(cats)
## library(help = "cats")
p <- ggplot(mpg, aes(cty, hwy)) +
add_cat() +
geom_point()
p
Un ejemplo de lo que NO hacer
3
3@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Gráficos comunes que es mejor evitar
Gráficos de sectores Gráficos de araña
Gráficos 3D Gráficos de área
4
4@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Algunos libros sobre la creación de gráficos
Information Dashboard Design: Displaying Data for At-a-Glance Monitoring (Stephen Few)
Show Me the Numbers: Designing Tables and Graphs to Enlighten (Stephen Few)
Now You See It: Simple Visualization Techniques for Quantitative Analysis (Stephen Few)
The Visual Display of Quantitative Information (Edward R. Tufte)
5
5@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
¿Qué es ggplot2?
ggplot2 es un paquete de creación de gráficos en R desarrollado por Hadley Wikham que implementa la llamada gramática
de gráficos de Wilkinson
Es bastante popular, principalmente por lo siguiente motivos:
 Es fácil de aprender
 A pesar de su sencillez permite crear gráficos complejos
 Incentiva la creación estructurada de gráficos
 Permite aprovechar fácilmente el código ya construido para desarrollar nuevos gráficos o actualizar los existentes con
nuevos datos.
Una vez se domina, la habilidad técnica con los detalles deja de ser un problema y podemos dejarnos llevar por la
imaginación a la hora de construir gráficos.
6
6@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Empezando con ggplot2 – qplot
Si queremos construir un gráfico sencillo de forma rápida podemos utilizar la sentencia qplot. Es el equivalente en ggplot2 de
la sentencia plot de R base. No permite aprovechar todas las posibilidades de ggplot2, pero puede ser útil en ciertas
ocasiones y además es compatible con la adición de capas que veremos luego
qplot(x, y, data=, color=, shape=, size=, alpha=, geom=, method=, formula=, facets=,
xlim=, ylim= xlab=, ylab=, main=, sub=)
option description
alpha Alpha transparency for overlapping elements expressed as a fraction between 0 (complete transparency) and 1 (complete
opacity)
color, shape, size, fill Associates the levels of variable with symbol color, shape, or size. For line plots, color associates levels of a
variable with line color. For density and box plots, fill associates fill colors with a variable. Legends are drawn
automatically.
data Specifies a data frame
facets Creates a trellis graph by specifying conditioning variables. Its value is expressed asrowvar ~ colvar. To create
trellis graphs based on a single conditioning variable, userowvar~. or .~colvar)
geom Specifies the geometric objects that define the graph type. The geom option is expressed as a character vector with one
or more entries. geom values include "point", "smooth", "boxplot", "line", "histogram", "density", "bar", and "jitter".
main, sub Character vectors specifying the title and subtitle
method, formula If geom="smooth", a loess fit line and confidence limits are added by default. When the number of observations is
greater than 1,000, a more efficient smoothing algorithm is employed. Methods include "lm" for regression, "gam" for
generalized additive models, and "rlm" for robust regression. The formula parameter gives the form of the fit.
x, y Specifies the variables placed on the horizontal and vertical axis. For univariate plots (for example, histograms),
omit y
xlab, ylab Character vectors specifying horizontal and vertical axis labels
xlim,ylim Two-element numeric vectors giving the minimum and maximum values for the horizontal and vertical axes, respectively
7
7@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Algunos ejemplos de gráficos sencillos creados con qplot
Diagrama de dispersión
qplot(x=wt,y=mpg,data=dfMtc,color=am)
Gráfico de cajas
qplot(x=am,y=mpg,data=dfMtc,geom='boxplot')
Histograma
qplot(x=mpg,data=dfMtc,geom='histogram',binwidth=5)
8
8@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Conceptos básicos sobre ggplot
Los gráficos en ggplot2 se construyen definiendo “capas”, cada una de ellas superpuesta sobre la anterior. Una categorización
muy básica de los elementos que puede contener cada capa es la siguiente:
 Datos: Cada gráfico debe contener una capa de datos donde se indica el conjunto de información a tratar. En ggplot2 los
datos deben incluirse en un dataframe (si no ggplot creará uno).
 Aesthetics: Propiedades gráficas que codifican los datos a representar. Normalmente su asignación, mediante la función
aes(), se incluye en la capa base junto con los datos. Ejemplos de atributos estéticos son la posición en los ejes x e y, el
tamaño del elemento gráfico, su forma, su color, etc..
 Geometries (geoms): Describe la forma geométrica usada para dibujar los datos de la capa, como por ejemplo puntos,
líneas, barras, etc..
 Statistics (stats): Indica el modo en que se deben transformar los datos antes de mostrarse (conteo, densidad, suavizado,
etc..)
 Position: Controla el modo en que se posicionan los elementos.
Además se tienen elementos adicionales que se pueden añadir a los gráficos como:
 Coordinates (coord): Indican el sistema de coordenadas a usar en la representación
 Scales: Escalas de valores, colores, etc.. utilizadas en la representación
 Themes: Conjunto de opciones generales a utilizar en la representación del gráfico (formato de los ejes, del fondo, del
título, etc..)
 Facets: División del gráfico en paneles según los valores de algún atributo.
9
9@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Creación de capas
Un gráfico en ggplot2 debe comenzar con la asignación del dataframe y los atributos estéticos a usar por
defecto.
ggplot(data,mapping=aes())
Con lo anterior simplemente se ha “inicializado” el gráfico. Es necesario añadirle capas, para lo que la sentencia
genérica es
layer(geom,geom_params,stat,stat_params,data,mapping, position)
En una capa concreta se pueden usar datos y asignaciones estéticas distintas a las originales aunque por
defecto se mantendrán las asignadas en ggplot
Existen sentencias abreviadas para construir capas. Se trata de los geoms y los stats
geom_XXX(mapping,data,…,geom, position)
stat_XXX(mapping,data,…,stat, position)
Cada geom y stat tiene una conjunto de asignaciones estéticas que hay que informar y otras opcionales que
puede entender. Además cada geom tiene un stat asociado por defecto (y a la inversa)
10
10@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Construcción de algunos gráficos habituales con ggplot
Se puede crear un diagrama de dispersión de varias maneras:
ggplot(dfMtc,aes(x=wt,y=mpg,colour=am)) +
geom_point()
ggplot(dfMtc,aes(x=wt,y=mpg)) +
geom_point(aes(colour=am))
ggplot(dfMtc) +
geom_point(aes(x=wt,y=mpg,colour=am))
11
11@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Construcción de algunos gráficos habituales con ggplot
Gráfico de barras
ggplot(dfMtc,aes(x=am)) + geom_bar()
Gráfico de cajas
ggplot(dfMtc,aes(x=am,y=mpg)) + geom_boxplot()
12
12@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Construcción de algunos gráficos habituales con ggplot
Histograma (con curva de densidad)
ggplot(dfMtc,aes(x=mpg))+geom_histogram(aes(y=..density..),binwidth=5)+geom_density()+xlim(0,40)
13
13@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Un ejemplo de lo que se puede conseguir con ggplot2
http://spatial.ly/2012/02/great-maps-ggplot2/
14
14@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Recursos para aprender ggplot2
 Sitio web de ggplot2 http://docs.ggplot2.org
 ggplot2: Elegant Graphics for Data Analysis (Use R!) (Hadley Wikham)
 Cursos y tutoriales online:
 https://www.datacamp.com/courses/data-visualization-with-ggplot2-1
 http://www.r-bloggers.com/a-two-hour-online-course-on-ggplot2-and-shiny/
 http://courses.had.co.nz/11-rice/
 https://www.udemy.com/data-visualization-in-r/
15
15@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
Gracias por la atención
31 de Marzo de 2015
Ramón Sáez Martínez
ramon.saez.m@gmail.com
16
16@almeriarusers @ramonsaezm1almeriarusers.wordpress.com

Creacion de graficos eficientes con ggplot2

  • 1.
    Creación de gráficos eficientescon ggplot2 31 de Marzo 2016 Ramón Sáez Martínez 1 @almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 2.
    Algunos consejos parala creación de gráficos realmente informativos:  Ten en cuenta que el objetivo principal de un gráfico debe ser transmitir un mensaje de forma clara e intuitiva. Lo ideal es que la información que queremos mostrar se capte de un solo vistazo.  En lo posible, persigue la sencillez. No se trata de mostrar competencia técnica o crear gráficos espectaculares, lo importante es transmitir un mensaje. Ponle fácil al receptor del gráfico el interpretar la información.  Enfatiza los elementos del gráfico que son realmente importantes (la tinta informativa).  Reduce al mínimo los elementos auxiliares (la tinta no informativa). El objetivo es que estos elementos no supongan una distracción sobre la información importante.  Cuida las escalas. Mantén siempre una correspondencia precisa entre las cantidades mostradas y la escala visual.  Si un gráfico se vuelve demasiado complejo, divídelo en varios. 2@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 3.
    #' --- #' title:ADD BACKGROUND WITH CATS PACKAGE #' --- library(ggplot2) this_base <- "0002_add-background-with-cats-package" ## devtools::install_github("hilaryparker/cats") library(cats) ## library(help = "cats") p <- ggplot(mpg, aes(cty, hwy)) + add_cat() + geom_point() p Un ejemplo de lo que NO hacer 3 3@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 4.
    Gráficos comunes quees mejor evitar Gráficos de sectores Gráficos de araña Gráficos 3D Gráficos de área 4 4@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 5.
    Algunos libros sobrela creación de gráficos Information Dashboard Design: Displaying Data for At-a-Glance Monitoring (Stephen Few) Show Me the Numbers: Designing Tables and Graphs to Enlighten (Stephen Few) Now You See It: Simple Visualization Techniques for Quantitative Analysis (Stephen Few) The Visual Display of Quantitative Information (Edward R. Tufte) 5 5@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 6.
    ¿Qué es ggplot2? ggplot2es un paquete de creación de gráficos en R desarrollado por Hadley Wikham que implementa la llamada gramática de gráficos de Wilkinson Es bastante popular, principalmente por lo siguiente motivos:  Es fácil de aprender  A pesar de su sencillez permite crear gráficos complejos  Incentiva la creación estructurada de gráficos  Permite aprovechar fácilmente el código ya construido para desarrollar nuevos gráficos o actualizar los existentes con nuevos datos. Una vez se domina, la habilidad técnica con los detalles deja de ser un problema y podemos dejarnos llevar por la imaginación a la hora de construir gráficos. 6 6@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 7.
    Empezando con ggplot2– qplot Si queremos construir un gráfico sencillo de forma rápida podemos utilizar la sentencia qplot. Es el equivalente en ggplot2 de la sentencia plot de R base. No permite aprovechar todas las posibilidades de ggplot2, pero puede ser útil en ciertas ocasiones y además es compatible con la adición de capas que veremos luego qplot(x, y, data=, color=, shape=, size=, alpha=, geom=, method=, formula=, facets=, xlim=, ylim= xlab=, ylab=, main=, sub=) option description alpha Alpha transparency for overlapping elements expressed as a fraction between 0 (complete transparency) and 1 (complete opacity) color, shape, size, fill Associates the levels of variable with symbol color, shape, or size. For line plots, color associates levels of a variable with line color. For density and box plots, fill associates fill colors with a variable. Legends are drawn automatically. data Specifies a data frame facets Creates a trellis graph by specifying conditioning variables. Its value is expressed asrowvar ~ colvar. To create trellis graphs based on a single conditioning variable, userowvar~. or .~colvar) geom Specifies the geometric objects that define the graph type. The geom option is expressed as a character vector with one or more entries. geom values include "point", "smooth", "boxplot", "line", "histogram", "density", "bar", and "jitter". main, sub Character vectors specifying the title and subtitle method, formula If geom="smooth", a loess fit line and confidence limits are added by default. When the number of observations is greater than 1,000, a more efficient smoothing algorithm is employed. Methods include "lm" for regression, "gam" for generalized additive models, and "rlm" for robust regression. The formula parameter gives the form of the fit. x, y Specifies the variables placed on the horizontal and vertical axis. For univariate plots (for example, histograms), omit y xlab, ylab Character vectors specifying horizontal and vertical axis labels xlim,ylim Two-element numeric vectors giving the minimum and maximum values for the horizontal and vertical axes, respectively 7 7@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 8.
    Algunos ejemplos degráficos sencillos creados con qplot Diagrama de dispersión qplot(x=wt,y=mpg,data=dfMtc,color=am) Gráfico de cajas qplot(x=am,y=mpg,data=dfMtc,geom='boxplot') Histograma qplot(x=mpg,data=dfMtc,geom='histogram',binwidth=5) 8 8@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 9.
    Conceptos básicos sobreggplot Los gráficos en ggplot2 se construyen definiendo “capas”, cada una de ellas superpuesta sobre la anterior. Una categorización muy básica de los elementos que puede contener cada capa es la siguiente:  Datos: Cada gráfico debe contener una capa de datos donde se indica el conjunto de información a tratar. En ggplot2 los datos deben incluirse en un dataframe (si no ggplot creará uno).  Aesthetics: Propiedades gráficas que codifican los datos a representar. Normalmente su asignación, mediante la función aes(), se incluye en la capa base junto con los datos. Ejemplos de atributos estéticos son la posición en los ejes x e y, el tamaño del elemento gráfico, su forma, su color, etc..  Geometries (geoms): Describe la forma geométrica usada para dibujar los datos de la capa, como por ejemplo puntos, líneas, barras, etc..  Statistics (stats): Indica el modo en que se deben transformar los datos antes de mostrarse (conteo, densidad, suavizado, etc..)  Position: Controla el modo en que se posicionan los elementos. Además se tienen elementos adicionales que se pueden añadir a los gráficos como:  Coordinates (coord): Indican el sistema de coordenadas a usar en la representación  Scales: Escalas de valores, colores, etc.. utilizadas en la representación  Themes: Conjunto de opciones generales a utilizar en la representación del gráfico (formato de los ejes, del fondo, del título, etc..)  Facets: División del gráfico en paneles según los valores de algún atributo. 9 9@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 10.
    Creación de capas Ungráfico en ggplot2 debe comenzar con la asignación del dataframe y los atributos estéticos a usar por defecto. ggplot(data,mapping=aes()) Con lo anterior simplemente se ha “inicializado” el gráfico. Es necesario añadirle capas, para lo que la sentencia genérica es layer(geom,geom_params,stat,stat_params,data,mapping, position) En una capa concreta se pueden usar datos y asignaciones estéticas distintas a las originales aunque por defecto se mantendrán las asignadas en ggplot Existen sentencias abreviadas para construir capas. Se trata de los geoms y los stats geom_XXX(mapping,data,…,geom, position) stat_XXX(mapping,data,…,stat, position) Cada geom y stat tiene una conjunto de asignaciones estéticas que hay que informar y otras opcionales que puede entender. Además cada geom tiene un stat asociado por defecto (y a la inversa) 10 10@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 11.
    Construcción de algunosgráficos habituales con ggplot Se puede crear un diagrama de dispersión de varias maneras: ggplot(dfMtc,aes(x=wt,y=mpg,colour=am)) + geom_point() ggplot(dfMtc,aes(x=wt,y=mpg)) + geom_point(aes(colour=am)) ggplot(dfMtc) + geom_point(aes(x=wt,y=mpg,colour=am)) 11 11@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 12.
    Construcción de algunosgráficos habituales con ggplot Gráfico de barras ggplot(dfMtc,aes(x=am)) + geom_bar() Gráfico de cajas ggplot(dfMtc,aes(x=am,y=mpg)) + geom_boxplot() 12 12@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 13.
    Construcción de algunosgráficos habituales con ggplot Histograma (con curva de densidad) ggplot(dfMtc,aes(x=mpg))+geom_histogram(aes(y=..density..),binwidth=5)+geom_density()+xlim(0,40) 13 13@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 14.
    Un ejemplo delo que se puede conseguir con ggplot2 http://spatial.ly/2012/02/great-maps-ggplot2/ 14 14@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 15.
    Recursos para aprenderggplot2  Sitio web de ggplot2 http://docs.ggplot2.org  ggplot2: Elegant Graphics for Data Analysis (Use R!) (Hadley Wikham)  Cursos y tutoriales online:  https://www.datacamp.com/courses/data-visualization-with-ggplot2-1  http://www.r-bloggers.com/a-two-hour-online-course-on-ggplot2-and-shiny/  http://courses.had.co.nz/11-rice/  https://www.udemy.com/data-visualization-in-r/ 15 15@almeriarusers @ramonsaezm1almeriarusers.wordpress.com
  • 16.
    Gracias por laatención 31 de Marzo de 2015 Ramón Sáez Martínez ramon.saez.m@gmail.com 16 16@almeriarusers @ramonsaezm1almeriarusers.wordpress.com