Skip to content

R ggplot2 Guía Rápida: Recetas Rápidas para Gráficos Confiables

Problema

A los analistas les cuesta producir gráficos consistentes en R cuando los plazos son ajustados. Cambiar entre geoms, escalas y temas sin una plantilla lleva a visualizaciones ruidosas y a correcciones repetidas.

Agitación

Estéticas mal ubicadas, leyendas olvidadas y escalas de color desajustadas crean gráficos que engañan a las partes interesadas. Se pierde tiempo ajustando valores por defecto en lugar de enfocarse en la señal.

Solución

Utiliza un conjunto compacto de recetas de ggplot2 que mantengan las estéticas explícitas, separen los mapeos de las configuraciones fijas y apliquen un tema limpio. Los patrones siguientes cubren los tipos de gráficos más solicitados y cómo usar facetas para comparaciones.

Dispersión: relaciones y líneas de tendencia

library(ggplot2)
 
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
  geom_point(size = 3, alpha = 0.8) +
  geom_smooth(method = "lm", se = FALSE, linewidth = 0.8) +
  labs(color = "Cylinders", x = "Weight", y = "MPG") +
  theme_minimal()

Línea: series temporales o categorías ordenadas

ggplot(economics, aes(x = date, y = unemploy)) +
  geom_line(color = "#1f77b4", linewidth = 1) +
  labs(x = "Date", y = "Unemployment") +
  scale_x_date(date_breaks = "2 years", date_labels = "%Y") +
  theme_minimal()

Barras: conteos o totales

ggplot(diamonds, aes(x = cut, fill = cut)) +
  geom_bar(width = 0.7, color = "white") +
  labs(x = "Cut", y = "Count") +
  theme_minimal() +
  theme(legend.position = "none")

Cajas y violín: comparación de distribuciones

ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species)) +
  geom_violin(alpha = 0.4, color = NA) +
  geom_boxplot(width = 0.18, outlier.shape = NA, alpha = 0.8) +
  labs(x = NULL, y = "Sepal Length") +
  theme_minimal() +
  theme(legend.position = "none")

Facetas para comparaciones rápidas

ggplot(diamonds, aes(carat, price, color = cut)) +
  geom_point(alpha = 0.4, size = 1.5) +
  facet_wrap(~ color) +
  labs(x = "Carat", y = "Price") +
  theme_light()

Geoms y mejores casos de uso

GeomTipo de datoMejor paraConsejo
geom_point()numérico vs numéricorelaciones, clústeresMapea color/forma a categorías; añade geom_smooth() para la tendencia.
geom_line()x ordenado, y numéricoseries temporales, secuenciasMantén una línea por grupo con group=; evita errores de ordenación.
geom_bar() (conteo) / geom_col() (pre-agregado)categóricoconteos o totalesUsa position = "fill" para porcentajes.
geom_boxplot()categórico vs numéricocomparar medianas/IQRCombínalo con coord_flip() para etiquetas largas.
geom_violin()categórico vs numéricoforma de la distribuciónCombínalo con boxplots para mostrar cuartiles.
geom_histogram()numérico únicodistribuciónDefine explícitamente bins o binwidth.

Estéticas vs. configuraciones fijas

  • Mapea datos dentro de aes(): aes(color = species).
  • Configura valores fijos fuera de aes(): geom_point(color = "steelblue").
  • Usa funciones scale_* para dar formato a valores y controlar paletas.

Lista de verificación de temas y etiquetado

  • Comienza con theme_minimal() o theme_light() para valores por defecto limpios.
  • Añade labs(title, subtitle, caption) para contexto; mantén ejes breves.
  • Oculta leyendas redundantes con theme(legend.position = "none") cuando los colores duplican facetas o etiquetas.
  • Para publicación, ajusta tamaños de fuente con theme(text = element_text(size = 12)).

Plantilla inicial

base_plot <- ggplot(data, aes(x = x_var, y = y_var)) +
  geom_point(color = "#4e79a7", alpha = 0.7) +
  labs(
    title = "Headline metric",
    x = "X axis",
    y = "Y axis",
    caption = "Source: internal data"
  ) +
  theme_minimal()

Guías relacionadas