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 areasmarks/bar.md- Bar charts (horizontal and vertical)marks/dot.md- Scatter plots and bubble chartsmarks/line.md- Line chartsmarks/rect.md- Rectangles, histograms, heatmapsmarks/text.md- Text labels and annotationsmarks/rule.md- Reference linesmarks/cell.md- Heatmaps with ordinal dimensionsmarks/tip.md- Interactive tooltipsmarks/axis.md- Custom axesmarks/geo.md- Geographic/map visualizationsmarks/link.md- Connections between pointsmarks/arrow.md- Directed arrowsmarks/vector.md- Vector fieldsmarks/tick.md- Tick marksmarks/box.md- Box plotsmarks/frame.md- Frame decorationmarks/image.md- Image glyphsmarks/contour.md- Contour plotsmarks/density.md- Density estimationmarks/raster.md- Raster/heatmap imagesmarks/hexgrid.md- Hexagonal gridsmarks/waffle.md- Waffle chartsmarks/delaunay.md- Voronoi and Delaunaymarks/bollinger.md- Bollinger bandsmarks/difference.md- Difference chartsmarks/tree.md- Hierarchical treesmarks/auto.md- Automatic mark selectionmarks/linear-regression.md- Trend linesmarks/crosshair.md- Interactive crosshairsmarks/grid.md- Grid lines
Transforms (Data Processing)
transforms/bin.md- Binning for histogramstransforms/group.md- Grouping categorical datatransforms/stack.md- Stacking for area/bar chartstransforms/dodge.md- Beeswarm plotstransforms/hexbin.md- Hexagonal binningtransforms/window.md- Moving averagestransforms/select.md- Selecting specific pointstransforms/normalize.md- Normalizing values
Features
features/scales.md- Scale configurationfeatures/facets.md- Small multiplesfeatures/projections.md- Map projectionsfeatures/legends.md- Legend configurationfeatures/interactions.md- Interactive featuresfeatures/curves.md- Line interpolationfeatures/markers.md- Line markersfeatures/shorthand.md- Concise syntaxfeatures/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
Didn't find tool you were looking for?