Tipos de gráficos
library(ggplot2)
datos = read.csv("Ofertas laborales.csv", sep = ";", dec = ",", header = T)
print(head(datos))
cargo vacantes salario_honorarios sexo
1 contador 3 2200000 indiferente
2 contador 1 2500000 indiferente
3 contador 1 2000000 indiferente
4 analista de mercados 3 1500000 indiferente
5 coodinador de planeacion 1 2200000 indiferente
6 administradora 1 1500000 femenino
nivel_educativo años_experiencia idiomas
1 profesional 5.00 no dato
2 profesional 2.00 no dato
3 profesional 2.00 no dato
4 profesional 1.00 no dato
5 profesional 0.25 no dato
6 profesional 1.00 no dato
str(datos)
'data.frame': 86 obs. of 7 variables:
$ cargo : Factor w/ 44 levels "administración de compras ",..: 21 21 21 9 23 5 17 6 7 38 ...
$ vacantes : int 3 1 1 3 1 1 1 1 1 1 ...
$ salario_honorarios: int 2200000 2500000 2000000 1500000 2200000 1500000 1500000 2000000 2000000 1500000 ...
$ sexo : Factor w/ 3 levels "femenino","indiferente",..: 2 2 2 2 2 1 1 2 2 3 ...
$ nivel_educativo : Factor w/ 2 levels "especialización",..: 2 2 2 2 2 2 2 2 2 2 ...
$ años_experiencia : num 5 2 2 1 0.25 1 0.5 2 2 3 ...
$ idiomas : Factor w/ 2 levels "inglés","no dato": 2 2 2 2 2 2 2 2 2 2 ...
Barras:
Las variables categóricas en R
tienen el formato de Factor
.
Estas variables permiten clasificar los datos asociando una etiqueta a
cada dato.
El gráfico de barras calcula la frecuencia relativa de cada variable categórica. Podemos identificar los factores de mayor y menor frecuencia. Se analiza cómo están los datos clasificando en función de una variable, por ejemplo, ¿existen mayores ofertas laborales para los especialistas?
En ggplot2
se utiliza la capa geom_bar()
Una variable categórica:
ggplot(data = datos) +
geom_bar(aes(x = nivel_educativo))
![../../_images/output_9_01.png](../../_images/output_9_01.png)
ggplot(data = datos) +
geom_bar(aes(x = cargo)) +
coord_flip() # Para girar el gráfico
![../../_images/output_10_0.png](../../_images/output_10_0.png)
Para cambiar el color de cada barra (cada factor), se agrega
fill = nivel_educativo
dentro de aes()
.
Las etiquetas del eje \(X\) se cambian con
scale_x_discrete(labels = c("Especialización", "Profesional"))
ggplot(data = datos) +
geom_bar(aes(x = nivel_educativo, fill = nivel_educativo), width = 0.3) +
labs(title = "Ofertar laborales",
subtitle = "Clasificación por nivel educativo",
x = "Nivel educativo",
y = "Cantidad",
fill = "Nivel educativo") +
scale_x_discrete(labels = c("Especialización", "Profesional"))
![../../_images/output_12_01.png](../../_images/output_12_01.png)
Más de una variable categórica:
El anterior gráfico clasifica los datos en una sola variable categórica
haciendo que la clasificación por fill =
se hiciera con la misma
variable x =
, para clasificar dos variables categóricas, en estos
dos argumentos se debe poner variables distintas, por ejemplo,
x = nivel_educativo
y en fill = sexo
.
ggplot(data = datos) +
geom_bar(aes(x = nivel_educativo, fill = sexo), width = 0.3) +
labs(title = "Ofertar laborales",
subtitle = "Clasificación por nivel educativo y sexo",
x = "Nivel educativo",
y = "Cantidad",
fill = "Sexo") +
scale_x_discrete(labels = c("Especialización", "Profesional"))
![../../_images/output_15_0.png](../../_images/output_15_0.png)
Para clasificar con una tercera variable se puede agregar
facet_grid ()
ggplot(data = datos) +
geom_bar(aes(x = nivel_educativo, fill = sexo), width = 0.3) +
facet_grid(. ~ idiomas) +
labs(title = "Ofertar laborales",
subtitle = "Clasificación por nivel educativo, sexo e idioma",
x = "Nivel educativo",
y = "Cantidad",
fill = "Sexo") +
scale_x_discrete(labels = c("Especialización", "Profesional"))
![../../_images/output_17_0.png](../../_images/output_17_0.png)
Note que aparecen unos colores por defecto, pero podemos crear nuestra propia paleta de colores e ingresarlos manualmente.
Cuando clasificamos los datos por colores podemos cambiar los colores que la librería muestra por defecto.
Primero, se crea una variable con los colores:
colores <- c("steelblue1", "turquoise", "wheat")
.
Luego, se agregan en el gráfico como una capa adicional así:
+ scale_color_manual(values = colores, aesthetics = "fill")
En este ejemplo la clasificación se está haciendo cambiando los colores
en fill
, por esto se pone aesthetics = "fill"
, pero si la
clasificación se hiciera por color
, entonces se pone
aesthetics = "colour"
colores <- c("steelblue1", "turquoise", "wheat")
ggplot(data = datos) +
geom_bar(aes(x = nivel_educativo, fill = sexo), width = 0.3) +
facet_grid(. ~ idiomas) +
labs(title = "Ofertar laborales",
subtitle = "Clasificación por nivel educativo, sexo e idioma",
x = "Nivel educativo",
y = "Cantidad",
fill = "Sexo") +
scale_x_discrete(labels = c("Especialización", "Profesional")) +
scale_color_manual(values = colores, aesthetics = "fill")
![../../_images/output_20_0.png](../../_images/output_20_0.png)
Torta (pie):
Primero se debe hacer un gráfico de barras, pero todas las barras
apiladas en una sola, luego se transforma el gráfico con
coord_polar()
para cambiar las alturas de las barras por ángulos.
El gráfico de barras apiladas se hace solo pasando una variable en
\(y\) y se deja la \(X\) vacía así:
x = "", y = nivel_educativo
.
Se agrega stat = "identity"
para que no se realice un conteo para la
altura de las barras porque ya se especificó con y = nivel_educativo
ggplot(data = datos) + aes(x = "", y = nivel_educativo, fill = nivel_educativo) +
geom_bar(stat = "identity", width = 0.3)
![../../_images/output_23_01.png](../../_images/output_23_01.png)
Después, el gráfico de torta o pie se hace transformando el gráfico
anterior con coord_polar(theta = "y")
.
theta = "y"
es para cambiar la geometría de la altura de las barras.
ggplot(data = datos) + aes(x = "", y = nivel_educativo, fill = nivel_educativo) +
geom_bar(stat = "identity") +
coord_polar(theta = "y")
![../../_images/output_25_0.png](../../_images/output_25_0.png)
Histograma:
Se usa para variables numéricas.
Una variable:
ggplot(data = datos, aes(x = años_experiencia)) +
geom_histogram(bins = 15, fill = "steelblue1", color = "black") +
labs(title = "Ofertas laborales",
subtitle = "Años de experiencia",
x = "Años de experiencie",
y = "Cantidad")
![../../_images/output_29_0.png](../../_images/output_29_0.png)
Clasificación con una variable:
Clasificación por años de experiencia y por sexo. Solo es agregar la
clasificación dentro de aes()
ya sea con color
, fill
o
shape
.
colores <- c("steelblue1", "turquoise", "wheat")
ggplot(data = datos, aes(x = años_experiencia, fill = sexo)) +
geom_histogram(bins = 15, color = "black") +
labs(title = "Ofertas laborales",
subtitle = "Años de experiencia por sexo",
x = "Años de experiencie",
y = "Cantidad") +
scale_color_manual(values = colores, aesthetics = "fill")
![../../_images/output_33_0.png](../../_images/output_33_0.png)
Clasificación con dos o más variables:
La segunda variable categórica que clasifica se agrega con
facet_grid()
ggplot(data = datos, aes(x = años_experiencia, fill = sexo)) +
geom_histogram(bins = 15, color = "black") +
facet_grid(. ~ idiomas) +
labs(title = "Ofertas laborales",
subtitle = "Años de experiencia por sexo e idiomas",
x = "Años de experiencie",
y = "Cantidad") +
scale_color_manual(values = colores, aesthetics = "fill")
![../../_images/output_36_0.png](../../_images/output_36_0.png)
Para una tercera variable para clasificar se llena el otro campo de
facet_grid()
.
ggplot(data = datos, aes(x = años_experiencia, fill = sexo)) +
geom_histogram(bins = 15, color = "black") +
facet_grid(vacantes ~ idiomas) +
labs(title = "Ofertas laborales",
subtitle = "Años de experiencia",
x = "Años de experiencie",
y = "Cantidad") +
scale_color_manual(values = colores, aesthetics = "fill")
![../../_images/output_38_0.png](../../_images/output_38_0.png)
Dispersión:
Los gráficos de dispersión son bivariados, se necesita una \(X\) y una \(y\).
ggplot(data = datos, aes(x = sexo, y = salario_honorarios)) +
geom_point(size = 4)
![../../_images/output_41_0.png](../../_images/output_41_0.png)
ggplot(data = datos, aes(x = sexo, y = salario_honorarios)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y sexo",
x = "Sexo",
y = "Salario")
![../../_images/output_42_0.png](../../_images/output_42_0.png)
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo",
x = "Sexo",
y = "Salario",
color = "Nivel educativo")
![../../_images/output_43_0.png](../../_images/output_43_0.png)
Las observaciones se pueden clasificar en el gráfico indicando las
variables en aes()
en los argumentos color
, fill
, size
o
shape
. Adiciomalmente, si se usa facet_grid()
se puede hacer
clasificaciones con una o dos variables adicionales.
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios, color = sexo)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo por sexo",
x = "Nivel educativo",
y = "Salario",
color = "Sexo")
![../../_images/output_45_0.png](../../_images/output_45_0.png)
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios, color = sexo, shape = idiomas)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo por sexo e idiomas",
x = "Nivel educativo",
y = "Salario",
color = "Sexo",
shape = "Idiomas")
![../../_images/output_46_01.png](../../_images/output_46_01.png)
La clasificación anterior por sexo e idiomas se puede hacer de la siguiente manera:
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios, color = sexo)) +
geom_point(size = 4) +
facet_grid(. ~ idiomas) +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo por sexo e idiomas",
x = "Nivel educativo",
y = "Salario",
color = "Sexo")
![../../_images/output_48_0.png](../../_images/output_48_0.png)
Salario y años de experiencia por sexo.
ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios, color = sexo)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia por sexo",
x = "Años de experiencia",
y = "Salario",
color = "Sexo")
![../../_images/output_50_0.png](../../_images/output_50_0.png)
ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios, color = sexo, shape = idiomas)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia por sexo",
x = "Años de experiencia",
y = "Salario",
color = "Sexo")
![../../_images/output_51_0.png](../../_images/output_51_0.png)
ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios, color = idiomas)) +
geom_point(size = 4) +
facet_grid(sexo ~ .) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia por sexo e idiomas",
x = "Años de experiencia",
y = "Salario",
color = "Idiomas")
![../../_images/output_52_0.png](../../_images/output_52_0.png)
ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios, color = idiomas)) +
geom_point(size = 4) +
facet_grid(sexo ~ vacantes) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia por sexo, idiomas y vacantes",
x = "Años de experiencia",
y = "Salario",
color = "Idiomas")
![../../_images/output_53_0.png](../../_images/output_53_0.png)
A veces a útil crear un gráfico de dispersión y al mismo tiempo mostrar la forma de los datos con histogramas, boxplots o densidades. Para hacer esto se usará el siguiente paquete:
install.packages("ggExtra")
library(ggExtra)
Con la función ggMarginal()
de la librería ggExtra
podemos
agregar gráficos “marginales” como histogramas, boxplots, etc. sobre los
gráficos de ggplot2
.
Primero se crea el gráfico con ggplot2
, pero se almacena en una
variable, por ejemplo, en p
, luego se usa la función
ggMarginal()
indicando en el primer argumento el gráfico de
ggplot2
que lo llamamos p
y en el segundo argumento el tipo de
gráfico entre comillas.
p <- ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia",
x = "Años de experiencia",
y = "Salario")
ggMarginal(p, type = "histogram")
![../../_images/output_58_0.png](../../_images/output_58_0.png)
p <- ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia",
x = "Años de experiencia",
y = "Salario")
ggMarginal(p, type = "boxplot")
![../../_images/output_59_0.png](../../_images/output_59_0.png)
p <- ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia",
x = "Años de experiencia",
y = "Salario")
ggMarginal(p, type = "density")
![../../_images/output_60_0.png](../../_images/output_60_0.png)
Gráfico marginal solo para la \(X\): margins = "x"
.
p <- ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia",
x = "Años de experiencia",
y = "Salario")
ggMarginal(p, margins = "x", type = "histogram", fill = "darkred")
![../../_images/output_62_0.png](../../_images/output_62_0.png)
Gráfico marginal solo para la \(y\): margins = "y"
.
p <- ggplot(data = datos, aes(x = años_experiencia, y = salario_honorarios)) +
geom_point(size = 4) +
labs(title = "Ofertas laborales",
subtitle = "Salario y años de experiencia",
x = "Años de experiencia",
y = "Salario")
ggMarginal(p, margins = "y", type = "histogram", fill = "darkred")
![../../_images/output_64_0.png](../../_images/output_64_0.png)
Boxplot (diagrama de caja y bigotes):
Útiles para analizar los datos e identificar datos atípicos ( outliers ).
![Boxplot](../../_images/Boxplot.png)
Boxplot
![Diagrama](../../_images/Diagrama_de_caja.jpg)
Diagrama
Boxplot-Nomal
Distribución de los años de experiencia por cada sexo.
ggplot(data = datos, aes(x = sexo, y = años_experiencia)) +
geom_boxplot()
![../../_images/output_71_0.png](../../_images/output_71_0.png)
ggplot(data = datos, aes(x = sexo, y = años_experiencia)) +
geom_boxplot() +
labs(title = "Ofertas laborales",
subtitle = "Años de experiencia y sexo",
x = "Sexo",
y = "Años de experiencia")
![../../_images/output_72_0.png](../../_images/output_72_0.png)
Distribución del salario por cada sexo.
ggplot(data = datos, aes(x = sexo, y = salario_honorarios)) +
geom_boxplot() +
labs(title = "Ofertas laborales",
subtitle = "Salario y sexo",
x = "Sexo",
y = "Salario")
![../../_images/output_74_0.png](../../_images/output_74_0.png)
Distribución del salario por cada nivel educativo.
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios)) +
geom_boxplot() +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo",
x = "Nivel educativo",
y = "Salario")
![../../_images/output_76_0.png](../../_images/output_76_0.png)
Gráfico Boxplot con observaciones individuales como puntos. Se agrega la
capa de geom_point()
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios)) +
geom_boxplot() +
geom_point() +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo",
x = "Nivel educativo",
y = "Salario")
![../../_images/output_78_0.png](../../_images/output_78_0.png)
Gráfico Boxplot con observaciones individuales como puntos y
clasificación de los puntos por una variable. En la capa de
geom_point
se agrega aes(color = sexo)
.
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios)) +
geom_boxplot() +
geom_point(aes(color = sexo)) +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo",
x = "Nivel educativo",
y = "Salario")
![../../_images/output_80_0.png](../../_images/output_80_0.png)
Distribución del salario por cada cargo.
ggplot(data = datos, aes(x = cargo, y = salario_honorarios)) +
geom_boxplot() +
labs(title = "Ofertas laborales",
subtitle = "Salario y cargo",
x = "Cargo",
y = "Salario") +
coord_flip()
![../../_images/output_82_0.png](../../_images/output_82_0.png)
Distribución del salario por nivel de educación e idioma adicional requerido.
ggplot(data = datos, aes(x = nivel_educativo, y = salario_honorarios)) +
geom_boxplot() +
facet_grid(. ~ idiomas) +
labs(title = "Ofertas laborales",
subtitle = "Salario y nivel educativo por idioma",
x = "Nivel educativo",
y = "Salario")
![../../_images/output_84_0.png](../../_images/output_84_0.png)
El siguiente gráfico tiene las variables anteriores, pero con diferente orden en la clasificación.
ggplot(data = datos, aes(x = idiomas, y = salario_honorarios)) +
geom_boxplot() +
facet_grid(. ~ nivel_educativo) +
labs(title = "Ofertas laborales",
subtitle = "Salario e idioma por nivel educativo",
x = "Idiomas",
y = "Salario")
![../../_images/output_86_0.png](../../_images/output_86_0.png)
Distribución del salario por idioma adicional requerido y adicionalmente, por nivel educativo y años de experiencia.
ggplot(data = datos, aes(x = idiomas, y = salario_honorarios)) +
geom_boxplot() +
facet_grid(vacantes ~ nivel_educativo) +
labs(title = "Ofertas laborales",
subtitle = "Salario e idioma por nivel educativo y años de experiencia",
x = "Idiomas",
y = "Salario")
![../../_images/output_88_0.png](../../_images/output_88_0.png)