Ver Repositorio en GitHub

Atrás

Inicio

Visualización

“Un simple gráfico ha brindado más información a la mente del analista de datos que cualquier otro dispositivo”. — John Tukey

En este proyecto, se desarrolla las actividades propuestas en R for Data Science de Hadley Wickham y Garrett Grolemund.

De los muchos sistemas que posee R para hacer gráficos, ggplot2 es uno de los más elegantes y versátiles. Se indaga las funciones de este paquete, examina la gramática de gráficos, y recursos disponibles para la desafiante tarea de visuliazación de datos.

Primeros Pasos

3.2.4 Ejercicios
  1. Ejecuta ggplot(data = millas). ¿Qué observas? Con este comando, se obtiene un gráfico vacío.
ggplot(data = millas)
  1. ¿Cuántas filas hay en millas? ¿Cuántas columnas? Hay 234 filas y 11 columnas
dim(millas)
## [1] 234  11
  1. ¿Qué describe la variable traccion? Lee la ayuda de ?millas para encontrar la respuesta. Describe el tipo de tracción; d = delantera, t = trasera, 4 = 4 ruedas
?millas
  1. Realiza un gráfico de dispersión de autopista versus cilindros.
ggplot(data = millas) +
  geom_point(mapping = aes(x =cilindros , y = autopista))

  1. ¿Qué sucede cuando haces un gráfico de dispersión (scatterplot) de clase versus traccion? ¿Por qué no es útil este gráfico? Clase y tracción son variables categóricas. El gráfico de dispersión no es el gráfico adeacuado para este tipo de variables.
ggplot(data = millas) +
  geom_point(mapping = aes(x =clase , y = traccion))

Mapeos estéticos

3.3.1 Ejercicios
  1. ¿Qué no va bien en este código? ¿Por qué hay puntos que no son azules? Porque el color se encuentra dentro del parentesis de aes.
ggplot(data = millas) +
   geom_point(mapping = aes(x = cilindrada, y = autopista, color = "blue"))

Para corregir:

ggplot(data = millas) +
   geom_point(mapping = aes(x = cilindrada, y = autopista), colour = "blue")

  1. ¿Qué variables en millas son categóricas? ¿Qué variables son continuas? (Pista: escribe ?millas para leer la documentación de ayuda para este conjunto de datos). ¿Cómo puedes ver esta información cuando ejecutas millas?
  • Variables categóricas: fabricante, modelo, transmision, traccion, combustible y clase.
  • Variables numéricas continuas: cilindrada, ciudad, autopista y discretas: anio, cilindros.
str(millas)
## tibble [234 x 11] (S3: tbl_df/tbl/data.frame)
##  $ fabricante : chr [1:234] "audi" "audi" "audi" "audi" ...
##  $ modelo     : chr [1:234] "a4" "a4" "a4" "a4" ...
##  $ cilindrada : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
##  $ anio       : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
##  $ cilindros  : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
##  $ transmision: chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
##  $ traccion   : chr [1:234] "d" "d" "d" "d" ...
##  $ ciudad     : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
##  $ autopista  : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
##  $ combustible: chr [1:234] "p" "p" "p" "p" ...
##  $ clase      : chr [1:234] "compacto" "compacto" "compacto" "compacto" ...
?millas
## starting httpd help server ... done
  1. Asigna una variable continua a color, size, y shape. ¿Cómo se comportan estas estéticas de manera diferente para variables categóricas y variables continuas? Las estéticas no funcionan con variables continuas. Pero si lo hacen con variables numericas discretas, salvo shape.
str(millas)
## tibble [234 x 11] (S3: tbl_df/tbl/data.frame)
##  $ fabricante : chr [1:234] "audi" "audi" "audi" "audi" ...
##  $ modelo     : chr [1:234] "a4" "a4" "a4" "a4" ...
##  $ cilindrada : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
##  $ anio       : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
##  $ cilindros  : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
##  $ transmision: chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
##  $ traccion   : chr [1:234] "d" "d" "d" "d" ...
##  $ ciudad     : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
##  $ autopista  : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
##  $ combustible: chr [1:234] "p" "p" "p" "p" ...
##  $ clase      : chr [1:234] "compacto" "compacto" "compacto" "compacto" ...
ggplot(data = millas) +
  geom_point(mapping = aes(x = ciudad, y = autopista, color = cilindrada ))

ggplot(data = millas) +
  geom_point(mapping = aes(x = ciudad, y = autopista, size = cilindrada ))

