Visualización de datos en Julia: Plots.jl, Makie y CairoMakie en 2026

El ecosistema de visualización de Julia tiene más opciones que otros lenguajes, lo que puede despistar al principio. La buena noticia es que los casos de uso están bastante bien delimitados: Plots.jl para exploración rápida y scripts, Makie.jl para gráficos de mayor calidad o más interactivos, y dentro de Makie, el backend depende de lo que necesites hacer.

Plots.jl: el frontend unificado

Plots.jl no dibuja directamente: actúa de frontend que envía las órdenes a un backend intercambiable. Puedes cambiar entre GR, PyPlot o Plotly sin cambiar el código de los gráficos.

using Plots

# Cambiar backend (GR es el por defecto, más rápido)
gr()       # backend GR
# plotly()   # backend Plotly (interactivo en el navegador)
# pyplot()   # backend PyPlot (requiere matplotlib)

# Gráfico de líneas básico
x = range(0, 2*pi, length=200)
y = sin.(x)
plot(x, y, label="sin(x)", color=:blue, linewidth=2, xlabel="x", ylabel="y")

# Añadir otra serie al mismo gráfico
plot!(x, cos.(x), label="cos(x)", color=:red, linestyle=:dash)

# Scatter plot
scatter(rand(50), rand(50), markersize=5, color=:green, label="puntos")

# Histograma
datos = randn(1000)
histogram(datos, bins=30, label="distribución normal", alpha=0.7)

# Heatmap
M = rand(10, 10)
heatmap(M, color=:viridis, title="Mapa de calor")

Subplots y layouts

# Layout 2x2
p1 = plot(x, sin.(x), title="Seno")
p2 = plot(x, cos.(x), title="Coseno")
p3 = scatter(rand(30), rand(30), title="Scatter")
p4 = histogram(randn(500), title="Histograma")

plot(p1, p2, p3, p4, layout=(2,2), size=(800, 600))

# Guardar a fichero
savefig("grafico.png")
savefig("grafico.pdf")  # también SVG, HTML con Plotly

Makie.jl: más potente y moderno

Makie.jl es una librería de visualización propia de Julia, sin dependencias de Python. Tiene tres backends principales según el uso:

  • CairoMakie: figuras estáticas de alta calidad para publicaciones. PDF, SVG y PNG perfectos.
  • GLMakie: ventana interactiva nativa con OpenGL. Arrastrar, zoom, rotación 3D en tiempo real.
  • WGLMakie: interactividad en el navegador o en Jupyter/Pluto notebooks.
using CairoMakie

# Figura básica con CairoMakie
fig = Figure(resolution=(800, 500))
ax  = Axis(fig[1, 1], xlabel="x", ylabel="y", title="Función cuadrática")

x = range(-3, 3, length=200)
lines!(ax, x, x.^2, color=:blue, linewidth=2, label="x²")
lines!(ax, x, x.^3, color=:red,  linewidth=2, label="x³")
axislegend(ax)

save("makie_plot.pdf", fig)
using GLMakie  # para interactividad en ventana nativa

# Gráfico 3D interactivo
x = y = range(-2, 2, length=50)
z = [sin(xi^2 + yi^2) for xi in x, yi in y]

fig = Figure()
ax  = Axis3(fig[1,1], title="Superficie 3D")
surface!(ax, x, y, z, colormap=:viridis)
display(fig)   # abre ventana interactiva

Observables: gráficos reactivos

Una de las características más potentes de Makie es el sistema de Observables, que permite hacer animaciones y controles interactivos de forma declarativa:

using GLMakie

# Observable: variable que al cambiar actualiza el gráfico
t = Observable(0.0)

# El gráfico se recalcula automáticamente cuando t cambia
y_signal = @lift sin.(range(0, 2*pi, length=200) .+ $t)
x_vals   = range(0, 2*pi, length=200)

fig = Figure()
ax  = Axis(fig[1,1])
lines!(ax, x_vals, y_signal)
display(fig)

# Animación: cambiar t 60 veces por segundo
record(fig, "animacion.mp4", 0:0.05:2*pi) do frame_t
    t[] = frame_t
end

Pluto.jl: notebooks reactivos

Aunque no es estrictamente visualización, Pluto.jl es donde muchos usuarios de Julia hacen sus exploraciones con gráficos. A diferencia de Jupyter, los notebooks de Pluto son reactivos: si cambias una celda, todas las celdas que dependen de ella se recalculan automáticamente. Es parecido a Observable notebooks o a una hoja de cálculo con Julia.

# Para lanzar Pluto (desde el REPL de Julia)
using Pluto
Pluto.run()
# Abre el navegador en localhost:1234

Dentro de un notebook de Pluto puedes combinar cálculo numérico, DataFrames.jl y gráficos de Makie. Los sliders y controles interactivos de WGLMakie funcionan directamente en el navegador, sin necesitar JavaScript adicional.

La elección entre Plots.jl y Makie depende del workflow. Para exploración rápida en el REPL, Plots.jl arranca antes y la API es más concisa. Para figuras publicables o visualizaciones interactivas con animaciones, Makie da más control sobre cada aspecto visual. En cualquier caso, ambas integran bien con el ecosistema de ciencia de datos en Julia, incluyendo el trabajo con arrays y matrices que vimos antes.

Imagen: Pexels / Daniil Komov

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP