The built-in frames
{
"nba-legacy": "stats.nba.com shot frame: tenths of a foot, hoop origin, x across the court (sdvplot court_coords; input columns default to x_legacy/y_legacy)",
"nba-legacy-vertical": "stats.nba.com shot frame with the hoop at the bottom: points already in a rotation-90 scene's rotated frame (do not rotate them again); x across with its sign kept, y toward half court",
"hockeytech": "HockeyTech 600x300 canvas, top-left origin -> 200x85 ft centre origin (fastRhockey hockeytech_analytics: x/3-100, 42.5-y*85/300). The canvas is stylised rather than true to scale: converted end-zone faceoff dots land at about ±67 ft and ±52 ft against regulation ±69 ft, so the converted feet are approximate",
"espn-football-0-100": "ESPN football: x is a 0-100 yardline -> -50..50 along x; y passes through (yards)"
}import { FRAMES } from "@sportsdataverse/sporty";
// Pass a name as `toSurfaceFrame(rows, { from: name })`. Frames move the DATA onto the surface; the surface
// options xTrans/yTrans move the SURFACE.
Object.fromEntries(Object.entries(FRAMES).map(([name, f]) => [name, f.description]));
Tags: frames · FRAMES. All sporty examples.