Una variable continua no puede ser representada por shape, porque considera sólo 6 valores.

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, size = ciudad ))

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, color = ciudad))

Tampoco podemos representar con shape la variable ciudad porque los valores que toma esta variable son superiores a los que la estética shape puede considerar.

  1. ¿Qué ocurre si asignas o mapeas la misma variable a múltiples estéticas? Se aplican todas las estéticas simultaneamente
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, color = clase, shape= clase, size=clase))

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, colour = clase, shape = clase))

  1. ¿Qué hace la estética stroke? ¿Con qué formas trabaja? (Pista: consulta ?geom_point) Define el grosor del trazo.
?geom_point
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, stroke= 1))

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, stroke= 2))

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, stroke= 3))

  1. ¿Qué ocurre si se asigna o mapea una estética a algo diferente del nombre de una variable, como aes(color = cilindrada < 5)? Si se asigna una estética a una variable pero además un criterio, la estética discrimana los valores que cumplen ese criterio del resto de los valores de esa variable.
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, color = cilindrada < 5))

Separar en facetas

3.5.1 Ejercicios
  1. ¿Qué ocurre si intentas separar en facetas una variable continua? Se realiza una faceta por cada, valor.
ggplot(data = millas) +
  geom_point(mapping = aes(x = ciudad, y = autopista)) +
  facet_wrap(~ cilindrada, nrow = 2)

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_wrap(~ ciudad, nrow = 2)

  1. ¿Qué significan las celdas vacías que aparecen en el gráfico generado usando facet_grid(traccion ~ cilindros)? ¿Cómo se relacionan con este gráfico? en los cuadrantes vacíos, no hay valores para la intersección de estas facetas. Y lo podemos observar mejor, en un gráfico de dispersión, que es el gráfico de la segunda pregunta. En este gráfico, podemos ver la relación que existe entre tracción y cilindrados.
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_grid(traccion ~ cilindros)

ggplot(data = millas) +
  geom_point(mapping = aes(x = traccion, y = cilindros))

  1. ¿Qué grafica el siguiente código? ¿Qué hace . ? Al dividir las facetas, el punto a la derecha de la variable categórica significa, que los subgráficos que muestran cada subconjunto de datos se distribuya en forma horizonta, uno debajo del otro. Cuando el punto se encuentra a la izquierda, se distribuyen de forma vertical, uno al lado del otro.
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_grid(traccion ~ .)

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_grid(. ~ cilindros)

  1. Mira de nuevo el primer gráfico en facetas presentado en esta sección: ¿Cuáles son las ventajas de separar en facetas en lugar de aplicar una estética de color? ¿Cuáles son las desventajas? ¿Cómo cambiaría este balance si tuvieras un conjunto de datos más grande? El gráfico en facetas, permite ver la relación entre x e y para los disitintos niveles de la variable categórica por separado y detectar, de esta manera, si esta variable tiene algún efecto. Como desventaja, observar el gráfico en facetas, no permite ver claramente la dirección, forma y fuerza de la relación entre x e y.
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_wrap(~ clase, nrow = 2)

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, color= clase)) 

  1. Lee ?facet_wrap. ¿Qué hace nrow? ¿Qué hace ncol? ¿Qué otras opciones controlan el diseño de los paneles individuales? ¿Por qué facet_grid() no tiene argumentos nrow y ncol? nrow y ncol en facet_warap, indica la cantidad de filas y columnas, respectivamente, en que se ordenan los subgráficos.
?facet_wrap
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_wrap(~ clase, nrow = 2)

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_wrap(~ clase, nrow = 4, ncol = 2)

Otra opción que controla el diseño en los paneles, es as.table; si es VERDADERO, el valor predeterminado, las facetas se presentan como una tabla con los valores más altos en la parte inferior derecha. Si es FALSO, las facetas se presentan como un gráfico con el valor más alto en la parte superior derecha.

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_wrap(~ clase, as.table = F)

facet_grid() no tiene argumentos nrow y ncol porque ordena a los subgráfico dado los niveles de las variables categóricas llamadas en la función. La primera variable escrita antes de ~, sus niveles se orden por fila, mientras que la segunda variable, sus niveles se orden por columna.

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_grid(traccion ~ cilindros)

ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista)) +
  facet_grid(cilindros ~ traccion)

  1. Cuando usas facet_grid(), generalmente deberías poner la variable con un mayor número de niveles únicos en las columnas. ¿Por qué? Genera más espacio para las columnas si el gráfico se ubica de forma horizontal.

