2018-03-26

Gráficos de 'Credit Card Default Data' en ggplot2

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

  1. Gráfico 1: diagrama de dispersión.
  2. 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.

    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()
    
  3. Gráfico 2: diagramas de caja.
  4. 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.

    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"))
    
    • 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.

      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:

No hay comentarios:

Publicar un comentario

Nube de datos