La visualización de datos es una herramienta fundamental para explorar, analizar y comunicar información de forma clara y efectiva. Un buen gráfico no sólo resume datos complejos, sino que también facilita la identificación de patrones, la comparación entre grupos, la detección de valores atípicos y la transmisión de resultados de manera accesible y convincente.

¿Por qué es importante la visualización?

  • Facilita la comprensión: las representaciones visuales permiten simplificar y sintetizar información compleja.
  • Destaca relaciones: como asociaciones, tendencias o diferencias relevantes entre categorías o variables.
  • Permite detectar valores atípicos: como valores extremos, inconsistencias o anomalías en los datos.
  • Potencia la comunicación: las decisiones sustentadas en datos se vuelven más comprensibles y persuasivas cuando se apoyan en gráficos bien construidos.

La importancia de elegir el gráfico adecuado

La elección del tipo de gráfico a utilizar para representar los datos debe responder a dos criterios fundamentales: el tipo de variable que se quiere mostrar y el objetivo del análisis. Seleccionar el gráfico adecuado permite representar los datos con mayor fidelidad, evitando distorsiones y facilitando su interpretación. En la tabla siguiente se presentan algunos de los gráficos más utilizados, según el tipo de variable y el propósito del análisis:

Tipo de variable Objetivo Gráfico
Cualitativa Comparar las frecuencias de cada clase o intervalo De barras
Pictograma
Mostrar composición de un total De torta/sectores circulares
Cuantitativa continua Comparar las frecuencias de cada clase o intervalo Histograma
Polígono de frecuencias
Pictograma
Mostrar evolución en el tiempo De líneas
Mostrar forma de la distribución Boxplot
Histograma en escala de densidad
De densidad
Mostrar frecuencia acumulada Ojiva
Mostrar la variabilidad de la distribución Diagrama de barra y error
Mostrar relación entre dos variables De dispersión
Cuantitativa discreta Comparar las frecuencias de cada clase o intervalo De bastones
Polígono de frecuencias
Pictograma
Mostrar evolución en el tiempo De líneas
Mostrar forma de la distribución Boxplot
Mostrar frecuencia acumulada Ojiva
Mostrar la variabilidad de la distribución Diagrama de barra y error
Mostrar relación entre dos variables De dispersión

Se puede explorar muchas más opciones de gráficos en R Graph Gallery.

El diseño también comunica

Además del tipo de gráfico, el diseño visual juega un papel clave en la efectividad de una visualización:

  • El uso de los colores debe ser intencional: permite distinguir categorías, resaltar tendencias o destacar elementos relevantes. Los colores correctos hacen que tus gráficos destaquen, y ayudan a que más personas comprendan la información representada. Debe evitarse el uso excesivo o combinaciones con bajo contraste.

  • Claridad y simplicidad: es recomendable utilizar gráficos que presenten una sola variable por vez, o a lo sumo dos, para facilitar la comprensión. Además, se deben incluir únicamente las etiquetas o textos estrictamente necesarios, evitando sobrecargar la visualización con elementos que distraigan o generen confusión.

Una buena visualización requiere decisiones sobre qué mostrar, cómo mostrarlo y cómo hacerlo visualmente atractivo y comprensible.


Gráficos en R

En esta sección vamos a ver cómo construir los gráficos más utilizados.

Seteo el directorio y cargo los datos

setwd("~/CursoR_docentes")

library(readxl)
datos_excel <- read_excel("datos_excel.xlsx", #Ruta del archivo
                          sheet = 1)    #Puedo elegir una hoja específica

serie <- read_excel("serie.xlsx")    

library(tidyverse) 
# Eliminamos filas que tengan NA en cualquier variable
datos <- datos_excel %>% 
  drop_na()
#chequeamos si hay NA
colSums(is.na(datos))
##        Nombre_Fondo          Tipo_Fondo       Activos_Netos Rentabilidad_5_Años 
##                   0                   0                   0                   0 
##        Ratio_Gastos Ranking_Morningstar 
##                   0                   0

Gráficas simples con R base

