# comentario
# carga de librerias principales
library(tidyverse)
library(plotly)
library(data.table)
library(ggplot2)
ggplot2 es la librería más popular de R, diseñada para una calidad de impresión en forma sencilla y con alto grado de personalización.
La principal librería para gráficos en R es ggplot2 que conforma un paqute orientado a la visualización de datos. Mejora notoriamente los gráficos y estética por sobre los generados en forma normal por R.
ggplot2 crea los gráficos en base a una serie de capas tipo geom_ para determinar el tipo a crear y elementos de estética que definen su aspecto particular.
geom_bin geom_boxplot geom_density geom_error geom_hex geom_hist geom_hline geom_jitter geom_label geom_line geom_point geom_polygon geom_rect geom_ribbon geom_rug geom_segment geom_smooth geom_text geom_tile geom_violin
Aprende a identificar los gráficos según los datos en data to viz
Creación de un gráfico:
Siempre empieza llamando a la función ggplot().
Luego especifica el objeto de datos. Tiene que ser un marco de datos (dataframe). Y necesita una variable numérica y otra categórica.
luego viene la estética, establecida en la función aes(): establecer la variable categórica para el eje X, usar la numérica para el eje Y.
finalmente llamar a geom_bar(). Hay que especificar stat=“identity” para este tipo de conjunto de datos.
Data: el conjunto de datos
Layers:
Scales:
Coordinates
Faceting:
Themes:
Data: datos utilizados para la visualización.
Aesthetics: mapeo de datos en los ejes.
Layers: capa de gráfico dada por la función geom_ que especifica el tipo de gráfico a crear.
Datos de ejemplo con el conjunto de datos de titanic (1309 registros, 14 variables).
# carga del archivo en una variable llamada "dataset". Coloque este archivo en la misma carpeta de este documento.
<- read.csv("data/titanic3.csv")
dataset # transforma el dataset en un dataframe
<- data.frame(dataset)
dataset # mostrar la estructura del dataset
str(dataset)
## 'data.frame': 1309 obs. of 14 variables:
## $ pclass : int 1 1 1 1 1 1 1 1 1 1 ...
## $ survived : int 1 1 0 0 0 1 1 0 1 0 ...
## $ name : chr "Allen, Miss. Elisabeth Walton" "Allison, Master. Hudson Trevor" "Allison, Miss. Helen Loraine" "Allison, Mr. Hudson Joshua Creighton" ...
## $ sex : chr "female" "male" "female" "male" ...
## $ age : num 29 0.917 2 30 25 ...
## $ sibsp : int 0 1 1 1 1 0 1 0 2 0 ...
## $ parch : int 0 2 2 2 2 0 0 0 0 0 ...
## $ ticket : chr "24160" "113781" "113781" "113781" ...
## $ fare : num 211 152 152 152 152 ...
## $ cabin : chr "B5" "C22 C26" "C22 C26" "C22 C26" ...
## $ embarked : chr "S" "S" "S" "S" ...
## $ boat : chr "2" "11" "" "" ...
## $ body : int NA NA NA 135 NA NA NA NA NA 22 ...
## $ home.dest: chr "St Louis, MO" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" ...
# diamantes
<- read.csv("data/diamonds.csv")
diamantes %>%
diamantes keep(is.numeric) %>%
gather() %>%
ggplot() +
geom_histogram(mapping = aes(x=value,fill=key), color="black") +
theme(plot.title = element_text(size=12, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black") # color
+
) facet_wrap(~ key, scales = "free") +
xlab("") +
ggtitle("Distribución de variables")
#complete.cases(dataset) # TRUE indicates a complete row; FALSE indicates a row with at least
# one incomplete column
<- sum(complete.cases(dataset))
p p
## [1] 119
# sacamos columnas
<- select(dataset, -c(ticket, cabin, boat, body, home.dest))
nuevo str(nuevo)
## 'data.frame': 1309 obs. of 9 variables:
## $ pclass : int 1 1 1 1 1 1 1 1 1 1 ...
## $ survived: int 1 1 0 0 0 1 1 0 1 0 ...
## $ name : chr "Allen, Miss. Elisabeth Walton" "Allison, Master. Hudson Trevor" "Allison, Miss. Helen Loraine" "Allison, Mr. Hudson Joshua Creighton" ...
## $ sex : chr "female" "male" "female" "male" ...
## $ age : num 29 0.917 2 30 25 ...
## $ sibsp : int 0 1 1 1 1 0 1 0 2 0 ...
## $ parch : int 0 2 2 2 2 0 0 0 0 0 ...
## $ fare : num 211 152 152 152 152 ...
## $ embarked: chr "S" "S" "S" "S" ...
# transformamos algunas columnas a factores, valores discretos.
<- dataset %>%
titanic mutate(survived=ifelse(survived==1,"Survived","Dead")) %>%
mutate(survived = as.factor(survived),
pclass=as.factor(pclass),
sex=as.factor(sex),
embarked=as.factor(embarked)
)
El gráfico más simple.
ggplot(titanic, aes(x = survived)) + geom_bar()
Incorporación de etiquetas.
ggplot(titanic, aes(x = survived)) +
theme_bw() +
geom_bar() +
labs(y = "Pasajeros", title = "Supervivencia en Titanic")
Agrupada.
ggplot(titanic, aes(x = sex, fill = survived)) +
theme_bw() +
geom_bar() +
labs(y = "Pasajeros", title = "Supervivencia en Titanic por Género")
ggplot(titanic, aes(x = pclass, fill = survived)) +
theme_bw() +
geom_bar() +
#geom_text(aes(label=survived), vjust=1.6, color="black", size=3.5) +
labs(y = "Pasajeros", title = "Supervivencia en Titanic por Clase")
Agregado por grupos.
ggplot(titanic, aes(x = sex, fill = survived)) +
theme_bw() +
facet_wrap(~ pclass) +
geom_bar() +
labs(y = "Pasajeros", title = "Supervivencia en Titanic por Clase y Género")
Un gráfico de barras se utiliza para mostrar la relación entre una variable numérica y una categórica.
library(ggthemes)
# gráfico de barra
ggplot(titanic, aes(x=sex, fill=survived)) +
geom_bar(position = "fill") +
::theme_economist() +
ggthemesscale_color_gdocs() +
::scale_fill_gdocs() ggthemes
Un boxplot muestra la distribución de datos de una variable continua.
Distribución de Edades
ggplot(titanic, aes(x=sex, y=age, fill=sex)) +
geom_boxplot() +
theme(
legend.position="right", # posición del cuadro de leyenda
# "none" lo oculta
plot.title = element_text(size=12, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black") # color
+
) xlab("Sexo") +
ylab("Edad") +
ggtitle("Distribución de edades por sexo")
ggplot(titanic, aes(x=sex, y=age, fill=sex)) +
geom_boxplot() +
geom_jitter(color="black", size=0.6, alpha=0.9) + # muestra los puntos
theme(
legend.position="none",
plot.title = element_text(size=11, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black")
+
) ggtitle("Distribución de edades por sexo")
Distribución de edades por clase
<- titanic %>%
g1 ggplot(aes(x=pclass, y=age, fill=pclass)) +
geom_boxplot() +
theme(
legend.position="none",
plot.title = element_text(size=10, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black")
+
) xlab("Clase Pasajero") +
ylab("Edad") +
ggtitle("Distribución de edades por clase")
g1
Permite visualizar la distribución de variables numéricas para uno o mas grupos. Sobre todo para grandes set de datos. Compara la densidad entre grupos.
<- titanic %>%
g2 ggplot(aes(x=pclass, y=age, fill=pclass)) +
geom_violin() +
theme(
legend.position="none",
plot.title = element_text(size=10, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black")
+
) labs( x="Clase", y="Edad",
title="Distribución de edades por clase")
g2
# agregamos boxplot
+ geom_boxplot(width = 0.3) g2
Un histograma es una representación gráfica precisa de la distribución de una variable numérica. Sólo toma como entrada variables numéricas. La variable se divide en varios intervalos, y el número de observaciones por intervalo se representa mediante la altura de la barra.
Se usa para analizar una o pocas variables, siempre numéricas.
<- titanic %>%
g3 ggplot( aes(x=age)) +
geom_histogram( binwidth=3, fill="#69b3a2", color="#e9ecef", alpha=0.9) +
theme(
plot.title = element_text(size=10, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black")
+
) labs(x = "Edad", y = "Cuenta", title = "Distribución de edad")
g3
<- titanic %>%
g5 ggplot( aes(x = age, fill = survived)) +
theme_bw() +
geom_histogram(binwidth = 5) +
labs(y = "Pasajeros", x ="Edad", title = "Sobrevivencia por edad")
g5
Una variable numéricas por grupo.
library(hrbrthemes)
<- titanic %>%
p ggplot( aes(x=age, fill=pclass, color=pclass)) +
geom_histogram( color="#e9ecef", alpha=0.6, position = 'identity') +
# scale_fill_manual(values=c("#69b3a2", "#404080")) +
::theme_economist() +
ggthemeslabs(fill="")
p
ggplot(titanic, aes(x = age, fill = survived)) +
theme_bw() +
facet_wrap(sex ~ pclass) +
geom_density(alpha = 0.5) +
labs(y = "Edad", x = "Sobrevivencia",
title = "Sobrevida por edad, clase y sexo")
data(mtcars)
# grafico simple
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point()+ggtitle("Titulo") +
theme(plot.title = element_text(hjust=0.5,face="bold", color = "red"))
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point(aes(size=qsec))
ggplot(mtcars, aes(x=wt, y=mpg)) +
geom_point() +
geom_text(label=rownames(mtcars), size=2.5)
Las series temporales tienen por objeto estudiar la evolución de una o varias variables a lo largo del tiempo. Esta sección da ejemplos usando R. Se hace un enfoque en “tidyverse”: el paquete de “lubridate” es de hecho su mejor amigo para tratar con el formato de fecha, y “ggplot2” permite trazarlo eficientemente. El paquete de “dygraphs” también se considera para construir gráficos interactivos impresionantes.
# Dummy data
<- data.frame(
data day = as.Date("2017-06-14") - 0:364,
value = runif(365) + seq(-140, 224)^2 / 10000
)# Most basic bubble plot
<- ggplot(data, aes(x=day, y=value)) +
p geom_line() +
xlab("")
p
# Dummy data
<- data.frame(
data day = as.Date("2017-06-14") - 0:364,
value = runif(365) + seq(-140, 224)^2 / 10000
)# Most basic bubble plot
<- ggplot(data, aes(x=day, y=value)) +
p geom_line( color="steelblue") +
geom_point() +
xlab("") +
theme(axis.text.x=element_text(angle=60, hjust=1)) +
scale_x_date(limit=c(as.Date("2017-01-01"),as.Date("2017-02-11"))) +
ylim(0,1.5)
p
# Load dataset from github
<- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv", header=T)
data $date <- as.Date(data$date)
data# plot
<- data %>%
g ggplot( aes(x=date, y=value)) +
geom_line(color="#69b3a2") +
ylim(0,22000) +
annotate(geom="text", x=as.Date("2017-01-01"), y=20089,
label="Bitcoin price reached 20k $\nat the end of 2017") +
annotate(geom="point", x=as.Date("2017-12-17"), y=20089, size=10, shape=21, fill="transparent") +
geom_hline(yintercept=5000, color="orange", size=.5)
+ plotly() g
Hay muchas librerias para crear una grilla (grid) que permite gestionar la visualización de los gráficos de multiples maneras.
library(gridExtra)
# grafico 1
<- titanic %>%
graf1 ggplot(aes(x=pclass, y=age, fill=pclass)) +
geom_violin() +
theme(
legend.position="none",
plot.title = element_text(size=11, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black")
+
) xlab("Clase") +
ylab("Edad") +
ggtitle("Edades")
# grafico 2
<- ggplot(titanic, aes(x=sex, y=age, fill=sex)) +
graf2 geom_boxplot() +
geom_jitter(color="black", size=0.6, alpha=0.9) + # muestra los puntos
theme(
legend.position="none",
plot.title = element_text(size=11, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black")
+
) ggtitle("Edades")
# grafico 3
<- ggplot(titanic, aes(x=sex, y=age, fill=sex)) +
graf3 geom_boxplot() +
theme(
legend.position="right", # posición del cuadro de leyenda
# "none" lo oculta
plot.title = element_text(size=12, # tamaño
hjust = 0.5, # centrado
face="bold", # estilo
color = "black") # color
+
) xlab("Sexo") +
ylab("Edad") +
ggtitle("Edades")
<- graf3 + theme(legend.position = "none") # ocultar leyenda
g4 # unir los graficos 1 y 2
<- grid.arrange(graf1, graf2, g4,
grafico ncol=2, nrow=2,
layout_matrix = rbind(c(1,1), c(2,3))
)
# union de graficos
<- grid.arrange(g1, g2, g3, graf2,
grafico2 ncol=3, nrow=2,
layout_matrix = rbind(c(1,2,3),c(4,4,4))
)