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.
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.
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.
En esta sección vamos a ver cómo construir los gráficos más utilizados.
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á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")
ggplot2library(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")
plotlylibrary(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")
))
ggplot2 y plotlyAdemá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:
theme() para mejorar la estética generalggplot(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()
ggrepellibrary(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")
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")
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")
# 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"
)
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