Instalar los paquetes a utilizar
install.packages("ggplot2") ## Paquete para visualizar
install.packages("plotly") ## Paquete para visualizar de forma interactiva
install.packages('RColorBrewer') ## Paquete para colores
install.packages("janitor") ## Paquete para limpiar variables
install.packages("tidyverse") ## Paquete para trabajar datos
Cargar los paquetes a utilizar
library(data.table)
library(ggplot2)
library(janitor)
library(plotly)
library(RColorBrewer)
library(tidyverse)
Cargar bases de datos con las que trabajaremos en el laboratorio.
rm(list=ls())
fifa21 <- fread("fifa21_male2.csv", encoding = 'UTF-8')
fifa21 <- clean_names(fifa21) # Limpiar el nombre de las variables
Paquete de ggplot2
Comando para ejecutar la función ggplot.
ggplot()
Crear un sistema de coordenadas.
ggplot(data=fifa21,mapping = aes(x=age))
Se categoriza por un rango de valores dentro de la variable numérica
Podemos visualizar la distribución de las edades de los jugadores de futbol.
ggplot(fifa21,aes(age)) +
geom_histogram()
Vemos que tenemos un outlier, asi que vamos a filtrar para los jugadores menores a 50 años.
ggplot(fifa21[age<45],aes(age)) +
geom_histogram()
Utlizaremos un bindwidth más pequeño.
ggplot(fifa21[age<50],aes(age)) +
geom_histogram(bins = 100)
Mostrar cuántas observaciones tenemos dentro de una variable categórica
¿Cuántos jugadores tienen los equipos de Real Madrid, FC Bayern München, FC Barcelona, Atlético Madrid, Liverpool, Paris Saint-Germain?
equipos <- c("Real Madrid", "FC Bayern München", "FC Barcelona", "Atlético Madrid", "Liverpool", "Paris Saint-Germain")
equipos_data <- fifa21[club %in% equipos]
ggplot(equipos_data,aes(club)) + geom_bar()
¿Qué pasa si agregamos el eje y?
equipos <- equipos_data[,.N,by='club']
ggplot(equipos, aes(x=club,y=N))+
geom_bar(stat='identity')
ggplot(equipos, aes(x=club,y=N))+
geom_col()
¿Cuántos tienen la nacionalidad alemana, francesa, inglesa y española?
paises <- c("Germany","England", "Spain", "France")
equipos_data <- equipos_data[nationality %in% paises]
ggplot(equipos_data,aes(x=club, fill=nationality)) + geom_bar()
La información anterior se puede presentar de varias formas. El comando
position cambia la posición en el gráfico de las barras por la variable
dentro del fill, en este caso el Nationality.
ggplot(equipos_data,aes(x=club, fill=nationality)) + geom_bar(position = 'stack')
ggplot(equipos_data,aes(x=club, fill=nationality)) + geom_bar(position = 'dodge')
ggplot(equipos_data,aes(x=club, fill=nationality)) + geom_bar(position = 'fill')
Y si quiero elegir los colores (https://htmlcolorcodes.com/es/)
ggplot(equipos_data,aes(x=club, fill=nationality)) + geom_bar(position = "fill") + scale_fill_manual(values = c("#2ECC71", "#A569BD", "#C53212", "#117A65" ))
Los nombres de los club no se entienden y les vamos agregar titulo, subtitulo y fuente.
ggplot(equipos_data,aes(x=club, fill=nationality)) + geom_bar(position = "fill") + scale_fill_manual(values = c("#2ECC71", "#A569BD", "#C53212", "#117A65" )) + labs(x="Club de fútbol", y="Frecuencia", title = "Frecuencia de clubes", subtitle = "Por nacionalidad", caption = "Fuente: Kaggle" ) + theme(axis.text.x = element_text(angle=45, vjust=0.5))
Mostrar la distribución de los posibles valores que puede tomar una variable númerica
equipos_data[,wage2:= as.numeric(str_extract(wage, pattern = "[:digit:]+"))]
ggplot(equipos_data,aes(x=club, y=wage2)) + geom_boxplot()
Agregar etiquetas a los ejes, títulos y subtítulos al gráfico.
ggplot(equipos_data,aes(x=club, y=wage2, fill=club)) + geom_boxplot()+
labs(x="", y="Salario", title="Distribución de salario" , subtitle = "Por equipo", caption = "Fuente: Fifa 21 - Kaggle") +
theme(axis.text.x = element_blank()) +
scale_fill_discrete(name="Equipo")
Muestra el valor de dos variables numéricas o una numérica y otra categórica en un gráfico de dos dimensiones
Podemos ver la relación que existe entre la edad del jugador y el desempeño promedio del jugador.
ggplot(equipos_data,aes(x=age, y=ova)) + geom_point()
Podemos ver la misma relación con una linea.
ggplot(equipos_data,aes(x=age, y=ova)) + geom_point() + geom_smooth()
Diferenciados por colores en degrade
ggplot(equipos_data,aes(x=age, y=ova, color=ova)) + geom_point() + scale_color_gradient(low = "#FDEDEC", high = "#E74C3C")
Podemos ver la misma relación, pero diferenciando por club, eligiendo el
color de un paquete.
display.brewer.all(colorblindFriendly = TRUE)
ggplot(equipos_data,aes(x=age, y=ova, color=club)) + geom_point() + scale_color_brewer(palette='Paired')
Y ahora separando por nacionalidad.
ggplot(equipos_data,aes(x=age, y=ova, color=club)) + geom_point() + facet_wrap(facets = 'nationality')
Si queremos ver la relacion edad y valoración pero solo de los delanteros
| Abreviatura (ING) | Posición |
|---|---|
| GK | Portero |
| RWB | Carrilero Derecho |
| RB | Lateral Derecho |
| CB | Defensa Central |
| LF | Lateral Izquierdo |
| LWB | Carrilero Izquierdo |
| CDM | Medio Centro Defensivo |
| RM | Medio Derecho |
| CM | Medio Centro |
| LM | Medio Izquierdo |
| CAM | Medio Centro Ofensivo |
| RF | Segundo Delantero Derecho |
| CF | Media Punta |
| LF | Segundo Delantero Izquierdo |
| RW | Extremo Derecho |
| ST | Delantero Centro |
| LW | Extremo Izquierdo |
posiciones <- c("RW","ST","LW")
ggplot(fifa21[position %in% posiciones], aes(x=age, y=ova)) + geom_point()
Tenemos un jugador mayor a 50 años, podriamos saber quien es por el gráfico
edad_jugadores <- ggplot(fifa21[position %in% posiciones], aes(x=age, y=ova, text=paste("Nombre:",name, "\n","Posición:",position,"\n","Edad:",age,"\n", "Valoración promedio:",ova,"\n","Nacionalidad:",nationality ))) + geom_point(color="blue")
ggplotly(edad_jugadores, tooltip = "text")
Gráfico
library(ggthemes)
library(ggforce)
equipos_data[club %in% equipos & position != "GK"]
## Empty data.table (0 rows and 108 cols): id,name,age,ova,nationality,club...
plot <- ggplot(equipos_data,
aes(
y = age,
x = ova,
size = wage2,
colour = club,
fill = club
)) +
geom_point(alpha = 0.7,
shape = 21,
colour = "grey33") +
scale_size(
breaks = floor(seq(1, 600, length.out = 5)),
limits = c(1, 700),
range = c(2, 15),
labels = function(x) {
paste0("€", x, "K")
}
) +
labs(
x = "Rendimiento",
y = "Edad",
fill = "Equipos",
size = "Salario",
colour = "Equipos",
title = "FIFA20",
caption = "Kaggle"
) +
guides(fill = guide_legend(override.aes = list(size = 8)),
size = guide_legend(order = 1))
plot <- plot +theme(
axis.ticks = element_blank(),
axis.line = element_blank(),
legend.background = element_rect(),
legend.position = "bottom",
legend.direction = "horizontal",
legend.box = "vertical",
panel.grid = element_line(colour = NULL),
panel.grid.minor = element_blank(),
plot.title = element_text(
hjust = 0,
size = rel(1.5),
face = "bold"
),
plot.margin = unit(c(1,
1, 1, 1), "lines"),
strip.background = element_rect()
)
gris <- '#E1DCDB'
plot + theme(plot.background = element_rect(fill = gris))+
theme(legend.key = element_rect(fill = gris))+ theme(panel.background = element_rect(fill = gris),
plot.background = element_rect(fill = gris),
legend.background = element_rect(fill = gris))+
ylim (12, 40)