Skip to main content
ClaudeWave
Install in Claude Code
Copy
git clone --depth 1 https://github.com/matlab/matlab-agentic-toolkit /tmp/matlab-build-chart && cp -r /tmp/matlab-build-chart/skills-catalog/matlab-app-building/matlab-build-chart ~/.claude/skills/matlab-build-chart
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# MATLAB Chart Builder

Create, customize, and interact with MATLAB charts and plots — in standalone figures, Live Scripts, or uifigure apps.

## When to Use This Skill

Use this skill when:
- Plotting data (line, scatter, bar, histogram, heatmap, surface, polar, geo, volume) in any context
- Configuring axes (labels, limits, ticks, legend, font, export)
- Adding annotations (xline, yline, xregion, text)
- Adding or customizing data tips
- Creating interactive plots (click, hover, drag callbacks)
- Animating or streaming data to a chart
- Arranging multiple axes with tiledlayout/nexttile
- Optimizing chart rendering performance
- Exporting figures for publication or reports
- User says "help me visualize this" without a specific chart type

## When NOT to Use This Skill

- Building a full app (use `matlab-build-app` — it invokes this skill for chart sub-steps)
- Applying dark mode, brand colors, or custom color themes (use `matlab-apply-theme`)
- Working with Simulink scopes or Simscape plots
- Creating App Designer charts via the drag-and-drop GUI

## Workflow

```
User request arrives
        |
        +-- FAST PATH (most requests)
        |   Chart type named OR unambiguous single-axes plot
        |   AND no interactivity / animation / multi-panel / performance concern
        |       |
        |       v
        |   Infer rendering context (default: standalone figure)
        |   Read relevant references --> Build directly
        |
        +-- PLAN PATH (complex or ambiguous)
                |
                +-- Ambiguous intent (no chart type named, unclear data question)
                |       --> Identify visualization intent (see Intent Taxonomy)
                |
                +-- Rendering context unclear AND it matters
                |       --> Ask: standalone figure, Live Script, or uifigure app?
                |
                v
            Present inline plan for approval
                |
                v
            User confirms --> Read references --> Build
```

### Fast-Path Triggers (build directly, no plan)

ALL of these must hold:
- Chart type is named OR intent maps unambiguously to one type
- Single axes (no tiled/multi-panel layout)
- No custom interactivity (no user-specified callbacks)
- No animation or streaming
- No explicit performance constraints
- Rendering context is clear or defaults to standalone figure

### Plan-Path Triggers (present plan first)

ANY of these fires the plan path:
- Multi-panel / tiled figure
- Custom interactivity (click, hover, drag callbacks)
- Animation or streaming data
- Performance-sensitive (large dataset, real-time update)
- Branded / designed figure requiring palette/theme coordination
- Ambiguous "help me visualize this" — unclear type or intent
- Multiple visualization intents in one figure

## Rendering Context

Three contexts gate which constraint set applies:

| Context | Constraints | How inferred |
|---------|-------------|--------------|
| **Standalone figure** | Universal rules only | Default; `figure`/`axes` in request |
| **Live Script** | Universal rules only | User mentions Live Script, `.mlx`, plain-text Live Code |
| **uifigure app** | Universal + uifigure rules | User mentions uifigure; arrives as sub-step of app-builder |

If context is unstated and cannot be inferred, assume standalone figure. Ask only when the distinction matters (e.g., heatmap parent differs between contexts).

## Visualization Intent Taxonomy

Engages ONLY when the user has NOT named a specific chart type or function. If they say "scatter" or "heatmap," skip intent selection and build directly.

### Communicative Intents

| Intent | Data question | Encouraged functions |
|--------|--------------|---------------------|
| **Comparison** | How do values compare across items? | `bar`, `barh`, `bar3`, `bar3h`, `pareto`, `stem`, `stairs`, `loglog`, `semilogx`, `semilogy` |
| **Trend / time series** | How does a value change over time? | `plot`, `area`, `stackedplot`, `stairs`, `stem`, `fplot`, `fplot3` |
| **Distribution** | How is data spread? | `histogram`, `histogram2`, `boxchart`, `violinplot`, `raincloudplot`, `swarmchart`, `swarmchart3`, `scatterhistogram`, `binscatter`, `polarhistogram` |
| **Relationship** | How do variables relate? | `scatter`, `scatter3`, `bubblechart`, `bubblechart3`, `plotmatrix`, `parallelplot`, `binscatter`, `spy`, `fimplicit` |
| **Composition** | Parts of a whole? | `piechart`, `donutchart`, stacked `bar`, stacked `area`, `wordcloud`, `bubblecloud` |