# Gráfico de barras para variable cualitativa
tabla <- table(datos$Tipo_Fondo)
barplot(tabla, main = "Gráfico de barras", xlab="Tipo de fondo")

# Histograma para variable cuantitativa continua
hist(datos$Activos_Netos, main = "Histograma", xlab="Activos Netos")

# Boxplot para comparar distribución
boxplot(datos$Activos_Netos, main = "Boxplot", xlab="Activos Netos")

# Diagrama de dispersión entre dos variables numéricas
plot(datos$Activos_Netos, datos$Rentabilidad_5_Años,
     main = "Diagrama de dispersión",
     xlab = "Activos Netos", ylab = "Rentabilidad a 5 años")

# Gráfico de líneas para evolución temporal
plot(serie$periodo, serie$cantidad, type = "l", main = "Gráfico de líneas", xlab = "Años", ylab = "Cantidad")

# Gráfico de densidad
plot(density(datos$Rentabilidad_5_Años), main="Distribución de la rentabilidad",  xlab = "Rentabilidad a 5 años", ylab = "Densidad")

Gráficas con ggplot2

library(ggplot2)

# Gráfico de barras
ggplot(data = datos, aes(x = Tipo_Fondo)) +
  geom_bar() +
  labs(title = "Gráfico de barra", x = "Tipo de fondo", y = "Frecuencia")

# Histograma
ggplot(data = datos, aes(x = Activos_Netos)) +
  geom_histogram(bins = 8, color = "white", boundary = 0) +
  labs(title = "Histograma", x = "Activos Netos", y = "Frecuencia")

# Boxplot
ggplot(data = datos, aes(x = "", y = Activos_Netos)) +
  geom_boxplot() +
  labs(title = "Boxplot", x = "", y = "Activos Netos")

# Gráfico de dispersión entre dos variables numéricas
ggplot(data = datos, aes(x = Activos_Netos, y = Rentabilidad_5_Años)) +
  geom_point() +
  labs(title = "Diagrama de Dispersión", x = "Activos Netos", y = "Rentabilidad a 5 años")

# Gráfico de líneas
ggplot(data = serie, aes(x = periodo, y = cantidad)) +
  geom_line() +
  scale_x_continuous(breaks = unique(serie$periodo)) +
  labs(title = "Evolución temporal", x = "Años", y = "Cantidad")

# Gráfico de densidad 
ggplot(data = datos, aes(x = Rentabilidad_5_Años)) +
  geom_density(fill="red", alpha=0.5) +
  labs(title = "Distribución de la rentabilidad", x = "Rentabilidad a 5 años", y = "Densidad")

Gráficas interactivas con plotly

library(plotly)

# Gráfico interactivo de barras
p1 <- ggplot(data = datos, aes(x = Tipo_Fondo)) +
  geom_bar() +
  labs(title = "Gráfico de barra", x = "Tipo de fondo", y = "Frecuencia")
ggplotly(p1)
# Gráfico interactivo a partir de ggplot2
p2 <- ggplot(data = datos, aes(x = Activos_Netos, y = Rentabilidad_5_Años)) +
  geom_point() +
  labs(title = "Diagrama de Dispersión", x = "Activos Netos", y = "Rentabilidad a 5 años")
ggplotly(p2)
# Gráfico interactivo con plot_ly 
plot_ly(data = datos,
        x = ~Activos_Netos,
        y = ~Rentabilidad_5_Años,
        type = "scatter",
        mode = "markers") %>% 
  layout(title = "Diagrama de dispersión",
         scene = list(
           xaxis = list(title = "Activos Netos"),
           yaxis = list(title = "Rentabilidad 5 años")
         ))
# Gráfico 3D de dispersión coloreado por una variable cualitativa
plot_ly(data = datos,
        x = ~Activos_Netos,
        y = ~Rentabilidad_5_Años,
        z = ~Ratio_Gastos,
        color = ~Tipo_Fondo,
        type = "scatter3d",
        mode = "markers") %>%
  layout(title = "Diagrama de dispersión 3D",
         scene = list(
           xaxis = list(title = "Activos Netos"),
           yaxis = list(title = "Rentabilidad 5 años"),
           zaxis = list(title = "Ratio de Gastos")
         ))

