Tipos de gráficos

Las gráficas que se usen va a depender de los tipos de variables (numéricas o categóricas) que deseemos representar. Las más usadas son:

Importación de librerias

library(ggplot2)

Importar dataset

df <- read.csv(file = 'data/df_random.csv', sep = ',')
head(df, 3)
  col1 col2 col3 col4   col5    col6
1 19.9 19.6 18.2 1976 Tipo 3 Clase C
2 20.2 20.3 18.6 1977 Tipo 1 Clase A
3 20.2 19.4 18.4 1978 Tipo 2 Clase D

1. Datos numéricos

a. Histogramas

El histograma nos muestra la distribucion de los datos de una variable numérica agrupados en rangos equidistantes.

Por ejemplo, para el atributo col1:

head(df[1], n=3)
  col1
1 19.9
2 20.2
3 20.2
ggplot() +
  geom_histogram(data = df,
                 aes(x = col1),
                 binwidth = 1,
                 color = "black")

La orientación de la barras se cambia a horizontal agregando la capa coord_flip()

ggplot() +
  geom_histogram(data = df,
                 aes(x = col1),
                 binwidth = 1,
                 color = "black") +
  coord_flip()

b. Lineas

El gráfico de Linea nos ayuda a ver la variación de un dato a lo largo del tiempo.

Por ejemplo, para los atributo col1 y col4:

head(df[c(1,4)], n=3)
  col1 col4
1 19.9 1976
2 20.2 1977
3 20.2 1978
ggplot() +
  geom_line(data = df,
            aes(x = col4, y = col1))

Personalizando el tipo de linea

ggplot() +
  geom_line(data = df,
            aes(x = col4, y = col1),
            color = "blue",
            lwd = 0.8,
            arrow=arrow())

Podemos agregar más variables continuas (col1, col2, col3) para compararlas entre si:

head(df[c(1,2,3,4)], n=3)
  col1 col2 col3 col4
1 19.9 19.6 18.2 1976
2 20.2 20.3 18.6 1977
3 20.2 19.4 18.4 1978
ggplot() +
  geom_line(data = df,
            aes(x = col4, y = col1),
            color = "blue") +
  geom_line(data = df,
            aes(x = col4, y = col2),
            color = "green") +            
  geom_line(data = df,
            aes(x = col4, y = col3),
            color = "red")

c. Dispersión

Las gráficas de dispersión permiten comparar dos variables numéricas para visualizar algun tipo de correlación entre ellas.

head(df[c(1,2)], n=3)
  col1 col2
1 19.9 19.6
2 20.2 20.3
3 20.2 19.4
ggplot() +
  geom_point(data = df,
             aes(x = col1, y = col2))

Agregando una linea para observar la tendencia entre las variables.

ggplot(data = df, aes(x = col1, y = col2)) +
  geom_point() +
  geom_smooth(method = "lm", color ="red",formula =  y ~ x)

2. Datos categóricos

a. Barras

La gráfica de barras nos muestra la frecuencia con que se presentan los elementos de una variable categórica.

Para una variable categórica:

head(df[6], n=3)
     col6
1 Clase C
2 Clase A
3 Clase D
ggplot() +
  geom_bar(data = df,
           aes(x = col6, fill = col6))

Para dos variables categóricas:

head(df[c(5,6)], n=3)
    col5    col6
1 Tipo 3 Clase C
2 Tipo 1 Clase A
3 Tipo 2 Clase D
ggplot() +
  geom_bar(data = df,
           aes(x = col6, fill = col5))

Podemos separar ambas categorías para que se muestren en columnas independientes.

ggplot() +
  geom_bar(data = df,
           aes(x = col6, fill = col5),
           position = "dodge")

Si se quiere mostrar el valor de la cuenta en cada colunma, se tiene que modificar el dataframe.

# Extraer variables categoricas
df2 <- df[6]

# Conteo de elementos
df2 <- as.data.frame(table(df2))
df2
     col6 Freq
1 Clase A   16
2 Clase B   12
3 Clase C    9
4 Clase D   13
ggplot(data = df2, aes(x = col6, y = Freq, fill = col6)) +
  geom_bar(stat="identity") +
  geom_text(aes(x = col6, y = Freq, label = Freq),
            position = position_stack(vjust = 0.5),
            size = 4)

Lo mismo para dos variables categoricas.

# Extraer variables categoricas
df2 <- df[c(6,5)]

# Conteo de elementos
df2 <- as.data.frame(table(df2))
head(df2, n=3)
     col6   col5 Freq
1 Clase A Tipo 1    5
2 Clase B Tipo 1    7
3 Clase C Tipo 1    3
ggplot(data = df2, aes(fill = col5, x = col6, y = Freq)) +
  geom_bar(stat="identity") +
  geom_text(aes(x = col6, y = Freq, label = Freq),
            position = position_stack(vjust = 0.5),
            size = 4)

b. Pie

Un diagrama tipo Pie es una forma alternativa del diagrama de barras para una variable categórica.

