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))

Histograma: Gráfico de distribución

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)

Bar-plot: Gráfico de barras

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)) 

Box-Plot: Gráfico de cajas o de bigotes

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")

Scatter-plot: Gráfico de puntos

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)