+ - 0:00:00
Notes for current slide
Notes for next slide

R & Tidyverse
ggplot2

Una introduccion a la visualizacion de datos

Paul Efren Santos Andrade
@PaulEfrenSantos

19 August, 2019

1
2

3

4

Los paquetes

Simple: instalar tidyverse

install.packages('tidyverse')

Medio: instalar unicamente ggplot2

install.pacakages('ggplot2')

Avanzado: instalar desde GitHub

devtools::install_github('tidyverse/ggplot2')
5

Tidyverse

library(tidyverse)
## -- Attaching packages -------------------------------------------- tidyverse 1.2.1 --
## v ggplot2 3.2.1 v purrr 0.3.2
## v tibble 2.1.3 v dplyr 0.8.3
## v tidyr 0.8.3 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.4.0
## -- Conflicts ----------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
6

Grammar of Graphics

7

ggplot2

Hadley Wickham

  • Crear representaciones gráficas de nuestros datos es un paso clave para poder comunicar información y hallazgos a otros.

  • ggplot2 es un sistema para crear gráficos, basado en The Grammar of Graphics.

  • Usted proporciona los datos, le dice a ggplot2 cómo asignar variables, qué caracteristicas mostrar y esta se ocupa de los detalles.

8

ggplot2

9

Algunas razones

  • Visualizacion de forma esquematica

    1. Datos organizados
    2. Expresar los datos como elementos visuales
    3. scales, guides, axis, labels, theme
  • Secuencia comprensible de la creacion de graficos

  • Sencilla de replicar

  • Secuencia concistente

10

Con que estamos tratando?


ggplot2 es un gran paquete: filosofia + funciones
...muy bien organizadas

11

Con que estamos tratando?


ggplot2 es un gran paquete: filosofia + funciones
...muy bien organizadas



Muchos ejemplos de visualizacion impresionantes
...no estan en estas diapositivas

12

Con que estamos tratando?


ggplot2 es un gran paquete: filosofia + funciones
...muy bien organizadas



Muchos ejemplos de visualizacion impresionantes
...no estan en estas diapositivas



Quiza toquemos muchas ideas muy rapido
...pero conoceras donde buscar ayuda

13

Con que estamos tratando?


ggplot2 es un gran paquete: filosofia + funciones
...muy bien organizadas



Muchos ejemplos de visualizacion impresionantes
...no estan en estas diapositivas



Quiza toquemos muchas ideas muy rapido
...pero conoceras donde buscar ayuda

https://github.com/allisonhorst/stats-illustrations ]

14


Grammar of Graphics

15

Gramatica de visualizacion?

"Una idea clara de lo que deseas mostrar, encamina la construccion de un grafico."

http://vita.had.co.nz/papers/layered-grammar.pdf

16

Que datos estan detras?

MPG

  • Manufacturer
  • Car Type (Class)
  • City MPG
  • Highway MPG

17

Que datos estan detras?

MPG

  • Manufacturer
  • Car Type (Class)
  • City MPG
  • Highway MPG

18

Que datos estan detras?

MPG

  • Manufacturer
  • Car Type (Class)
  • City MPG
  • Highway MPG

19

Que datos estan detras?

MPG

  • Manufacturer
  • Car Type (Class)
  • City MPG
  • Highway MPG

20

Que datos estan detras?

MPG

  • Manufacturer
  • Car Type (Class)
  • City MPG
  • Highway MPG

21

Que datos estan detras?

MPG

  • Manufacturer
  • Car Type (Class)
  • City MPG
  • Highway MPG

22

Que datos estan detras?

MPG

  • Manufacturer
  • Car Type (Class)
  • City MPG
  • Highway MPG
manufacturer class cty hwy model
audi compact 18 27 a4
audi compact 15 25 a4 quattro
ford suv 12 18 expedition 2wd
ford suv 13 19 explorer 4wd
toyota suv 16 20 4runner 4wd
toyota compact 21 31 camry solara
toyota compact 28 37 corolla
toyota suv 13 18 land cruiser wagon 4wd
23

Argumentos

  • Data datos a ser graficados
24

Argumentos

  • Data datos a ser graficados
  • Geometric las formas que se mostraran
25

Argumentos

  • Data datos a ser graficados
  • Geometric las formas que se mostraran
  • Aesthetic mappings los datos a ser representados
26

Argumentos

  • Data datos a ser graficados
  • Geometric las formas que se mostraran
  • Aesthetic mappings los datos a ser representados
  • Statistics datos procesados para ser visualizados
27

Argumentos

  • Data datos a ser graficados
  • Geometric las formas que se mostraran
  • Aesthetic mappings los datos a ser representados
  • Statistics datos procesados para ser visualizados
  • Coordinates dispocision de los elementos
28

Argumentos

  • Data datos a ser graficados
  • Geometric las formas que se mostraran
  • Aesthetic mappings los datos a ser representados
  • Statistics datos procesados para ser visualizados
  • Coordinates dispocision de los elementos
  • Scales limites en los cuales varia los aes()
29