# Extraer la variable categorica
df2 <- df[6]

# Conteo de elementos
df2 <- as.data.frame(table(df2))
df2
     col6 Freq
1 Clase A   16
2 Clase B   12
3 Clase C    9
4 Clase D   13
ggplot(df2, aes(x = Freq, y = "", fill = col6)) +
  geom_col(color = "black") +
  coord_polar(theta = "x") +
  geom_text(aes(label = Freq),
            position = position_stack(vjust = 0.5)) +
  theme_void()

3. Datos mixtos

a. Boxplot

El diagrama de caja o Boxplot muestra como estan distribuidos los datos numéricos a traves de la interpretacion de 5 parámetros estadísticos:

  • Valor mínimo
  • Primer quartil
  • Mediana
  • Tercer quartil
  • Valor máximo

Por ejemplo, para el atributo col1

head(df[1], n=3)
  col1
1 19.9
2 20.2
3 20.2

Sus estadisticas seran:

summary(df$col1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  17.90   18.93   19.70   19.75   20.20   22.40 
  • Valor mínimo: 17.9
  • Primer quartil: 18.93
  • Mediana: 19.70
  • Tercer quartil: 20.20
  • Valor máximo: 22.40
ggplot() +
  geom_boxplot(data = df, aes(y = col1))

La gráfica anterior se interpreta del siguiente modo:

lbl <- data.frame(stat_x = c(0.2, 0.2, 0.2, 0.2, 0.2),
                  stat_y = c(17.9, 18.93, 19.70, 20.20, 22.40),
                  stat_lbl = c("Mínimo = 17.9", "1er quartil = 18.93",
                               "Mediana = 19.7", "3er Quartil = 20.20",
                               "Máximo = 22.40"))

ggplot() +
  geom_boxplot(data = df, aes(y = col1)) +
  geom_jitter(data = df,
              aes(x = 0, y = col1),
              color = 'green') +
  geom_label(data = lbl,
             aes(x = stat_x, y = stat_y, label = stat_lbl),
             size = 4,
             color = "blue",
             fontface = "bold",
             fill = "white")

El Boxplot para cada clase será:

head(df[c(1,6)], n=3)
  col1    col6
1 19.9 Clase C
2 20.2 Clase A
3 20.2 Clase D
ggplot() +
  geom_boxplot(data = df,
               aes(x = col6, y = col1, fill = col6))

ggplot() +
  geom_boxplot(data = df,
               aes(x = col6, y = col1, fill = col6)) +
  geom_jitter(data = df,
              aes(x = col6, y = col1),
              width = 0.2,
              color = 'blue')

b. Violin

En el gráfico tipo Violin (similar al Boxplot) se representan parámetros estadísticos en función de la variación del ancho de sus bordes.

head(df[c(6,1)], n=3)
     col6 col1
1 Clase C 19.9
2 Clase A 20.2
3 Clase D 20.2
ggplot() +
  geom_violin(data = df,
              aes(x = col6, y = col1, fill = col6))

ggplot() +
  geom_violin(data = df,
              aes(x = col6, y = col1, fill = col6)) +
  geom_jitter(data = df,
              aes(x = col6, y = col1),
              width = 0.2,
              color = 'blue')

c. Barras

La gráfica de barras tambien puede emplearse para conocer la distribucion de los elementos de una variable numérica respecto a una categórica.

Por ejemplo, la variable numérica col1 esta presente en las diferentes clases de col6

head(df[c(6, 1)], n=3)
     col6 col1
1 Clase C 19.9
2 Clase A 20.2
3 Clase D 20.2

Antes de generar el gráfico se realiza un conteo de col1 por cada clase del col6

df2 <- df[c(6, 1)]
df2 <- aggregate(col1 ~ col6, df2, sum)
df2
     col6  col1
1 Clase A 309.2
2 Clase B 234.8
3 Clase C 179.8
4 Clase D 263.6
ggplot(data = df2, aes(x = col6, y = col1, fill = col6)) +
  geom_bar(stat = "identity") +
  geom_text(aes(x = col6, y = col1, label = col1),
            position = position_stack(vjust = 0.5),
            size = 4)

Tambien se puede realizar el conteo respecto a dos variables categóricas.

head(df[c(5, 6, 1)], n=3)
    col5    col6 col1
1 Tipo 3 Clase C 19.9
2 Tipo 1 Clase A 20.2
3 Tipo 2 Clase D 20.2
# Extraer la variable categorica
df2 <- df[c(5, 6, 1)]
df2 <- aggregate(col1 ~ ., df2, sum)
head(df2, n=3)
    col5    col6  col1
1 Tipo 1 Clase A  99.1
2 Tipo 2 Clase A 116.8
3 Tipo 3 Clase A  93.3
ggplot(data = df2, aes(x = col6, y = col1, fill = col5)) +
  geom_bar(stat = "identity") +
  geom_text(aes(x = col6, y = col1, label = col1),
            position = position_stack(vjust = 0.5),
            size = 4)

Back to top