Objetos geométricos

3.6.1 Ejercicios
  1. ¿Qué geom usarías para generar un gráfico de líneas? ¿Y para un diagrama de caja? ¿Y para un histograma? ¿Y para un gráfico de área? Para un gráfico de líneas geom_line, para un diagrama de caja geom_boxplot, para un histograma geom_histogram, y para un gráfico de área geom_area.
ggplot(data = millas) +
    geom_line(aes(x = cilindrada, y = autopista))

#Gráfico de líneas adecuado para x e y continuas
ggplot(data = millas) +
    geom_histogram(aes(x = cilindrada))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# Histograma para representar una variables numericas.  
ggplot(data = millas) +
    geom_boxplot(aes(x = traccion, y = autopista))

# Gráfico de caja para representar una variable numerica y una variable categórica. 
  • Variables categóricas: fabricante, modelo, transmision, traccion, combustible y clase.
  • Variables numéricas continuas: cilindrada, ciudad, autopista y discretas: anio, cilindros.
ggplot(data = millas) +
  geom_area(aes(x = cilindrada, y = ..density..), stat = "bin")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# Puedo ver la función de densidad de una variable continua
  1. Ejecuta este código en tu mente y predice cómo se verá el output. Luego, ejecuta el código en R y verifica tus predicciones. Se representa dos variables continuas x e y, además, se asigna una estética para la variable categórica traccion con color, en un gráfico de dispersión y una línea suavizada ajustada a los datos sin los intervalos de confianza.
ggplot(data = millas, mapping = aes(x = cilindrada, y = autopista, color = traccion)) +
  geom_point() +
  geom_smooth(se = FALSE)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

  1. ¿Qué muestra show.legend = FALSE? ¿Qué pasa si lo quitas? ¿Por qué crees que lo utilizamos antes en el capítulo? show.legend activa la leyenda de la estética, si la quitamos, toma su valor por default que es TRUE, y como resultado podremos observar la leyenda a la par del gráfico.
ggplot(data = millas) +
  geom_smooth(
    mapping = aes(x = cilindrada, y = autopista, color = traccion),
    show.legend = FALSE
    )
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = millas) +
  geom_smooth(
    mapping = aes(x = cilindrada, y = autopista, color = traccion))
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

  1. ¿Qué hace el argumento se en geom_smooth()? Muestra el intervalo de confianza alrededor línea de suavizado, se = True es el valor por default.
?geom_smooth
  1. ¿Se verán distintos estos gráficos? ¿Por qué sí o por qué no? Se observan gráficos iguales, dado que las especificaciones en ggplot, se extienden a los objetos geométricos. Se obtiene igual resultado, si las especificaciones se realizan dentro de cada obtjeto.
ggplot(data = millas, mapping = aes(x = cilindrada, y = autopista)) +
  geom_point() +
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot() +
  geom_point(data = millas, mapping = aes(x = cilindrada, y = autopista)) +
  geom_smooth(data = millas, mapping = aes(x = cilindrada, y = autopista))
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

  1. Recrea el código R necesario para generar los siguientes gráficos:
# Primer gráfico
ggplot() +
  geom_point(data = millas, mapping = aes(x = cilindrada, y = autopista)) +
  geom_smooth(data = millas, mapping = aes(x = cilindrada, y = autopista), color= "blue", se=FALSE)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

# Segundo gráfico
ggplot() +
  geom_point(data = millas, mapping = aes(x = cilindrada, y = autopista)) +
  geom_smooth(data = millas, mapping = aes(x = cilindrada, y = autopista, group = traccion), se = FALSE)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

# Tercer gráfico
ggplot(data = millas, mapping = aes(x = cilindrada, y = autopista, color = traccion)) +
  geom_point() +
  geom_smooth(se = F)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

# Cuarto gráfico
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, color = traccion))+
  geom_smooth(mapping = aes(x = cilindrada, y = autopista), se = F)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

# Quinto gráfico
ggplot(data = millas) +
  geom_point(mapping = aes(x = cilindrada, y = autopista, color = traccion))+
  geom_smooth(mapping = aes(x = cilindrada, y = autopista, linetype = traccion), se = F)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

# Sexto gráfico
ggplot(data = millas, mapping = aes(x = cilindrada, y = autopista)) +
   geom_point(size = 4, colour = "white") +
   geom_point(aes(colour = traccion))

Transformaciones estadísticas

