Post-processing and visualisation of simulation outputs. Overlay runs, compare setups, export publication-ready plots for design reviews and competition reports.
The dashboard provides a unified interface for comparing simulation outputs across parameter changes, setup iterations, and track configurations.
Run overlay — Plot speed traces, GG diagrams, and sector times from multiple runs on a single canvas with automatic legend generation and delta highlighting.
Setup comparison — Side-by-side parameter tables with colour-coded deltas showing which changes improved/degraded performance.
Export pipeline — One-click export to publication-ready PNGs/SVGs at 300 DPI with consistent branding, axis formatting, and typography.
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
from dataclasses import dataclass
@dataclass
class SimRun:
name: str
params: dict
speed_trace: np.ndarray
gg_data: np.ndarray
lap_time: float
sectors: np.ndarray
def load_runs(run_dir: Path) -> list:
runs = []
for f in sorted(run_dir.glob('*.mat')):
data = loadmat(f)
runs.append(SimRun(
name=f.stem,
params=data['params'],
speed_trace=data['v_profile'],
gg_data=data['gg_points'],
lap_time=float(data['t_lap']),
sectors=data['sector_times']
))
return runs
def plot_overlay(runs, ax=None):
if ax is None:
fig, ax = plt.subplots(figsize=(12, 4))
baseline = runs[0]
for run in runs:
ax.plot(run.speed_trace[:, 0],
run.speed_trace[:, 1],
label=f'{run.name} ({run.lap_time:.3f}s)')
ax.set_xlabel('Distance (m)')
ax.set_ylabel('Speed (m/s)')
ax.legend(loc='upper right', fontsize=8)
return ax
pip install streamlit matplotlib scipy numpy pyyaml. Python 3.8+.style_config.yaml to wherever your .mat simulation outputs live.streamlit run dashboard.py. The browser opens automatically with run selection and plot controls.Full source code, documentation, and email support. Unlimited use within your FS team.
Get StartedFull source + 1hr setup call + priority support. Custom vehicle config and tyre fitting included.
Contact UsNo toolboxes required. All optimisation uses custom solvers — no Optimization Toolbox, no Curve Fitting Toolbox. Works on base MATLAB R2020a+ / Python 3.8+.