Personalización en ggplot2 y plotly

Además de elegir el tipo de gráfico, la personalización permite mejorar la claridad, el atractivo y la utilidad del gráfico. Veamos algunas de las opciones más utilizadas:

1. Usar los temas predeterminados con la función theme() para mejorar la estética general

ggplot(data = datos, aes(x = Tipo_Fondo, y = Activos_Netos)) +
  geom_boxplot() +
  labs(title = "Boxplot con tema minimal", x = "Tipo de fondo", y = "Activos Netos") +
  theme_minimal()

ggplot(data = datos, aes(x = Tipo_Fondo, y = Activos_Netos)) +
  geom_boxplot() +
  labs(title = "Boxplot con tema dark", x = "Tipo de fondo", y = "Activos Netos") +
  theme_dark()

2. Etiquetas de datos y anotaciones usando el paquete ggrepel

library(ggrepel)

ggplot(data = datos, aes(x = Activos_Netos, y = Rentabilidad_5_Años, color = Tipo_Fondo)) +
  geom_point() +
  geom_text_repel(aes(label = Nombre_Fondo), size = 3, max.overlaps = 10) +
  labs(title = "Fondos destacados", x = "Activos Netos", y = "Rentabilidad a 5 años") +
  theme(legend.position = "bottom")

3. Escalas de colores predeterminadas con la función scale()

ggplot(data = datos, aes(x = Rentabilidad_5_Años, fill = Tipo_Fondo)) +
  geom_density(alpha = 0.6) +
  scale_fill_brewer(palette = "Set2") +
  scale_color_brewer(palette = "Set2") +
  labs(title = "Diagrama de densidad con paleta Set2", x = "Rentabilidad", y = "Densidad") +
  theme(legend.position = "bottom")

4. Uso de facetas para comparar subgrupos con la función facet_grid() o facte_wrap()

ggplot(data = datos, aes(x = Activos_Netos, y = Rentabilidad_5_Años)) +
  geom_point() +
  facet_grid(~Tipo_Fondo)+
  labs(title = "Diagrama de Dispersión", x = "Activos Netos", y = "Rentabilidad a 5 años")

5. Mostrar más de una variable en el mismo gráfico

# Boxplot de una variable cuantitativa en función de una cualitativa
ggplot(data = datos, aes(x = Tipo_Fondo, y = Activos_Netos)) +
  geom_boxplot() +
  labs(title = "Boxplot de Activos Netos por Tipo de Fondo", x = "Tipo de fondo", y = "Activos Netos")

# Gráfico de dispersión entre dos variables numéricas coloreado por una variable cualitativa
ggplot(data = datos, aes(x = Activos_Netos, y = Rentabilidad_5_Años, col=Tipo_Fondo)) +
  geom_point() +
  labs(title = "Diagrama de Dispersión", x = "Activos Netos", y = "Rentabilidad a 5 años")

# Gráfico de densidad de una variable cuantitativa en función de una cualitativa
ggplot(data = datos, aes(x = Rentabilidad_5_Años, fill = Tipo_Fondo, color = Tipo_Fondo)) +
  geom_density(alpha = 0.5) +
  labs(title = "Distribución de la rentabilidad según Tipo de Fondo",
    x = "Rentabilidad a 5 años",
    y = "Densidad"
  )

6. Presentar dos gráficos juntos

library(patchwork)
# Histograma
histograma <- ggplot(data = datos, aes(x = Activos_Netos)) +
  geom_histogram(bins = 8, color = "white", boundary = 0) +
  labs(title = "Histograma", x = "Activos Netos", y = "Frecuencia")

# Boxplot
boxplot <- ggplot(data = datos, aes(x = "", y = Activos_Netos)) +
  geom_boxplot() +
  labs(title = "Boxplot", x = "", y = "Activos Netos")

histograma+boxplot