3.7.1 Ejercicios

Trabajamos con el conjunto de datos diamantes. Tenemos 53 940 observaciones y 10 variables; 3 variables categóricas, corte, color, claridad, y 7 variables numericas continuas, precio, quilate, profundidad, tabla, x, y, z.

str(diamantes)
## tibble [53,940 x 10] (S3: tbl_df/tbl/data.frame)
##  $ precio     : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
##  $ quilate    : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ corte      : Ord.factor w/ 5 levels "Regular"<"Bueno"<..: 5 4 2 4 2 3 3 3 1 3 ...
##  $ color      : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
##  $ claridad   : Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ profundidad: num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ tabla      : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
##  $ x          : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y          : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z          : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
?stat_bin
  1. ¿Cuál es el geom predeterminado asociado con stat_summary()? ¿Cómo podrías reescribir el gráfico anterior para usar esa función geom en lugar de la función stat? La geometría predeterminada asociada con stat_summary() es geom_pointrange()
ggplot(data = diamantes) +
  stat_summary(
    mapping = aes(x = corte, y = profundidad),
    fun.min = min,
    fun.max = max,
    fun = median
  )

ggplot(data = diamantes) +
  geom_pointrange(mapping = aes(x = corte, y = profundidad),
    stat = "summary",
    fun.min = min,
    fun.max = max,
    fun = median
  )

  1. ¿Qué hace geom_col()? ¿En qué se diferencia de geom_bar()?
?geom_col

Ambos, geom_bar() y geom_col() realizan gráficos de barras. geom_bar() hace que la altura de la barra sea proporcional al número de casos en cada grupo. geom_col() hace que la altura de las barras representen valores en los datos, usa_identity(), emplea los datos como estan. Mientras que, geom_bar() usa stat_count() por defecto, es decir cuenta el número de casos en cada posición, por lo que la altura de las barras es proporcional al número de casos.

  1. La mayoría de los geoms y las transformaciones estadísticas vienen en pares que casi siempre se usan en conjunto. Lee la documentación y haz una lista de todos los pares.
  • geom_bar(), stat_count()
  • geom_bin2d(), stat_bin_2d()
  • geom_boxplot(), stat_boxplot()
  • geom_contour(), stat_contour()
  • geom_count(), stat_sum()
  • geom_density(), stat_density()
  • geom_density_2d(), stat_density_2d()
  • geom_hex(), stat_hex()
  • geom_freqpoly(), stat_bin()
  • geom_histogram(), stat_bin()
  • geom_qq_line(), stat_qq_line()
  • geom_qq(), stat_qq()
  • geom_quantile(), stat_quantile()
  • geom_smooth(), stat_smooth()
  • geom_violin(), stat_violin()
  • geom_sf(), stat_sf()
  1. ¿Qué variables calcula stat_smooth()? ¿Qué parámetros controlan su comportamiento? stat_smooth() calcula las siguientes variables:
  • y: valor predicho
  • ymin: menor valor del intervalo de confianza
  • ymax: mayor valor del intervalo de confianza
  • se: error estándar Los parámetros que controlan stat_smooth() incluyen
  • method: método de suavizado
  • formula: fórmula para obtención de la línea de suavizado
  • se: para activar los intervalos de confianza
  • na.rm sies FALSO, los valores faltantes predeterminados se eliminan con una advertencia. Si es VERDADERO, los valores perdidos se eliminan silenciosamente.
  1. En nuestro gráfico de barras de proporción necesitamos establecer group = 1. ¿Por qué? En otras palabras, ¿cuál es el problema con estos dos gráficos? Si quitamos group = 1, todas las barras tienen una altura igual a 1.
ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, y = stat(prop),group = 1))

ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, y = stat(prop)))

ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, y = ..prop.., group = 1))

ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, y = ..prop..))

ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, y = after_stat(prop)))

ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, y = after_stat(prop), group = 1))

No ocurre igual con el argumento fill. Stat cuando una expresión estética que utiliza variables de los datos de la capa y after_stat utiliza variables calculadas por stat. Si usamos el argumento fill debe tomar la variable calculada o realizarse el calculo en el código.

ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, fill = corte, y = after_stat(prop)))

ggplot(data = diamantes) + 
  geom_bar(aes(x = corte, y = ..count.. / sum(..count..), fill = color))

Ajuste de posición

