Introducción al paquete gráfico “ggplot2”.

Instalo y cargo el paquete ggplot2.

# install.packages('ggplot2')
library(ggplot2)

Cargo los datos del df “diamonds”.

data("diamonds")
# View(diamonds) help(diamonds)
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

Scatter plot. Para representar dos variables de una misma observación.

ggplot(data=diamonds, aes(x=carat, y=price)) +  #qu? quiero representar
    geom_point()                                #c?mo lo quiero representar

# Se puede observar que existe cierta relacion entre el incremento del precio y el incremento del tama?o.

# Borrar gr?fico

p = ggplot(data=diamonds, aes(x=carat, y=price)) +  #qu? quiero representar
    geom_point()                                    #c?mo lo quiero representar
print(p)

p

summary(p)
## data: carat, cut, color, clarity, depth, table, price, x, y, z
##   [53940x10]
## mapping:  x = carat, y = price
## faceting: facet_null() 
## -----------------------------------
## geom_point: na.rm = FALSE 
## stat_identity:  
## position_identity: (width = NULL, height = NULL)

Introducir una tercera variable en la representación. Aesthetic.

ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) + #El color de los puntos cambia en f(variable)
    geom_point()

#No confundir con:
ggplot(data=diamonds, aes(x=carat, y=price)) +  
    geom_point(color="steelblue", size=4, alpha=1/2) #Ahora color es definido por una constante.

# Muchos aspectos se reprsentan siguiendo los par?metros predefinidos por defecto, como son los colores asignados a cada variable, la aparici?n de la leyenda con un formato y en una posici?n determinada, etc...

# Al introducir una tercera variable en el gr?fico podemos ver c?mo la claridad de los diamantes tambi?n influye en el precio, as? se aprecia que los de claridad VVS1 alcanzan precios mas altos que los de la claridad I1, cuando a?n cuando el peso del diamante es el mismo, p.e.1.

# En el lugar de "clarity" se puede introducir otras variables cualitativas como "color" o "cut".

Podemos introducir aún una cuarta e incluso una quinta variable. Aesthetic.

ggplot(data = diamonds, aes(x = carat, y = price, color = clarity, size = color)) + 
    geom_point()

ggplot(data = diamonds, aes(x = carat, y = price, color = clarity, size = color, 
    shape = cut)) + geom_point()

# Demasiado confuso.

Añadimos una capa más al gráfico (geom_), que a su vez sea un resumen estadístico.

ggplot(data = diamonds, aes(x = carat, y = price)) + geom_point()

# Representamos la curva que mejor se adapta a los datos.
ggplot(data = diamonds, aes(x = carat, y = price)) + geom_point() + geom_smooth()  #El sombreado representa el error est?ndar.
## geom_smooth: method="auto" and size of largest group is >=1000, so using gam with formula: y ~ s(x, bs = "cs"). Use 'method = x' to change the smoothing method.

# Si en vez de la curva, preferimos la recta, pediremos que se calcule
# mediante una regresi?n linear 'lm'.
ggplot(data = diamonds, aes(x = carat, y = price)) + geom_point() + geom_smooth(method = "lm", 
    se = FALSE)  #Quito el sombreado

# Como curiosidad, si utilizamos la est?tica color, se crear? una recta para
# cada variable de color.
ggplot(data = diamonds, aes(x = carat, y = price, color = clarity)) + geom_point() + 
    geom_smooth(method = "lm", se = FALSE)

# Podemos quitar la capa de puntos para tener una mejor im?gen.
ggplot(data = diamonds, aes(x = carat, y = price, color = clarity)) + geom_smooth(method = "lm", 
    se = FALSE)

# Se puede modificar el tipo de l?nea
ggplot(data = diamonds, aes(x = carat, y = price, color = clarity)) + geom_smooth(size = 3, 
    linetype = 2, method = "lm", se = FALSE)

Separamos las gráficas mediante una variable. Facet.

ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) +  
    geom_point() + #Podemos quitar esta capa a?adiendo un corchete al inicio de la l?nea
    geom_smooth(method="lm", se=FALSE) +
    facet_wrap(~ color)

