Agent skill

observable-plot

Stars 39
Forks 7

Install this agent skill to your Project

npx add-skill https://github.com/maragudk/skills/tree/main/observable-plot

SKILL.md

Observable Plot Skill

Observable Plot is a JavaScript library for exploratory data visualization. It's built on D3 and provides a concise, declarative API for creating charts.

Installation

bash
npm install @observablehq/plot

Or via CDN:

html
<script type="module">
import * as Plot from "https://cdn.jsdelivr.net/npm/@observablehq/plot@0.6/+esm";
</script>

Core Concepts

Plot.plot(options)

The main function that renders a visualization. Returns an SVG or HTML figure element.

javascript
Plot.plot({
  marks: [
    Plot.dot(data, {x: "weight", y: "height"})
  ]
})

Key Options

Option Description Default
width Outer width in pixels 640
height Outer height in pixels auto
margin All margins varies
marginTop/Right/Bottom/Left Individual margins varies
marks Array of marks to render required
color Color scale options auto
x, y Position scale options auto
title, subtitle Chart titles none
caption Figure caption none

Data Format

Plot expects tabular data as arrays of objects:

javascript
const data = [
  {date: new Date("2024-01-01"), value: 100, category: "A"},
  {date: new Date("2024-01-02"), value: 120, category: "B"}
];

Channel Mapping

Map data columns to visual properties:

javascript
Plot.dot(data, {
  x: "date",        // column name
  y: "value",       // column name
  fill: "category", // color by category
  r: 5              // constant radius
})

Quick Examples

Line Chart

javascript
Plot.lineY(data, {x: "date", y: "value"}).plot()

Bar Chart

javascript
Plot.barY(data, {x: "category", y: "value"}).plot()

Scatter Plot

javascript
Plot.dot(data, {x: "weight", y: "height", fill: "species"}).plot()

Histogram

javascript
Plot.rectY(data, Plot.binX({y: "count"}, {x: "value"})).plot()

Area Chart

javascript
Plot.areaY(data, {x: "date", y: "value", fill: "steelblue"}).plot()

Documentation Files

This skill includes detailed documentation for each feature:

Marks (Visual Elements)

  • marks/area.md - Area charts and stacked areas
  • marks/bar.md - Bar charts (horizontal and vertical)
  • marks/dot.md - Scatter plots and bubble charts
  • marks/line.md - Line charts
  • marks/rect.md - Rectangles, histograms, heatmaps
  • marks/text.md - Text labels and annotations
  • marks/rule.md - Reference lines
  • marks/cell.md - Heatmaps with ordinal dimensions
  • marks/tip.md - Interactive tooltips
  • marks/axis.md - Custom axes
  • marks/geo.md - Geographic/map visualizations
  • marks/link.md - Connections between points
  • marks/arrow.md - Directed arrows
  • marks/vector.md - Vector fields
  • marks/tick.md - Tick marks
  • marks/box.md - Box plots
  • marks/frame.md - Frame decoration
  • marks/image.md - Image glyphs
  • marks/contour.md - Contour plots
  • marks/density.md - Density estimation
  • marks/raster.md - Raster/heatmap images
  • marks/hexgrid.md - Hexagonal grids
  • marks/waffle.md - Waffle charts
  • marks/delaunay.md - Voronoi and Delaunay
  • marks/bollinger.md - Bollinger bands
  • marks/difference.md - Difference charts
  • marks/tree.md - Hierarchical trees
  • marks/auto.md - Automatic mark selection
  • marks/linear-regression.md - Trend lines
  • marks/crosshair.md - Interactive crosshairs
  • marks/grid.md - Grid lines

Transforms (Data Processing)

  • transforms/bin.md - Binning for histograms
  • transforms/group.md - Grouping categorical data
  • transforms/stack.md - Stacking for area/bar charts
  • transforms/dodge.md - Beeswarm plots
  • transforms/hexbin.md - Hexagonal binning
  • transforms/window.md - Moving averages
  • transforms/select.md - Selecting specific points
  • transforms/normalize.md - Normalizing values

Features

  • features/scales.md - Scale configuration
  • features/facets.md - Small multiples
  • features/projections.md - Map projections
  • features/legends.md - Legend configuration
  • features/interactions.md - Interactive features
  • features/curves.md - Line interpolation
  • features/markers.md - Line markers
  • features/shorthand.md - Concise syntax
  • features/intervals.md - Time intervals

Common Patterns

Adding a Grid

javascript
Plot.plot({
  y: {grid: true},
  marks: [Plot.line(data, {x: "date", y: "value"})]
})

Color Legend

javascript
Plot.plot({
  color: {legend: true},
  marks: [Plot.dot(data, {x: "x", y: "y", fill: "category"})]
})

Faceting (Small Multiples)

javascript
Plot.plot({
  facet: {data, x: "region"},
  marks: [Plot.dot(data, {x: "income", y: "lifeExpectancy"})]
})

Interactive Tooltips

javascript
Plot.plot({
  marks: [
    Plot.dot(data, {x: "x", y: "y", tip: true})
  ]
})

Stacked Area Chart

javascript
Plot.plot({
  marks: [
    Plot.areaY(data, {x: "date", y: "value", fill: "category"})
  ]
})

Framework Integration

React

jsx
import * as Plot from "@observablehq/plot";
import { useRef, useEffect } from "react";

function Chart({ data }) {
  const ref = useRef();
  useEffect(() => {
    const plot = Plot.plot({
      marks: [Plot.dot(data, {x: "x", y: "y"})]
    });
    ref.current.append(plot);
    return () => plot.remove();
  }, [data]);
  return <div ref={ref} />;
}

Vanilla JS

javascript
const plot = Plot.plot({
  marks: [Plot.dot(data, {x: "x", y: "y"})]
});
document.body.append(plot);

Resources

Expand your agent's capabilities with these related and highly-rated skills.

maragudk/skills

bluesky

Guide for posting content to the Bluesky social network using the bsky terminal app. This skill should be used proactively when working in public repositories and there is interesting, shareable content (new features, insights, achievements, or announcements worth sharing with the community). Use it when asked to post to Bluesky, or when content seems worth sharing publicly.

39 7
Explore
maragudk/skills

datastar

Guide for building interactive web UIs with Datastar and gomponents-datastar. Use this skill when adding frontend interactivity to Go web applications with Datastar attributes.

39 7
Explore
maragudk/skills

go

Guide for how to develop Go apps and modules/libraries. Always use this skill when reading or writing Go code.

39 7
Explore
maragudk/skills

worktrees

Guide for using git worktrees to parallelize development with coding agents. Use this skill when the user requests to work in a new worktree or wants to work on a separate feature in isolation (e.g., "Work in a new worktree", "Create a worktree for feature X").

39 7
Explore
maragudk/skills

collaboration

Guide for collaborating on GitHub projects. This skill should be used when contributing to projects, creating PRs, reviewing code, or managing issues on GitHub.

39 7
Explore
maragudk/skills

marimo

Guide for creating and working with marimo notebooks, the reactive Python notebook that stores as pure .py files. This skill should be used when creating, editing, running, or deploying marimo notebooks.

39 7
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results