2014-10-13

Ley de Benford en R - Gráfico usando ggplot2

Title Partimos del gráfico de barras creado en la entrada anterior, usando el paquete estándar graphics.

A continuación representaremos un gráfico similar usando el paquete ggplot2. Cargamos los paquetes necesarios. Añadimos scales para el formato usado en scale_y_continuous.

library(ggplot2)
library(scales)
Creamos la distribución de Benford. Como usaremos ggplot, necesitamos crear un data frame a partir del vector.

benford <- log10(1+1/(1:9))
benford <- data.frame(d = 1:9, p = benford)
benford
  d          p
1 1 0.30103000
2 2 0.17609126
3 3 0.12493874
4 4 0.09691001
5 5 0.07918125
6 6 0.06694679
7 7 0.05799195
8 8 0.05115252
9 9 0.04575749

Versión 1

benford$d <- factor(benford$d, levels = c(9:1)) 
ggplot(data = benford, aes(x = d, y = p)) +
        geom_bar(stat = 'identity', fill = "steelblue") + 
        xlab("Dígitos") + 
        ylab("Ley de Benford") +
        coord_flip() + # Horizontal
        scale_y_continuous(labels = percent) 
Prácticamente hemos conseguido el formato del primer gráfico. Sin embargo, debemos modificar el color de fondo, las líneas de división verticales y las marcas del eje.

Versión 2

ggplot(data = benford, aes(x = d, y = p)) +
  geom_bar(stat = 'identity', fill = "steelblue") + # 1
  xlab("Dígitos") + 
  ylab("Ley de Benford") +
  coord_flip() + # Horizontal
  scale_y_continuous(labels = percent_format(), 
                     breaks =seq(0, 0.35, 0.05), 
                     minor_breaks = NULL) + 
  theme(panel.grid.minor.y = element_blank(), 
        panel.grid.major.x = element_line(colour = "grey", linetype = 3),
        panel.background=element_blank()) 

Referencias

2 comentarios:

  1. Hola, muchas gracias por el post.
    Estaba intentando combinar en un gráfico lo siguiente.

    scale_y_continuous(breaks=0:20*2.5) +
    scale_y_continuous(labels=percent) #de la librería "scales"

    pero parece que son incompatibles. Me estaba volviendo loco buscando una solución hasta que he descubierto tu blog.

    Saludos.

    ResponderEliminar
    Respuestas
    1. Hola Raúl, me alegro de que te fuera de utilidad. Al añadir dos scale_y_continuous, la segunda reemplaza a la anterior.
      Gracias por el comentario y saludos.

      Eliminar

Nube de datos