help(facet_wrap)
## starting httpd help server ... done
ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) +  
    geom_smooth(method="lm", se=FALSE) +
    facet_wrap(~ color, ncol=2)

ggplot(data=diamonds, aes(x=carat, y=price)) +  
    geom_point() +
    facet_wrap(~ color + cut, ncol=5)

ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) +  
    geom_point() +
    facet_grid(color ~ cut)

Anotaciones.

ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) +  
    geom_point()

# A?adimos t?tulo y modificamos las etiquetas de los ejes.

ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) +  
    geom_point() +
    ggtitle("Relaci?n entre peso y precio de cada diamante") +
    xlab("Peso (ct)") +
    ylab("Precio ($)")

# Cambiamos par?metros generales del gr?fico.
ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) +  
    geom_point() +
    theme_bw() + # Tema predefinido. Cambia algunos valores por defecto (color de fondo, de las fuentes..).
    ggtitle("Relaci?n entre peso y precio de cada diamante") +
    labs(x="Peso (ct)", y="Precio ($)")

# Podemos cambiar los par?metros que nos interesen
ggplot(data=diamonds, aes(x=carat, y=price, color=clarity)) +  
    geom_point() +
    theme(text = element_text(size=14), # Tama?o de fuente del grafico por defecto
          plot.title=element_text(size=rel(2), vjust=2),
          axis.text=element_text(colour="blue"),
          axis.title.x = element_text(size=rel(1.5)),
          axis.title.y = element_text(size=rel(1.5)),
          legend.text=element_text(size=rel(0.7)),
          legend.title = element_text(size=rel(1))) +
    ggtitle("Relaci?n entre peso y precio de cada diamante") +
    labs(x="Peso (ct)", y="Precio ($)")

help(theme)

Histogramas.

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
ggplot(data = diamonds, aes(x = carat)) + geom_histogram()
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

ggplot(data = diamonds, aes(x = carat)) + geom_histogram(binwidth = 0.2)  # Datos agrupados en diamantes que difieren en menos de 0.2 quilates.

# Para visualizar la distribuci?n de los precios, agrupados por el tipo de
# corte.
ggplot(data = diamonds, aes(x = price)) + geom_histogram(binwidth = 1000) + 
    facet_wrap(~cut)

# Mejoramos los gr?ficos permitiendo que se ajuste el rango de las ordenadas
# en cada uno de ellos.
ggplot(data = diamonds, aes(x = price)) + geom_histogram(binwidth = 1000) + 
    facet_wrap(~cut, scales = "free_y")

# Podemos representar una segunda variable.
ggplot(data = diamonds, aes(x = carat, fill = color)) + geom_histogram(binwidth = 0.2)  #Observamos, por ejemplo, como los diamantes de color D disminuyen su frecuencia conforme ?stos se hacen mas grandes.

Gráficos de densidad.

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
ggplot(data = diamonds, aes(x = carat)) + geom_density()

ggplot(data = diamonds, aes(x = carat, color = color)) + geom_density()

Gráfico de caja y bigotes.

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
ggplot(diamonds, aes(cut, price)) + geom_boxplot()

# Como hay muchos outlyers, transformamos la escala de ordenadas a una
# logar?tmica.
ggplot(diamonds, aes(cut, price)) + geom_boxplot() + scale_y_log10()

Gráficos de violín.

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
# Este tipo de gr?ficos tiene una ventaja respecto a los Boxplots, y es que
# se muestra la frecuencia de los datos.
ggplot(diamonds, aes(cut, price)) + geom_violin() + scale_y_log10()

Guardar gráficos.

ViolinPlot = ggplot(diamonds, aes(cut, price)) + geom_violin() + scale_y_log10()

# jpeg(filename='Plot00.jpeg', # Nombre del archivo y extension height = 11,
# width = 18, res= 200, # Resolucion units = 'cm') # Unidades.  ViolinPlot #
# Grafico dev.off() # Cierre del archivo