By [Your Name]
fig, ax, plt = poly(poly_coords, color = df.gdp_per_capita, colormap = :viridis, axis = (; aspect = DataAspect()))
using Statistics df.magnitude = coalesce.(df.magnitude, mean(skipmissing(df.magnitude))) This explicitness prevents the “swiss cheese map” phenomenon—where missing values create false gaps in your visualization. Matplotlib is a compass. ggplot2 is a sextant. Makie.jl is a satellite.
Makie is not a wrapper around C/C++ plotting libraries. It’s written entirely in Julia, uses GPU-accelerated rendering (via GLMakie or CairoMakie for publication), and supports interactive 3D scenes. using GLMakie, GeoJSON, ArchGDAL Load a GeoJSON of European regions geojson = GeoJSON.read("europe_regions.geojson") Assume df has columns: :region_name, :gdp_per_capita poly_coords = [feature.geometry for feature in geojson]
Unlike Python’s pyproj which incurs Python-C round-trip overhead, Proj4.jl transforms millions of coordinates in a tight loop without leaving native speed. Sometimes your data isn’t vector polygons but satellite imagery or climate model outputs. Enter GeoArrays.jl —a spatial array with embedded geotransform and CRS.
fig = Figure() ax1 = Axis(fig[1,1], title="Population Density") ax2 = Axis(fig[1,2], title="Seismic Risk") linkxaxes!(ax1, ax2) linkyaxes!(ax1, ax2) Add scale bar (manual) lines!(ax1, [0, 100], [ymin, ymin], color=:black, linewidth=3) text!(ax1, 50, ymin-5, text="100 km")
using Zygote loss(params) = sum( (map_projection(data, params) - target_truth).^2 ) grads = gradient(loss, initial_params) That is not possible in Python (where GDAL is a black box) or R (where C callbacks break AD). Julia’s data kartta is not yet as polished as the Python or R ecosystems—some trails are unmarked, and documentation can be sparse. But for the cartographer who needs speed, composability, and the ability to define new projections as code , Julia offers a new continent to explore.
But here’s the cartographic insight: . Julia’s missing union type forces you to be explicit. No silent NaN propagation. You must decide: impute, drop, or mark.