### Data-Domain Intents

| Intent | When it fires | Encouraged functions |
|--------|--------------|---------------------|
| **Geospatial** | Geographic coordinates | `geoplot`, `geoscatter`, `geobubble`, `geodensityplot` |
| **Directional / polar** | Angular, cyclical, compass data | `polarplot`, `polarscatter`, `polarhistogram`, `polarbubblechart`, `compassplot`, `fpolarplot` |
| **Surfaces & scalar fields** | z = f(x,y), meshes, contours | `surf`, `surfc`, `surfl`, `mesh`, `meshc`, `meshz`, `ribbon`, `pcolor`, `contour`, `contourf`, `contour3`, `fcontour`, `fsurf`, `fmesh`, `fimplicit3`, `waterfall` |
| **Vector fields & flow** | Directional vector data | `quiver`, `quiver3`, `feather`, `streamline`, `streamslice`, `streamribbon`, `streamtube`, `streamparticles`, `coneplot` |
| **Volume visualization** | 3D gridded volume data | `slice`, `contourslice`, `coneplot`, `streamslice`, isosurface/isocap workflows |
| **Images & matrices** | Display a matrix/grid | `image`, `imagesc`, `heatmap`, `pcolor` (flat), `spy` |

### Classification Rules

- **The `waterfall` trap:** MATLAB's `waterfall` is a 3D surface plot, NOT the financial accumulation chart. For "accumulation to total," build from `bar` with a hidden base series.
- **`f*` variants** follow their data counterpart's intent: `fplot` -> Trend, `fsurf`/`fmesh`/`fcontour` -> Surfaces, `fimplicit` -> Relationship, `fpolarplot` -> Directional.
- **Animation is cross-cutting**, not an intent. `animatedlin
matlab-train-networkSkill

>

matlab-driving-data-importerSkill

Import recorded driving sensor data (GPS, camera, lidar, actor tracks, lanes) into scenariobuilder.* objects (GPSData, CameraData, LidarData, ActorTrackData, Trajectory, laneData) and run preprocessing — synchronize, offset correction, crop, normalizeTimestamps, convertTimestamps. Also: compute actor tracks from lidar when no annotations exist, attach camera/lidar mounting + intrinsics, export to MAT/workspace/timetable/script. Use for raw driving dataset files (KITTI, nuScenes, Waymo, Pandaset, ROS/ROS2 bags, .mat, .csv, .mp4) or driving/vehicle/sensor logs that need wrapping. drivingLogAnalyzer (DLA) is OPT-IN ONLY — invoke only on explicit user request ('DLA', 'open in DLA', 'inspect/explore/analyze the recording') or reported sensor problem (sync drift, timestamp mismatch, overlay misalignment). NEVER auto-launch DLA after wrapping (Rule 0). For 'build scenario / export to RoadRunner / drivingScenario / OpenSCENARIO / Unreal / simulate', hand off to matlab-scenario-builder.

matlab-scenario-builderSkill

Generate driving scenes, scenarios, road surfaces, and 3D content from already-wrapped scenariobuilder.* sensor data (GPS, camera, lidar, actor tracks) using Scenario Builder for Automated Driving Toolbox. Use to BUILD, EXPORT, or AUGMENT a virtual scenario/scene/map: ego or actor trajectories, trajectory smoothing, OpenCRG road-surface extraction, 3D asset generation, static-object placement, point-cloud georeferencing + elevation, lane-based ego localization, sensor-fusion tracking, scenario-event extraction (cut-ins, hard brakes, near-misses, ADAS disengagements), or export to RoadRunner, drivingScenario, OpenDRIVE, OpenCRG, OpenSCENARIO, or Unreal Engine. Also: log-to-scenario, scenario harvesting, accident/near-miss reconstruction, SOTIF (ISO 21448) and ISO 26262 scenario coverage, USGS-aerial-lidar scene augmentation, traffic-sign placement from camera+lidar logs. NOT for raw-data import or multi-sensor sync/crop/offset/timestamp normalization — route those to matlab-driving-data-importer.

roadrunner-asset-mappingSkill

>

roadrunner-convert-lanelet2-to-rrhdSkill

>

roadrunner-import-sceneSkill

>

roadrunner-rrhd-authoringSkill

>

matlab-build-simbiology-modelSkill

Build, modify, and diagram SimBiology models — API reference, helper functions, and layout patterns. Use when constructing or editing models programmatically or visually.