Argumentos

  • Data datos a ser graficados
  • Geometric las formas que se mostraran
  • Aesthetic mappings los datos a ser representados
  • Statistics datos procesados para ser visualizados
  • Coordinates dispocision de los elementos
  • Scales limites en los cuales varia los aes()
  • Facets Produce multiples paneles
30

Gramatica de visualizacion

Data - Los datos

ggplot(data)

Tidy Data

  1. Cada variable una a columna

  2. Cada observaCion es una fila

  3. Cada mediocion es una unidad de la observacion

31

Gramatica de visualizacion

Data - Los datos

ggplot(data)
country 1997 2002 2007
Canada 30.30584 31.90227 33.39014
China 1230.07500 1280.40000 1318.68310
United States 272.91176 287.67553 301.13995
32

Gramatica de visualizacion

Data - Los datos

ggplot(data)
country 1997 2002 2007
Canada 30.30584 31.90227 33.39014
China 1230.07500 1280.40000 1318.68310
United States 272.91176 287.67553 301.13995
tidy_pop <- gather(messy_pop, 'year', 'pop', -country)
country year pop
Canada 1997 30.306
China 1997 1230.075
United States 1997 272.912
Canada 2002 31.902
China 2002 1280.400
United States 2002 287.676
Canada 2007 33.390
China 2007 1318.683
United States 2007 301.140
33

Gramatica de Visualizacion

Data

Estetica - Aesthetics

+ aes()

Informacion a ser visualizada

  • year

  • pop

  • country

34

Gramatica de Visualizacion

Data

Estetica - Aesthetics

+ aes()

Informacion a ser visualizada

  • year → x

  • pop → y

  • country → shape, color, etc.

35

Gramatica de Visualizacion

Data

Estetica - Aesthetics

+ aes()

Informacion a ser visualizada

aes(
x = year,
y = pop,
color = country
)
36

Gramatica de Visualizacion

Data - Datos

Aesthetics - Estetica

Geoms - Formas

+ geom_*()

Formas geometricas que se mostraran en el grafico

37

Gramatica de Visualizacion

Data - Datos

Aesthetics - Estetica

Geoms - Formas

+ geom_*()

geom_ mas usuales

Tipo Funcion
Punto geom_point()
Linea geom_line()
Barra geom_bar(), geom_col()
Histograma geom_histogram()
Regrecion geom_smooth()
Boxplot geom_boxplot()
Texto geom_text()
Linea Vertical geom_vline()
Linea Horizontal geom_hline()
Columnas geom_col()

https://eric.netlify.com/2017/08/10/most-popular-ggplot2-geoms/

38

Gramatica de Visualizacion

Data - Datos

Aesthetics - Estetica

Geoms - Formas

+ geom_*()

Visisten http://ggplot2.tidyverse.org/reference/ para mas opciones

## [1] "geom_abline" "geom_area" "geom_bar" "geom_bin2d"
## [5] "geom_blank" "geom_boxplot" "geom_col" "geom_contour"
## [9] "geom_count" "geom_crossbar" "geom_curve" "geom_density"
## [13] "geom_density_2d" "geom_density2d" "geom_dotplot" "geom_errorbar"
## [17] "geom_errorbarh" "geom_freqpoly" "geom_hex" "geom_histogram"
## [21] "geom_hline" "geom_jitter" "geom_label" "geom_line"
## [25] "geom_linerange" "geom_map" "geom_path" "geom_point"
## [29] "geom_pointrange" "geom_polygon" "geom_qq" "geom_qq_line"
## [33] "geom_quantile" "geom_raster" "geom_rect" "geom_ribbon"
## [37] "geom_rug" "geom_segment" "geom_sf" "geom_sf_label"
## [41] "geom_sf_text" "geom_smooth" "geom_spoke" "geom_step"
## [45] "geom_text" "geom_tile" "geom_violin" "geom_vline"
39

Gramatica de Visualizacion

Data - Datos

Aesthetics - Estetica

Geoms - Formas

+ geom_*()

Visisten http://ggplot2.tidyverse.org/reference/ para mas opciones

## [1] "geom_abline" "geom_area" "geom_bar" "geom_bin2d"
## [5] "geom_blank" "geom_boxplot" "geom_col" "geom_contour"
## [9] "geom_count" "geom_crossbar" "geom_curve" "geom_density"
## [13] "geom_density_2d" "geom_density2d" "geom_dotplot" "geom_errorbar"
## [17] "geom_errorbarh" "geom_freqpoly" "geom_hex" "geom_histogram"
## [21] "geom_hline" "geom_jitter" "geom_label" "geom_line"
## [25] "geom_linerange" "geom_map" "geom_path" "geom_point"
## [29] "geom_pointrange" "geom_polygon" "geom_qq" "geom_qq_line"
## [33] "geom_quantile" "geom_raster" "geom_rect" "geom_ribbon"
## [37] "geom_rug" "geom_segment" "geom_sf" "geom_sf_label"
## [41] "geom_sf_text" "geom_smooth" "geom_spoke" "geom_step"
## [45] "geom_text" "geom_tile" "geom_violin" "geom_vline"

O solo escriban geom_ en la consola de RStudio

40

