Quiver

Category: Charts

Live preview
Wind over a grid
North (up)
0.0
0.5
1.0
1.5
2.0
0.0
0.5
1.0
1.5
2.0
East (across)
Each arrow is centred on its point and points the way its across and up numbers say; lengths are in proportion to the vector length (m/s), the longest drawn at a fixed size.
ArrowEastNorthAcrossUpLength
Arrow 1002 m/s1 m/s2.236 m/s
Arrow 2103 m/s1 m/s3.162 m/s
Arrow 3203 m/s0 m/s3 m/s
Arrow 4011 m/s2 m/s2.236 m/s
Arrow 5112 m/s2 m/s2.828 m/s
Arrow 6213 m/s1 m/s3.162 m/s
Arrow 7020 m/s3 m/s3 m/s
Arrow 8121 m/s2 m/s2.236 m/s
Arrow 9222 m/s2 m/s2.828 m/s

A field of arrows on linear axes: each arrow sits on its x, y point and points the way its u (across) and v (up) numbers say, with a length in proportion to the size of the vector. Use it for wind, flow, forces or any vector field. The axes come from d3 nice() and ticks() (d3-scale's linear scale), computed on the server, so there is no script. Arrows are centred on their point, drawn at a fixed size scale so the longest is a set length, and an arrow of length 0 is a dot. A hidden table gives every arrow's x, y, across, up and length. Static, settled picture; each arrow fades in through --k from --p (build progress 0 to 1, default 1).

Surfaces
webgoogle-apps-script-webmcp-appsandroid
Degraded on
SurfaceNote
pdfPrints the finished picture; no motion
Fields
FieldTypeRequired
titlestring (optional, max 80).optional
x_labelstring (optional, max 40, default "x"). Names the horizontal axis.optional
y_labelstring (optional, max 40, default "y"). Names the vertical axis.optional
unitstring (optional, max 12). The unit of u, v and the length; appended to those values in the table and the label.optional
arrowsarray (required, 1 to 200) of {x, y, u, v (finite numbers up to 1e12 in size), label (string or number, max 30, default "Arrow n")}. An entry with a missing or unusable number, or that is not an arrow, is left out and counted in a note. Arrows beyond the first 200 are noted and not drawn.required
arrow_scalenumber (optional, 0.1 to 1, default 1). Shrinks every arrow by this factor; the longest is 120 units of a 1000 unit wide drawing at scale 1. A value that is not a number is ignored.optional
versioninteger (optional, default 1). The quiver contract the payload was written for. Only version 1 exists; a higher whole number is drawn as version 1 with a note.optional
Example payload
{
  "type": "quiver"
}
ARD catalog entry
{
  "identifier": "urn:air:a2uicatalog.ai:atom:quiver",
  "displayName": "Quiver",
  "type": "application/vnd.a2ui.atom+json",
  "url": "https://a2uicatalog.ai/atoms/quiver/",
  "capabilities": [
    "web",
    "google-apps-script-web",
    "mcp-apps",
    "android"
  ],
  "description": "A field of arrows on linear axes: each arrow sits on its x, y point and points the way its u (across) and v (up) numbers say, with a length in proportion to the size of the vector. Use it for wind, flow, forces or any vector field. The axes come from d3 nice() and ticks() (d3-scale's linear scale), computed on the server, so there is no script. Arrows are centred on their point, drawn at a fixed size scale so the longest is a set length, and an arrow of length 0 is a dot. A hidden table gives every arrow's x, y, across, up and length. Static, settled picture; each arrow fades in through --k from --p (build progress 0 to 1, default 1).",
  "representativeQueries": [
    "show a quiver: arrows showing direction and size at points",
    "a field of arrows on linear axes: each arrow sits on its x, y point and points the way its u (across",
    "render a quiver"
  ]
}
← Full ARD catalog
Deploy your own Google Apps Script renderer

The renderer is an open-source Google Apps Script web app. Deploy your own instance in 4 commands — you own the URL, no dependency on the demo endpoint.

git clone https://github.com/a2uicatalog/a2ui
cd a2ui/apps-script-surface/gas-wired-renderer
clasp push && clasp deploy
Full deploy guide →