3.8.1 Ejercicios
  1. ¿Cuál es el problema con este gráfico? ¿Cómo podrías mejorarlo? Los valores de las variables autopista y cilindrada se redondean de modo que los puntos aparecen en una cuadrícula y muchos se superponen entre sí. Para mejorarlo se podría establecer el ajuste de posición en “jitter”. position = “jitter”, esto dispersa los puntos. También, se puede hacer con geom_jitter().
ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
  geom_point()

ggplot(data = millas) +
  geom_point(mapping = aes(x = ciudad, y = autopista), position = "jitter")

ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
geom_jitter()

  1. ¿Qué parámetros de geom_jitter() controlan la cantidad de ruido?
?geom_jitter

En la documentación de geom_jitter(), podemos ver los argumentos width y height controlan la dispersión en dirección positiva y negativa, a lo andho y largo, respectivamente. Por lo que la dispersión total es el doble del valor especificado en el argumento. Los valores predeterminados son de 0.4 para ambos argumentos, es decir logran una dispersión total del 0.8 a lo ancho y largo. Supongamos que sólo queremos una dispersión horizontal y al revés.

ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
  geom_jitter(width = 0)

ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
  geom_jitter(height = 0)

  1. Compara y contrasta geom_jitter() con geom_count() Observamos que geom_count() cambia el tamaño de los puntos relativo a la cantidad de observaciones. Las combinaciones de x e y con más observaciones tendrán un mayor tamaño. Esto no distorsiona los valores, pero tiene el problema de que el tamaño de los puntos puede generar superposición si los puntos son cercanos.
?geom_count
ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
  geom_jitter()

ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
  geom_count()

  1. ¿Cuál es el ajuste de posición predeterminado de geom_boxplot()? Crea una visualización del conjunto de datos de millas que lo demuestre.

La posición predeterminada en geom_boxplot es dodge2, que conserva la posición vertical de un geom mientras ajusta la posición horizontal para evitar la superposición. Si agregamos colour = clase a un diagrama de cajas, los niveles de transmision se ubican lado a lado.

?position_dodge2()
ggplot(data = millas, aes(x = traccion, y = cilindrada, colour = clase)) +
  geom_boxplot()

Sistema de coordenadas

3.9.1 Ejercicios
  1. Convierte un gráfico de barras apiladas en un gráfico circular usando coord_polar(). Tomamos el gráfico de barras apilado del apartado 3.8 Ajuste de posición.
ggplot(data = diamantes) +
  geom_bar(mapping = aes(x = corte, fill = claridad))

bar <- ggplot(data = diamantes) +
  geom_bar(
    mapping = aes(x = corte , fill = claridad),
    show.legend = FALSE,
    width = 1
  ) +
  theme(aspect.ratio = 1) +
  labs(x = NULL, y = NULL)

bar + coord_flip()

bar + coord_polar()

  1. ¿Qué hace labs()? Lee la documentación. labs agrega los títulos de los ejes, título del gráfico y la leyenda. Lo aplicamos para los gráficos del punto anterior.
?labs()
bar <- ggplot(data = diamantes) +
  geom_bar(
    mapping = aes(x = corte , fill = claridad),
    show.legend = T,
    width = 1
  ) +
  theme(aspect.ratio = 1) +
  labs(x = "Corte", y = "Frecuencia", title = "Diamantes por tipo de corte y claridad")

bar + coord_flip()

bar + coord_polar()

  1. ¿Cuál es la diferencia entre coord_quickmap() y coord_map()?
?coord_quickmap
  • coord_map() realiza una proyección cartográfica de la Tierra, que es aproximadamente esférica, en un plano plano 2D utilizando cualquier proyección definida por el paquete mapproj. Las proyecciones de mapas, en general, no conservan las líneas rectas, por lo que esto requiere un cálculo considerable.

  • coord_quickmap() es una aproximación rápida que conserva las líneas rectas. Funciona mejor para áreas más pequeñas cerca del ecuador.

  1. ¿Qué te dice la gráfica siguiente sobre la relación entre ciudad y autopista? ¿Por qué es coord_fixed() importante? ¿Qué hace geom_abline()? Los geom_adline, geom_hline, geom_vline, agregan líneas de referencia, diagonal, horizontal, vertical respectivamente, a una parcela. La función coord_fixed() asegura que la línea que genera geom_abline() tenga un ángulo de 45 grados. De este modo es más fácil comparar a partir de los casos en que los rendimientos en autopista y ciudad son iguales.
ggplot(data = millas, mapping = aes(x = ciudad, y = autopista)) +
  geom_point() +
  geom_abline() +
  coord_fixed()