Problema
Queremos crear con ggplot2 los siguientes dos gráficos del libro 'An Introduction to Statistical Learning'. Nos servirá para practicar algunos conceptos de ggplot2.
Solución
- Gráfico 1: diagrama de dispersión. Al contrario que en el libro, representamos todos los puntos (10.000). Para evitar un gráfico sobrecargado de puntos —overplotting— añadimos transparencia a los mismos con el argumento alpha. Adicionalmente, cambiamos la forma de los puntos con el argumento shape (el 1 es un círculo y el 2 una cruz). Finalmente, en lugar de dejar un panel de fondo totalmente blanco, dejo líneas de cuadrícula grises (theme_bw) para identificar mejor la ubicación de los puntos.
- Gráfico 2: diagramas de caja. Como queremos representar en un único panel dos gráficos, uno para balance y otro para income, necesitamos transformar el data frame de formato ancho a largo con la función melt del paquete reshape2. Posteriormente, usamos face_wrap para generar los dos gráficos e indicamos las escalas de los ejes free para que se adapten automáticamente para cada gráfico.
- De formato ancho a largo. Dentro de facet_wrap usamos variable pues es el nombre de la columna clave (key) que recoge el nombre de las dos columnas: balance e income.
library(ISLR)
library(ggplot2)
ggplot(data = Default, aes(x = balance, y = income)) +
geom_point(aes(color = default, shape = default),
alpha = .5,
size = 2) +
scale_shape_manual(values = c(1, 3)) +
scale_colour_manual(values = c("royalblue", "orangered")) +
scale_x_continuous(breaks = seq(0, 2500, 500)) +
theme_bw()
library(reshape2)
ggplot(data = melt(Default), aes(x = default, y = value)) +
stat_boxplot(geom = 'errorbar', width = 0.5) +
geom_boxplot(aes(fill = default)) +
facet_wrap(~ variable, scales = "free") +
scale_fill_manual(values = c("Dodgerblue", "orangered"))
melt(Default)[c(1:5, 19996:20000), ]
Using default, student as id variables
default student variable value
1 No No balance 729.5265
2 No Yes balance 817.1804
3 No No balance 1073.5492
4 No No balance 529.2506
5 No No balance 785.6559
19996 No No income 52992.3789
19997 No No income 19660.7218
19998 No No income 58636.1570
19999 No No income 36669.1124
20000 No Yes income 16862.9523
Entradas relacionadas
En una próxima entrada trataremos en detalle las transformaciones de formato ancho a largo y viceversa. Un tema ya tratado anteriormente, directa o indirectamente, en las siguientes entradas:
- Diagramas de caja de un data frame con ggplot2: una o varias columnas
- Cambiar el orden de un diagrama de barras apiladas con ggplot2
- Agregar datos en R con el paquete reshape2
- Múltiples valores y funciones de agregación con reshape2 y plyr
- Convertir de formato largo a ancho usando una función de agregación en R
No hay comentarios:
Publicar un comentario