Carlos Jimémez-Gallardo , 2019
EstadÃstico
MSc Infórmatica Educativa
Universidad de La Frontera
Data Scientist
www.innovate.cl
un propósito, si tiene claro que quiere decir con el gráfico es más fácil escogerlo.
el tipo de variable a grafica debe ser CUALITATIVA o Tabulada desde una CONTINUA
Revisar si requiere crear una tabla resumen, dependera de lo que quiere mostrar
Las librerias son esenciales para facilitarse la vida. Algunas de ellas
library(tidyverse) # carga un conjunto de librerias necesarias, entre ellas dplyr, ggplot2
si bien todas ayudan, para este documento solo utilizaré GGPLOT2 para no hacer un documento tan extenso.
pueden encontrar el archivo de datos en el siguiente link: https://github.com/cjimenezgallardo/DATASETS/blob/main/datos_empleados.xlsx
Los datos corresponden Sueldo percibidos en una empresa, y que como variable, se tienen:
dataej<-datos_empleados
names(dataej)
## [1] "ID" "Sexo" "FechaNAc" "educacion"
## [5] "labor" "Sueldo_actual" "Sueldo_inicial" "antigüedad"
## [9] "experiencia" "minoria"
CONSEJO: realice un bosquejo manual, que le permita entender que quiere mostrar, para que luego lo contrareste con lo que aparecio en R
Objetivo, mostrar cuantos estan en cada labor
ggplot(data = dataej,aes(x=labor))+
geom_bar()
ggplot(data=dataej,aes(x=labor))+
geom_bar(fill="#8c4966",alpha=0.4,
color=2)+
ggtitle("Distribucion por Labor")+
xlab("tipo de trabajo")+
ylab("frecuencia")
ggplot(data=dataej,aes(x=labor))+
geom_bar(position="dodge",
fill="#8c4966",alpha=0.4,
color=2)+
ggtitle("Distribucion de los trabajadores por Labor")+
xlab("tipo de trabajo")+
ylab("frecuencia")+
geom_text(aes(label=..count..), # coloca rotulos de las barras
stat = "count",
position=position_dodge(0.9), # corrige la posicion del numero
vjust=-.5)+
ylim(c(0,400))
ggplot(data=dataej,aes(x=labor))+
geom_bar(position="dodge",
fill="#8c4966",alpha=0.4,
color=2)+
xlab("tipo de trabajo")+
scale_fill_manual(values = c("red","blue", "green"))+
ylab("frecuencia")+
geom_text(aes(label=..count..), # coloca rotulos de las barras
stat = "count",
position=position_dodge(0.9), # corrige la posicion del numero
vjust=-.5)+
ylim(c(0,400))+
facet_wrap(~"Distribucion de trabajadores por Labor")
Tambien se puede obtener, generardo una Tabla, en mi percepción permite un MAYOR CONTROL
# generando tabla resumen
tabla01 <- dataej %>%
group_by(labor) %>%
summarise(Total=n())
# Graficando
ggplot(tabla01, aes(x=labor,y=Total,fill=as.factor(labor)))+
geom_bar(stat="identity",
width=0.5,
position = position_dodge())+
facet_wrap(~"Distribucion de trabajadores por Labor")+
ylab("frecuencia")+
xlab("tipo de trabajo")+
scale_x_continuous(breaks = c(1,2,3),labels=c("Adm","Op","Ej"))+ # o scale_x_discrete si es texto
geom_text(aes(label=Total),
position=position_dodge(0.9), # corrige la posicion del numero
vjust=-.5)+
ylim(c(0,400))
Mostrar en Porcentaje
# generando tabla resumen
tabla01 <- dataej %>%
group_by(labor) %>%
summarise(Total=n()) %>%
mutate(porc=Total/sum(Total)*100)
# Graficando
ggplot(tabla01, aes(x=labor,y=porc,fill=as.factor(labor)))+
geom_bar(stat="identity",
width=0.5,
position = position_dodge())+
facet_wrap(~"Distribucion de trabajadores por Labor")+
ylab("Porcentaje")+
xlab("tipo de trabajo")+
scale_x_continuous(breaks = c(1,2,3),labels=c("Adm","Op","Ej"))+ # o scale_x_discrete si es texto
geom_text(aes(label=round(porc,2)),
position=position_dodge(0.9), # corrige la posicion del numero
vjust=-.5)+
ylim(c(0,100))
En lo personal, cuando son pocos grupos (3 en este caso e idealmente un numero en el cual se vean claramente cada grupo) prefiero hacerlo circular
que pasa si el Proposito es PROMEDIO de sueldo por labor
# generando tabla resumen
tabla_prom <- dataej %>%
group_by(labor) %>%
summarise(Prom =mean(Sueldo_actual))
# Graficando
ggplot(tabla_prom, aes(x=labor,y=Prom ,fill=as.factor(labor)))+
geom_bar(stat="identity",
width=0.5)+
facet_wrap(~"Promedio Sueldo por Labor")+
ylab("Porcentaje")+
xlab("tipo de trabajo")+
scale_x_continuous(breaks = c(1,2,3),labels=c("Adm","Op","Ej"))+ # o scale_x_discrete si es texto
geom_text(aes(label=round(Prom,2)),
vjust=-.5)
Se puede comparar en funcion de Frecuencia u ottro proceso (promedio, mediana, sd_error, etc).
# Graficando
ggplot(dataej, aes(x=as.factor(labor) ,fill=Sexo))+
geom_bar(position="dodge",
colour="blue",
width=1)+
facet_wrap(~"Distribucion de personas por cargo según sexo")+
ylab("Frecuencia")+
xlab("tipo de trabajo")+
scale_x_discrete(breaks = c(1,2,3),labels=c("Adm","Op","Ej"))+ # o scale_x_discrete si es texto
geom_text(aes(label=..count..), stat = "count",
position=position_dodge(0.9),
vjust=-.5)
# Graficando
ggplot(dataej, aes(x= Sexo ,fill=as.factor(labor)))+
geom_bar(position="dodge",
colour="blue")+
facet_wrap(~"Distribucion de personas por sexo del cargo")+
ylab("Frecuencia")+
xlab("Sexo")+
geom_text(aes(label=..count..), stat = "count",
position=position_dodge(0.9),
vjust=-.5)
en porcentaje
# tabla
tabla02 <- dataej %>%
group_by(Sexo,labor) %>%
summarise(Total=n()) %>% #obtiene totales
mutate(Porcentaje=Total/sum(Total)*100) %>% #calcula porcentaje
arrange(Sexo) #ordena
## `summarise()` has grouped output by 'Sexo'. You can override using the
## `.groups` argument.
# Graficando
ggplot(tabla02, aes(x=Sexo ,y=Porcentaje, fill=as.factor(labor)))+
geom_bar(stat="identity", position = "dodge")+
ylim(0,130)+
geom_text(aes(label=paste0(round(Porcentaje,2), "%")),
vjust=-0.9,
color="black",
hjust=0.5,
# define text position and size
position = position_dodge(0.9),
angle=0,
size=4.0
)+
facet_wrap(~"Distribucion de personas por sexo del cargo")+
ylab("Porcentaje")+
xlab("Sexo")
como promedio
# tabla
tabla03 <- dataej %>%
group_by(Sexo,labor) %>%
summarise(Promedio=mean(Sueldo_actual)) %>% #obtiene totales
arrange(Sexo) #ordena
## `summarise()` has grouped output by 'Sexo'. You can override using the
## `.groups` argument.
# Graficando
ggplot(tabla03, aes(x=Sexo ,y=Promedio, fill=as.factor(labor)))+
geom_bar(stat="identity", position = "dodge")+
scale_fill_manual(values=c("blue","orange","green"))+
ylim(0,100000)+
geom_text(aes(label=round(Promedio,2)),
vjust=-0.9,
color="black",
hjust=0.5,
# define text position and size
position = position_dodge(0.9),
angle=0,
size=3.0
)+
facet_wrap(~"Ingreso promedio por sexo en el cargo")+
ylab("Porcentaje")+
xlab("Sexo")