Filosofía

¿Qué es ggplot2?

  • Es una construcción de la “Gramática de las gráficas” (Grammar Graphics) propuesta por Leland Wilkinson.
  • Escrito por Hadley Wickham (como estudiante de Iowa State).
  • Está disponible en CRAN y se installa como un paquete del CRAN.
  • La gramática de las gráficas representa una abtracción de gráficas e ideas.
  • Similar a pensar en “verbos”, “sustantivos” y “adjetivos” para las gráficas.
  • La teoría propone una construcción de gráficas mediante una sucesión de elementos similar a un lenguaje.
  • La idea es acortar la distancia entre lo que se piensa y lo que se grafica.

“En resumen, la gramática nos dice que una gráfica estadística es un mapa de los datos a unos atributos estéticos (color, forma, tamaño) de unos objetos geométricos (puntos, lineas, barras). La gráfica tendrá transformaciones estadísticas que se trazan en sistemas de coordenadas específicas” Hadley Wickham.

La función qplot()

  • Trabaja similar a la función plot en el sistema básico.
  • Se le indica una base de datos, unos elementos estéticos y una geometría.
  • Se recomienda trabajar con la composición para tener más dominio de la gramática.

Paquete ggplot2

require(ggplot2)

Una base de datos de ejemplo:

help(mpg)
str(mpg)
head(mpg)

Ejemplos I

g1 <- ggplot(mpg, aes(displ, hwy))
g1 + geom_point()
g1 <- ggplot(mpg, aes(displ, hwy, col = drv))
g1 + geom_point()

Funciones geom_

g1 <- ggplot(mpg, aes(displ, hwy))
g1 + geom_point() + geom_smooth()
g1 <- ggplot(mpg, aes(hwy))
g1 + geom_histogram()
g1 <- ggplot(mpg, aes(hwy, fill = drv))
g1 + geom_histogram()

Facetas (paneles)

g1 <- ggplot(mpg, aes(displ, hwy))
g1 + geom_point() + facet_grid( . ~ drv)
g1 <- ggplot(mpg, aes(displ, hwy))
g1 + geom_point() + facet_grid( drv ~ .)
g1 <- ggplot(mpg, aes(hwy))
g1 + geom_histogram() + facet_grid( drv ~ .)

Ejemplo II

require(dataset)
require(airquality)
help(airquality)
str(airquality)
head(airquality)
require(ggplot2)
g1 <- ggplot(airquality, aes(Ozone))
g1 + geom_histogram()
require(ggplot2)
g1 <- ggplot(airquality, aes(Ozone, fill = factor(Month)))
g1 + geom_histogram()
require(ggplot2)
g1 <- ggplot(airquality, aes(Ozone))
g1 + geom_density()
require(ggplot2)
g1 <- ggplot(airquality, aes(Ozone, col = factor(Month)))
g1 + geom_density()
require(ggplot2)
g1 <- ggplot(airquality, aes(Day, Ozone))
g1 + geom_point()
require(ggplot2)
g1 <- ggplot(airquality, aes(Day, Ozone, shape=factor(Month)))
g1 + geom_point()

Series de tiempo

require(ggplot2)
g1 <- ggplot(airquality, aes(Day, Ozone, col=factor(Month)))
g1 + geom_line()
require(ggplot2)
g1 <- ggplot(subset(airquality, !is.na(Ozone)),
             aes(Day, Ozone, col=factor(Month)))
g1 + geom_line()
require(ggplot2)
g1 <- ggplot(subset(airquality, !is.na(Ozone)),
             aes(Day, Ozone))
g1 + geom_line() + facet_grid(. ~ Month)
require(ggplot2)
g1 <- ggplot(subset(airquality, !is.na(Ozone)),
             aes(Day, Ozone))
g1 + geom_smooth() + facet_grid(. ~ Month) + geom_point()

Anotaciones

require(ggplot2)
g1 <- ggplot(subset(airquality, !is.na(Ozone)),
             aes(Day, Ozone))
g1 + geom_smooth() +
     facet_grid(. ~ Month) +
     geom_point() +
     ggtitle("Comportamiento del ozono por mes") +
     xlab("Día") +
     ylab("Ozono (ppmm)")
require(ggplot2)
fecha1 <- as.Date(paste(with(airquality,seq(min(Month),max(Month))),"01"), format = "%m%d")
nombreMeses <- format(fecha1,"%B")
airquality <- transform(airquality, Mes = factor(Month, labels = nombreMeses))
g1 <- ggplot(subset(airquality, !is.na(Ozone)), aes(Day, Ozone))
g1 + geom_smooth() +
     facet_grid(. ~ Mes) +
     geom_point() +
     ggtitle(expression(paste("Comportamiento del ozono ",O[3]," por mes"))) +
     xlab("Día") + ylab(expression(paste(O[3], "(ppmm)")))
require(ggplot2)
fecha1 <- as.Date(paste(with(airquality,seq(min(Month),max(Month))),"01"), format = "%m%d")
require(Hmisc)
nombreMeses <- capitalize(format(fecha1,"%B"))
airquality <- transform(airquality, Mes = factor(Month, labels = nombreMeses))
g1 <- ggplot(subset(airquality, !is.na(Ozone)), aes(Day, Ozone))
g1 + geom_smooth() +
     facet_grid(. ~ Mes) +
     geom_point() +
     ggtitle(expression(paste("Comportamiento del ozono ",O[3]," por mes"))) +
     xlab("Día") + ylab(expression(paste(O[3], " (ppmm)")))

Estadísticas

g1 <- ggplot(mtcars, aes(x = cyl, y = mpg, colour = factor(vs)))
g1 +  geom_point() +
  stat_summary(fun.y = mean, geom="line", size = 2)
g1 <- ggplot(mpg, aes(hwy))
g1 + stat_bin(aes(ymax = ..count..), geom = "area")
g1 + stat_bin(aes(size = ..density..), binwidth = 0.1,
              geom = "point", position = "identity")

Referencias