Resumen

Se presentan a continuación la implementación y el uso básico de la paquetería ggplot2

Cargando Paquetes

library(ggplot2)

Los datos

Los datos corresponden a precios y atributos adicionales de más de 54,000 diamantes, las variables son:

  • price. Precio en dolares ($326–$18,823)
  • carat. Peso del diamante (0.2–5.01)
  • cut. Calidad del corte (Fair, Good, Very Good, Premium, Ideal)
  • colour. Color del diamante., from J (Lo Peor) to D (Lo Mejor)
  • clarity. una medida de cómo está claro es el diamante (I1 (Lo Peor), SI1, SI2, VS1, VS2, VVS1, VVS2, IF (Lo Mejor))
  • x. Largo in mm (0–10.74)
  • y. Ancho in mm (0–58.9)
  • z. Profundidad in mm (0–31.8)
  • depth. Porcentaje total de profundidad = z / mean(x, y) = 2 * z / (x + y) - (43–79)
  • table. Anchura de la parte superior de diamantes con relación al punto más ancho (43–95)
data("diamonds")
str(diamonds) #Estructura de los datos
## Classes 'tbl_df', 'tbl' and 'data.frame':    53940 obs. of  10 variables:
##  $ carat  : num  0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 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 ...
##  $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ depth  : num  61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ table  : num  55 61 65 58 58 57 57 55 61 61 ...
##  $ price  : int  326 326 327 334 335 336 336 337 337 338 ...
##  $ x      : num  3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y      : num  3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z      : num  2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
head(diamonds)
##   carat       cut color clarity depth table price    x    y    z
## 1  0.23     Ideal     E     SI2  61.5    55   326 3.95 3.98 2.43
## 2  0.21   Premium     E     SI1  59.8    61   326 3.89 3.84 2.31
## 3  0.23      Good     E     VS1  56.9    65   327 4.05 4.07 2.31
## 4  0.29   Premium     I     VS2  62.4    58   334 4.20 4.23 2.63
## 5  0.31      Good     J     SI2  63.3    58   335 4.34 4.35 2.75
## 6  0.24 Very Good     J    VVS2  62.8    57   336 3.94 3.96 2.48

Como pueden observar son casi 54,000 valores, por lo cual se tomará una muestra para los gráficos.

set.seed(510)
muestra<- diamonds[sample(nrow(diamonds),500),]
head(muestra)
##       carat       cut color clarity depth table price    x    y    z
## 53815  0.77      Good     H    VVS2  64.3  57.9  2734 5.70 5.86 3.71
## 23839  1.56     Ideal     H     VS2  61.6  57.0 11922 7.51 7.45 4.61
## 24536  1.31     Ideal     F     VS1  62.1  55.0 12825 6.97 7.00 4.34
## 35654  0.31 Very Good     G    VVS2  63.1  57.0   907 4.32 4.30 2.72
## 20013  0.32   Premium     G     SI2  61.6  59.0   421 4.35 4.38 2.69
## 18689  1.50   Premium     F     SI2  58.5  60.0  7644 7.52 7.48 4.39

Implementación y Gráficos.

Existen varias maneras para graficar con librería de ggplot2, nosotros nos vamos a centrar en utilizar el comando qplot(Quick Plot) que nos dará un primer acercamiento al potencial de esta paquetería.

Las sintaxis de este comando es el siguiente:

args(qplot)
## function (x, y = NULL, ..., data, facets = NULL, margins = FALSE, 
##     geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", 
##     main = NULL, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), 
##     asp = NA, stat = NULL, position = NULL) 
## NULL

Lo principal es que nuestros datos deben estar en un objeto tipo DataFrame (Si no se especifica, se creará una).

Veamos una gráfica donde se compara el peso del diamante(carat) con su precio(price).

qplot(carat,price,data=diamonds) #Todos los datos

qplot(carat,price,data=muestra) #Solo la Muestra

Cambiando los nombres de los ejes y agregando título al gráfico, agregando xlab=“Eje x”, ylab=“Eje y” y Main=“Título”

qplot(carat,price,data=muestra,xlab="Peso del diamante",ylab="Precio del Diamante",main="Gráfica de Peso-Precio")

Transformación de variables

qplot igual ofrece la graficación en escala logarítmica y transformaciones de las variables.

Para transformaciones logarítmicas se agrega el argumento log=“” en donde se le asigna X,Y,XY dependiendo del eje que quiera transformar.

