Explore six Boulder 3D temperature frames from CSV
Read a bounded local CSV, align captures by stable site IDs and scrub or play six frames with shared coordinate and temperature scales, offline in source, notebooks and exported HTML.
// Requires the matching CSV-frame-enabled native development runtime.
// Run from the project root containing examples/fixtures/plot_boulder_3d_frames.csv.
// Invented local coordinates and temperatures; no terrain or real sensor data.
import aner.data
import aner.plot
// Long format: one required observation per explicit time label and stable site ID.
var schema = data.schema()
schema = data.column(schema, "time", "String", false)
schema = data.column(schema, "site", "String", false)
schema = data.column(schema, "x", "Float64", false)
schema = data.column(schema, "y", "Float64", false)
schema = data.column(schema, "z", "Float64", false)
schema = data.column(schema, "value", "Float64", false)
let source = data.scan_csv("examples/fixtures/plot_boulder_3d_frames.csv", schema, missing: "NA")
let bounded = data.bounded(source, max_scanned_rows: 10001,
max_read_bytes: 1048576, timeout_ms: 5000)
let table = data.collect(bounded, max_rows: 10000,
max_bytes: 1048576, batch_rows: 64)
// First-seen time and site order define frames and stable observation indices.
// Later CSV frames deliberately shuffle rows; the adapter aligns them by site ID.
// No map pack is needed. The chart owns the complete collected snapshot.
let boulder = plot.scatter3d_frames_table(table)
.labels("Local east (m)", "Local north (m)", "Height above invented datum (m)")
.color_label("Temperature (°C)").color_limits(12.0, 24.0)
.aspect("equal").view(azimuth: -45.0, elevation: 28.0)
.title("Boulder: six synthetic 3D temperature frames")
.caption("63 invented sampling positions × 6 assigned UTC labels; synthetic temperatures, not terrain or municipal measurements. Equal metres; fixed 12–24 °C color scale.")
.theme(plot.theme("light")).size(width: 1000, height: 680)
boulder.show()
// Export the paused first frame; existing files are never replaced.
// HTML embeds every capture, so viewing it needs neither this CSV nor map packs.
boulder.save("boulder-3d.html")
boulder.save("boulder-3d.svg")
Run step by step in VS Code.
The notebook separates observations and chart construction into cells. It opens with empty outputs and shared variables. Map cells state which optional local packs they need.
- Install a compatible native Aner executable and VS Code extension using the editor guide. Chart construction and interactive geographic navigation require the matching development runtime and editor.
- Download the
.anernbnotebook and open it in your VS Code project. If it appears as JSON, choose Reopen Editor With… → Aner Notebook. - Select the
Aner — notebookkernel and keep Shared variables active. Run code cells from top to bottom, or choose Run All. Later cells reuse observations and chart values from earlier cells. Run cells that need no pack before trying the optional geographic map. - Read the figures below their producing cells. In geographic outputs, drag to pan and use the zoom controls to reveal crowded labels. Static SVG exports retain the initial view. Source observations, units and limitations remain in each caption.
After changing an earlier cell, rerun its dependent cells. Use Aner: Restart Notebook Session, then Run All, for a clean experiment. Saved outputs are historical; reopening the file starts without live variables. The notebook guide explains session state, inspection, and runtime controls.
Run step by step in Jupyter.
Download the .ipynb notebook and open it in a notebook application with the Aner kernel configured. Select Aner and run its cells from top to bottom. The Jupyter guide explains kernel requirements, shared session state and output policies.
The dashboard uses local date and site controls after the producing cell finishes. Notebook trust and script policies determine whether interaction is displayed; the initial SVG and exported HTML provide the documented fallbacks. Optional map pack requirements are stated in the notebook.
Make it your experiment.
With a compatible development runtime installed, save this program as examples/plot_boulder_3d.aner inside a folder for your experiment. Open a terminal in that folder, then check and run the program.
aner check examples/plot_boulder_3d.aner
aner run examples/plot_boulder_3d.anerThe aner command must be on your PATH. Follow the installation guide if your terminal cannot find it.
Requires an updated native Aner development runtime supporting plot.scatter3d_frames_table and complete CSV backed Cartesian 3D scatter time frames and the matching VS Code extension for .anernb, or the optional Aner kernel integration for Jupyter .ipynb. Aner Plot awaits a binary release and is not included in the published research preview; development packages are not offered here. The supplied analysis needs no map pack, credentials, server or connection. Native source and both notebook formats share the same analysis. Source export uses fresh HTML and SVG filenames; existing files are never overwritten. Save the supplied CSV at examples/fixtures/plot_boulder_3d_frames.csv and the source at examples/plot_boulder_3d.aner. Run from the project root containing examples: relative CSV paths use the process or kernel working directory, not the source or notebook folder. A downloaded notebook needs the same CSV folder tree, or the same path edit in all three formats. The CSV is needed for construction; saved HTML embeds the snapshot and needs no CSV to view offline.
aner check examples/plot_boulder_3d.aner
aner run examples/plot_boulder_3d.anerObservations are synthetic teaching inputs. Geographic context comes from optional offline boundary packs and does not add street detail or establish observed traffic conditions.
Read the chart and map contracts