Nuestro primer grafico!

ggplot(tidy_pop)

41

Nuestro primer grafico!

ggplot(tidy_pop) +
aes(x = year,
y = pop)

42

Nuestro primer grafico!

ggplot(tidy_pop) +
aes(x = year,
y = pop) +
geom_point()

43

Nuestro primer grafico!

ggplot(tidy_pop) +
aes(x = year,
y = pop,
color = country) +
geom_point()

44

Nuestro primer grafico!

ggplot(tidy_pop) +
aes(x = year,
y = pop,
color = country) +
geom_point() +
geom_line()
geom_path: Cada grupo esta formado solo
por una observacion.
Es necesario especificar el argumento group
en aes()

45

Nuestro primer grafico!

ggplot(tidy_pop) +
aes(x = year,
y = pop,
color = country) +
geom_point() +
geom_line(
aes(group = country))

46

Nuestro primer grafico!

g <- ggplot(tidy_pop) +
aes(x = year,
y = pop,
color = country) +
geom_point() +
geom_line(
aes(group = country))
g

47

Gramatica de Visualizacion

data

aes()

geom_*()

+ geom_*()
geom_*(mapping, data, stat, position)
  • data cada geom puede tener su propia data

    • Mostrada en un sistema unico de coordenadas
  • map geom_*, argumentos en aes()

    • geom_ puede usar aes globales
    • Algunos geom_ tienen argumentos especificos
      • geom_point requiere x - y, opcional shape, color, size, etc.
      • geom_ribbon requiere x, ymin - ymax, opcional fill
    • ?geom_ribbon
48

Gramatica de Visualizacion

data

aes()

geom_*()

+ geom_*()
geom_*(mapping, data, position)
  • position Ajusta lapocision de los objetos
    • 'dodge', 'stack', 'jitter'
49

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

+facet_wrap()
+facet_grid()
g + facet_wrap(~ country)

50

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

+facet_wrap()
+facet_grid()
g + facet_grid(continent ~ country)

51

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

+ labs()
g + labs(x = "Year", y = "Population")

52

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

+ coord_*()
g + coord_flip()

53

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

+ coord_*()
g + coord_polar()

54

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

+ scale_*_*()

scale + _ + <aes> + _ + <type> + ()

Que parametr deseas modificar? → <aes>
De que tipo es el parametro? → <type>

  • Eje x discreto
    scale_x_discrete()
  • Ajustar los ejes a escala logaritmica
    scale_y_log10()
  • Para especificar los colores de forma manual
    scale_fill_discrete()
    scale_color_manual()
55

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

+ scale_*_*()
g + scale_color_manual(values = c("peru", "pink", "plum"))

56

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

+ scale_*_*()
g + scale_y_log10()

57

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

+ scale_*_*()
g + scale_x_discrete(labels = c("MCMXCVII", "MMII", "MMVII"))

58

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()

Se puede manipular la apariencia del grafico

Algunas opciones dentro de ggplot2

  • g + theme_bw()
  • g + theme_dark()
  • g + theme_gray()
  • g + theme_light()
  • g + theme_minimal()
59

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()

Se tiene un gran numero de parametros,
agrupadas por el area de trabajo:

  • Opciones globales: line, rect, text, title
  • axis: x-, y-, title, ticks, lines
  • legend: leyenda
  • panel: area actual de trabajo
  • plot: todo el panel
  • strip: etiquetas de los sub paneles
60

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()

Para modificar los elementos se cuenta con:

  • element_blank() elimina los elementos
  • element_line()
  • element_rect()
  • element_text()
61

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()
g + theme_bw()

62

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()
g + theme_minimal() + theme(text = element_text(family = "Palatino"))

63

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()

Pueden cargar un tema como opcion por defecto con: theme_set()

my_theme <- theme_bw() +
theme(
text = element_text(family = "Palatino", size = 12),
panel.border = element_rect(colour = 'grey80'),
panel.grid.minor = element_blank()
)
theme_set(my_theme)

Todos los graficos pueden usar ahora este tema!

64

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()
g

65

Gramatica de Visualizacion

Data

Aesthetics

Geoms

Facet

Labels

Coords

Scales

Theme

+ theme()
g + theme(legend.position = 'bottom')

66

Como guardar las imagenes

Se tiene la funcion, ggsave( )

ggsave(
filename = "my_plot.png",
plot = my_plot,
width = 10,
height = 8,
dpi = 100,
device = "png"
)
67

install.packages("ggalt")

library(ggalt)
df <- tibble(trt = LETTERS[1 : 10],
value = seq(100, 10, by = -10))
ggplot(df, aes(trt, value)) +
geom_lollipop()

68

install.packages("gqqplotr")

library(qqplotr)
set.seed(0)
smp <- data.frame(norm = rnorm(100))
# Normal Q-Q plot of Normal data
gg <- ggplot(data = smp, mapping = aes(sample = norm)) +
stat_qq_band() +
stat_qq_line() +
stat_qq_point()
gg + labs(x = "Theoretical Quantiles", y = "Sample Quantiles")

69

Donde buscar ayuda

70

Gracias!

71
2
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow