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)
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