BASE1<-read.csv("futbol.csv",sep=",",encoding = "latin1")
#Base delimitada al Bacelona
BASE1a<-subset(BASE1,squad=="Barcelona")
BASE2<-read.csv("paises.csv",sep=";")
#Delimitar a Centro América y sus IDH
BASE2<-BASE2[c(22,41,71,74,129,137,157),c(1,19:24,6)]4 Gráficos de variables cuantitativas o estadísticos de una variable, según niveles de variables cualitativas
En este capítulo se presentan varios gráficos que se utilizan para presentar los datos de variables cuantitativas asociados a variables cualitativas, por ejemplo, la edad de una persona en función del nombre de esta.
Estos gráficos también funcionan para presentar información resumida de un conjunto de datos, en la cual se se presenta un estadístico de una variable, en función de las categorías de variables cualitativas; por ejemplo, la cantidad de personas que seleccionó un candidato en una encuesta, en función del nombre de esta persona.
Al igual que en los otros capítulos se utilizará la información de las bases Países y Fútbol.
4.1 El paquete ggplot
En R existen varias formas de construir gráficos, una de las más completas es utilizar el paquete ggplot. Para utilizar este paquete se requiere descargarlo una única vez y cargarlo cada vez que se abra R. Además, se van a descargar otros paquetes con herramientas útiles para la graficación.
install.packages(c("ggplot2","RColorBrewer", "plyr","forcats"))library(ggplot2) #Gráficos
library(RColorBrewer) #Colores de los gráficos
library(plyr) #arrange()
library(forcats) #fct_rev()La función ggplot utiliza como argumento principal una base de datos resumen. En el caso de una variable cuantitativa, versus una variable cualitativa, solo se rquiere una base que contenga las dos columnas de interés. Por ejemplo, si se quieren graficar los goles de los 5 máximos goleadores del Barcelona, se ocupa una base de datos con los nombres de estos jugadores y sus goles.
## Limitar la base a los 5 jugadores con más goles
df1<-arrange(BASE1a, desc(goals)) # ordenamiento descendente
df1<-df1[1:5,]
## Fijar el orden de los valores de la variable cuali, para que ggplot no
## acomode por orden alfabético
df1$player <- factor(df1$player, levels=df1$player)
df1[, c(1,9)] player games
1 Lionel Messi 33
2 Luis Suárez 28
3 Antoine Griezmann 35
4 Arturo Vidal 33
5 Ansu Fati 24
Por otro lado, si se quieren graficar los goles por posición y equipo, se ocupa una base de datos con columnas para equipo, posición y total de goles en cada combinación.
#Los datos que se usarán se transcribieron de la salida de
#F<-tapply(goals, list(position, squad), sum, na.rm=T) #Total
#prop.table(F, margin=2) #Porentaje
goles<-c(8,60,16,18,37,15)
porc<-c(9.5, 71.4, 19.1,25.7,52.9,21.4)
equipo<-c("B","B","B","RM","RM","RM")
posición<-factor(c("Def","Del","MC","Def","Del","MC"),
levels=c("Def","MC","Del"))
df2<-data.frame(equipo, posición, goles, porc)
df2 equipo posición goles porc
1 B Def 8 9.5
2 B Del 60 71.4
3 B MC 16 19.1
4 RM Def 18 25.7
5 RM Del 37 52.9
6 RM MC 15 21.4
En el caso de querer graficar los IDH de dos países, según años, se puede crear una base datos con los años, los IDH del país 1 y los IDH del país 2 (se podría aprovechar más el poder de ggplot creando una única columna con los IDH y creando otra columna con los países).
años<-2015:2021
IDH_BLZ<-as.numeric(BASE2[1,2:8])
IDH_CRI<-as.numeric(BASE2[2,2:8])
df3<-data.frame(años,IDH_CRI, IDH_BLZ)
df3 años IDH_CRI IDH_BLZ
1 2015 0.798 0.708
2 2016 0.803 0.712
3 2017 0.807 0.707
4 2018 0.811 0.706
5 2019 0.819 0.705
6 2020 0.816 0.690
7 2021 1.000 1.000
4.1.1 Sintaxis de ggplot
La sintaxis básica de ggplot es la siguiente
ggplot(data = , aes( x= , y= , fill= ) ) +
geom_line() + geom_point()+
labs(group= "",
x = "",
y = "",
title = "")+
scale_fill_brewer(palette="Paired")En la función ggplot inicial se especifica la base de datos y la lista de variables que se utilizarán, por medio de la función aes() (se pueden dejar varios campos sin especificar). La instrucción fill= indica los subgrupos dentro de cada nivel de la agrupación principal y/o el criterio que se va a utilizar para rellenar las figuras.
En la segunda línea se presentan los elementos geométricos del gráfico, los cuales pueden ser rectángulos, líneas y puntos, entre otros, los comandos para estas figuras son geom_col(), geom_line(), geom_point(). Nótese que los comandos son funciones, lo cual permite que se puedan especificar muchos elementos sobre estas figuras como el color (color= ), relleno (fill=), variable a graficar (aes(y= ), en el caso de no haber esepcificado y en la función inicial ggplot).
En las otras líneas se pueden agregar filas opcionales, para especificar títulos, dimensiones de los ejes, escala de colores, tipo de fondo del gráfico, entre otros. Todas las opciones se encadenan a la función principal ggplot(), por medio de símbolos de suma.
Con respecto a la paleta de colores, en esta sección se utilizará la paleta Paired del paquete RColorBrewer, cuya secuencia de colores es
par(mar=c(10,1,10,1))
display.brewer.pal(8,"Paired")
brewer.pal(n = 8, name = "Paired")[1] "#A6CEE3" "#1F78B4" "#B2DF8A" "#33A02C" "#FB9A99" "#E31A1C" "#FDBF6F"
[8] "#FF7F00"
Las demás paletas de colores de esta librería se pueden ver en la página https://earlglynn.github.io/RNotes/package/RColorBrewer/index.html
4.2 Gráfico de barras
4.2.1 Gráfico de barras horizontales
Se utiliza cuando la variable de contraste es una variable cualitativa nominal. En este gráfico se suelen ordenar las barras descendentemente en función de los valores de la variable cuantitativa.
ggplot(data = df1, aes( x=goals, y=fct_rev(player)) ) + ##fct_rev
geom_col(fill="#1F78B4") +
labs(
x = "Goles",
y = "Jugador",
title = "Cantidad de goles del FC Barcelona, según jugador. 2019-2020.")+
theme(panel.background = element_rect(fill='transparent', color="black"))
4.2.2 Gráfico de barras verticales
Se utiliza cuando la variable de contraste es una variable cualitativa ordinal. En este gráfico se debe respetar el orden de la variable cualitativa ordinal.
estudiantes<-c(120, 89, 71, 56, 35)
niv<-c("7°","8°","9°","10°","11°")
niveles<-factor(niv, levels=niv)
df<-data.frame(niveles, estudiantes)
df niveles estudiantes
1 7° 120
2 8° 89
3 9° 71
4 10° 56
5 11° 35
ggplot(data = df, aes( y=estudiantes, x=niveles) ) +
geom_col(fill="#1F78B4") +
labs(x = "Niveles",
y = "Cantidad de estudiantes",
title = "Cantidad de estudiantes del colegio John Doe, según nivel. 2010.")+
theme(panel.background = element_rect(fill='transparent', color="black"))
4.2.3 Gráfico de barras comparativas
El objetivo de este gráfico es presentar los valores de una variable en los subgrupos que conforman los grupos principales. Esta presentación permite comparar la variable entre subgrupos del mismo grupo y de los otros grupos.
La orientación de las barras en este gráfico y en los siguientes dependerá de la facilidad de presentación de la información. Si hay pocos grupos principales se pueden utilizar barras verticales, ya que las etiquetas de los ejes se podrán escribir con claridad; si hay muchos grupos principales, lo mejor es utilizar una orientación horizontal.
ggplot(data = df2, aes( x=equipo, y=goles, fill=posición) ) +
geom_col(position=position_dodge()) +
labs(fill= "Posición",
x = "Equipo",
y = "Goles",
title = c("Cantidad de goles del FC Barcelona y el Real Madrid,\nsegún posición. 2019-2020."))+
scale_fill_brewer(palette="Paired")+
scale_x_discrete(labels=c("B" = "Barcelona", "RM" = "Real Madrid"))+
theme(panel.background = element_rect(fill='transparent', color="black"))
4.2.4 Gráfico de barras apiladas
El objetivo de este gráfico es presentar los valores de una variable en los grupos principales y en los subgrupos que la conforman. Esta presentación permite comparar la variable entre grupos y realizar comparaciones aproximadas entre los subgrupos.
ggplot(data = df2, aes( x=equipo, y=goles, fill=fct_rev(posición)) ) +
geom_col( width=0.5) +
labs(fill= "Posición",
x = "Equipo",
y = "Goles",
title = c("Cantidad de goles del FC Barcelona y el Real Madrid,\nsegún posición. 2019-2020."))+
scale_x_discrete(labels=c("B" = "Barcelona", "RM" = "Real Madrid"))+
scale_fill_brewer(palette="Paired")+
theme(panel.background = element_rect(fill='transparent', color="black"))
4.2.5 Gráfico de barras 100%
ggplot(data = df2, aes( x=equipo, y=porc, fill=fct_rev(posición)) ) +
geom_col( width=0.5) +
labs(fill= "Posición",
x = "Equipo",
y = "Porcentaje",
title = c("Porcentaje de goles del FC Barcelona y el Real Madrid,\nsegún posición. 2019-2020."))+
scale_x_discrete(labels=c("B" = "Barcelona", "RM" = "Real Madrid"))+
scale_fill_brewer(palette="Paired")+
theme(panel.background = element_rect(fill='transparent', color="black"))
4.3 Gráfico de pastel
ggplot(data = df1, aes( x="", y=goals, fill=player) ) +
geom_col()+ coord_polar(theta="y",direction = -1)+theme_void()+
labs(fill= "Jugador",
title = c("Goles de los máximos goleadores. Barcelona 2019-2020."))+
scale_fill_brewer(palette="Paired")+
geom_text(aes(label = goals),
position = position_stack(vjust = 0.5))+
theme(panel.background = element_rect(fill='transparent', color="black"))
4.4 Gráfico lineal
ggplot(data = df3, aes( y=IDH_BLZ, x=años) ) +
geom_line(colour="#1F78B4") + geom_point(colour="#1F78B4")+
labs(size= "",
x = "Años",
y = "IDH",
title = "Índice de Desarrollo Humano de Belice. 2015-2021.")+
ylim(0,1)+
theme(panel.background = element_rect(fill='transparent', color="black"))
ggplot(data = df3, aes( x=años) ) +
geom_line(aes(y=IDH_BLZ)) + geom_point(aes(y=IDH_BLZ))+
geom_line(aes(y=IDH_CRI),colour="#1F78B4") + geom_point(aes(y=IDH_CRI),colour="#1F78B4")+
labs(group= "País",
x = "Años",
y = "IDH",
title = "Índice de Desarrollo Humano de Belice y Costa Rica. 2015-2021.")+
ylim(0,1)+
theme(panel.background = element_rect(fill='transparent', color="black"))