qplot(carat,price,data=muestra,log="x",xlab="Log-Peso",ylab="Precio") #Log Eje X

qplot(carat,price,data=muestra,log="y",ylab="Log-Precio",xlab="Peso") #Log Eje Y

qplot(carat,price,data=muestra,log="xy",xlab="Log-Peso",ylab="Log-Precio")#Log Eje X y Y 

Además, se puede utilizar Transformaciones y operaciones matemáticas para la graficación.

qplot(log(carat),log(price),data=muestra,xlab="Log-Peso",ylab="Log-Precio")

qplot(carat,x*y*z,data=muestra,xlab="Peso")

qplot(carat,price^2,data=muestra,xlab="Peso",ylab="Precio^2")

Atributos Estéticos

Además de los simple gráficos en el plano, se le pueden agregar atributos estéticos para visualizar diferentes tipos de datos. La mayoría de estos atributos son utilizados para visualizar datos categóricos.

Veamos de nuevo la gráfica de Peso-Precio agregando las distinciones del tipo color. se hace agregando como argumento ** color=“Variable”**

qplot(carat,price,data=muestra,color=color,xlab="Peso",ylab="Precio")#Variable Discreta

qplot(carat,price,data=muestra,color=depth,xlab="Peso",ylab="Precio")#Variable Continua

SHAPE o formas, se utiliza para categorías, agregando shape=“Variable”.

qplot(carat,price,data=muestra,shape=cut,color=color)

La combinación de estos atributos da lugar a gráficas interesantes.

Otro atributo importante es el argumento alpha, este sirve para visualizar una gran cantidad de datos y destacar donde la mayoría se encuentra agrupados. Para este ejemplo utilizaremos la base de datos completa y el argumento es alpha=I(1/100), el atributo cambia la saturación de los datos.

qplot(carat,price,data=diamonds,alpha=I(1/100))

La gráfica indica que hay una mayor concentración en los diamantes de precio menor a 5,000 y de peso menor a 1.

El atributo size nos ayuda a visualizar categorías cambiando el tamaño de los puntos, estos son efectivos cuando se utilizan con variables continuas.

qplot(carat,price,data=muestra,size=y,color=y)

Faceting

Este tipo de visualización se encarga de hacer subconjuntos de los datos en diferentes paneles, el argumento es facets=“formula”.

Veamos la división de los datos de acuerdo al color.

qplot(carat,price,data=diamonds,facets=color~.)

También se puede combinar con características ya vista para obtener gráficos interesantes.

qplot(carat,price,data=diamonds,facets=color~cut,color=clarity)

Geometric Objets

Hasta ahora la función qplot nos ha servido para hacer graficas de dispersión, esta función puede ser modificado utilizando el argumento geoms para conseguir nuevas gráficas.

El argumento por defecto es geom=“point” el cual simplemente realiza la gráfica dispersión.

Otro geom interesantes es el geom=“smooth”, el cual ajusta una curva con el error estándar el cual se puede especificar el tipo de ajuste a los datos, por ejemplo: Lineal, Splines etc.

La implementación requiere el argumento geom=c(“point”,“smooth”), el cual le indicamos que grafique tanto los puntos como la curva de ajuste.

qplot(carat,price,data=muestra,geom=c("point","smooth"),main="Carat vs Price")

El geom Jitter sirve para visualizar que tan dispersos son los puntos dependiendo las variables.

Se usa con variables categóricas y se implementa usando geom=“jitter”

qplot(color,carat/price,data=diamonds,geom="jitter")

Al igual se puede usar los clásicos diagramas de caja y bigotes utilizando el argumento como geom=“boxplot”

qplot(color,price/carat,data=muestra,geom="boxplot")

Otro geom importante es tipo line, este grafica los datos de izquierda a derecha como una serie de tiempo.

data("economics")
qplot(date,unemploy,data=economics,geom="line")

A diferencia del anterior el geom path une los puntos de cualquier lado y dirección.

qplot(c(1,4,3),c(1,-1,4),geom="path")

Gráficas en una dimensión

Las principales formas para graficar en una sola dimensión son utilizando los geoms: Histogram,freqpoly y density. al igual se pueden combinar con los atributos estéticos como ya hemos visto.

qplot(price,data=diamonds,geom="histogram",bins=100)#Histograma

qplot(price,data=diamonds,geom="freqpoly",color=cut,bins=100)#Polinomio de frecuencias

qplot(price/carat,data=diamonds,geom="density",color=cut)#Densidad

El argumento bins determina el numero de cortes en el histograma.