Skip to content

Variable: scatterAttributes ​

ts
const scatterAttributes: ObjectNode<{
  connectgaps: Attr<boolean, {
     description: "Connect lines across missing (`null`, `NaN`) points instead of breaking them.";
     dflt: false;
     editType: readonly (
        | "calc"
        | "calcIfAutorange"
        | "crossTraceCalc"
        | "layout"
        | "ticks"
        | "plot"
        | "style"
        | "colorbars"
        | "legend"
        | "modebar"
        | "camera"
       | "none")[];
  }>;
  dx: Attr<number, {
     description:   | "Step between implicit x coordinates (see `x0`)."
        | "Step between implicit x coordinates (see `y0`)."
        | "Step between implicit y coordinates (see `x0`)."
        | "Step between implicit y coordinates (see `y0`).";
     dflt: 1;
     editType: "calc";
  }>;
  dy: Attr<number, {
     description:   | "Step between implicit x coordinates (see `x0`)."
        | "Step between implicit x coordinates (see `y0`)."
        | "Step between implicit y coordinates (see `x0`)."
        | "Step between implicit y coordinates (see `y0`).";
     dflt: 1;
     editType: "calc";
  }>;
  error_x: ObjectNode<{
     array: AttrSpec<DataArray, DataArray | undefined>;
     arrayminus: AttrSpec<DataArray, DataArray | undefined>;
     color: Attr<string, {
        description: "Color of the bars. Defaults to the trace color.";
        editType: "style";
     }>;
     copy_ystyle: Attr<boolean, {
        description: "Use the `error_y` color, thickness and width. Defaults to true when `error_y` is visible and none of those is set here.";
        editType: "style";
     }>;
     symmetric: Attr<boolean, {
        description: "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.";
        editType: "calc";
     }>;
     thickness: Attr<number, {
        description: "Stroke width of the bars and their end caps, in CSS px.";
        dflt: 2;
        editType: "style";
        min: 0;
     }>;
     traceref: Attr<number, {
        description: "Accepted for Plotly compatibility; has no effect.";
        dflt: 0;
        editType: "calc";
        min: 0;
     }>;
     tracerefminus: Attr<number, {
        description: "Accepted for Plotly compatibility; has no effect.";
        dflt: 0;
        editType: "calc";
        min: 0;
     }>;
     type: Attr<"data" | "percent" | "constant" | "sqrt", {
        description: "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.";
        editType: "calc";
        values: readonly ["percent", "constant", "sqrt", "data"];
     }>;
     value: Attr<number, {
        description: `Bar length in the positive ${string} direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.`;
        dflt: 10;
        editType: "calc";
        min: 0;
     }>;
     valueminus: Attr<number, {
        description: `Bar length in the negative ${string} direction when `symmetric` is false (see `value`).`;
        dflt: 10;
        editType: "calc";
        min: 0;
     }>;
     visible: Attr<boolean, {
        description: "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.";
        editType: "calc";
     }>;
     width: Attr<number, {
        description: "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.";
        editType: "style";
        min: 0;
     }>;
  }>;
  error_y: ObjectNode<{
     array: AttrSpec<DataArray, DataArray | undefined>;
     arrayminus: AttrSpec<DataArray, DataArray | undefined>;
     color: Attr<string, {
        description: "Color of the bars. Defaults to the trace color.";
        editType: "style";
     }>;
     symmetric: Attr<boolean, {
        description: "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.";
        editType: "calc";
     }>;
     thickness: Attr<number, {
        description: "Stroke width of the bars and their end caps, in CSS px.";
        dflt: 2;
        editType: "style";
        min: 0;
     }>;
     traceref: Attr<number, {
        description: "Accepted for Plotly compatibility; has no effect.";
        dflt: 0;
        editType: "calc";
        min: 0;
     }>;
     tracerefminus: Attr<number, {
        description: "Accepted for Plotly compatibility; has no effect.";
        dflt: 0;
        editType: "calc";
        min: 0;
     }>;
     type: Attr<"data" | "percent" | "constant" | "sqrt", {
        description: "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.";
        editType: "calc";
        values: readonly ["percent", "constant", "sqrt", "data"];
     }>;
     value: Attr<number, {
        description: `Bar length in the positive ${string} direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.`;
        dflt: 10;
        editType: "calc";
        min: 0;
     }>;
     valueminus: Attr<number, {
        description: `Bar length in the negative ${string} direction when `symmetric` is false (see `value`).`;
        dflt: 10;
        editType: "calc";
        min: 0;
     }>;
     visible: Attr<boolean, {
        description: "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.";
        editType: "calc";
     }>;
     width: Attr<number, {
        description: "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.";
        editType: "style";
        min: 0;
     }>;
  }>;
  fill: Attr<
     | "none"
     | "tozeroy"
     | "tozerox"
     | "tonexty"
     | "tonextx"
     | "toself"
     | "tonext", {
     description: "Area to fill with `fillcolor`. Default `'none'`, or `'tonexty'` (`'tonextx'` for `orientation: 'h'`) in a `stackgroup`. `'tozeroy'` / `'tozerox'` fill to y = 0 / x = 0; `'tonexty'` / `'tonextx'` fill to the previous trace on the subplot (in the same `stackgroup`), joining the end points with straight lines, and act like `'tozero…'` without one; `'toself'` closes the line (each segment when it has gaps) into a shape; `'tonext'` fills between this trace and the previous one when one encloses the other (like `'toself'` without one). Fills follow `line.shape`.";
     dflt: "none";
     editType: "calc";
     values: readonly ["none", "tozeroy", "tozerox", "tonexty", "tonextx", "toself", "tonext"];
  }>;
  fillcolor: Attr<string, {
     description: "Fill color. Default: the line color (else the marker color, else the colorway color) at half opacity.";
     editType: "style";
  }>;
  fillgradient: ObjectNode<{
     colorscale: Attr<ColorScale, {
        description: "Gradient colors: a colorscale from the lowest to the highest value along the gradient direction, or from the center outwards for `radial`.";
        editType: "style";
     }>;
     start: Attr<number, {
        description: "Where the gradient starts (colorscale position 0), as a value on the axis of the gradient direction. Default: the lowest value of the fill along that axis. Ignored for `radial`.";
        editType: "plot";
     }>;
     stop: Attr<number, {
        description: "Where the gradient ends (colorscale position 1), as a value on the axis of the gradient direction. Default: the highest value of the fill along that axis. Ignored for `radial`.";
        editType: "plot";
     }>;
     type: Attr<"none" | "radial" | "horizontal" | "vertical", {
        description: "Gradient direction: along x (`'horizontal'`), along y (`'vertical'`), or outwards from the center of the fill's bounding box (`'radial'`).";
        dflt: "none";
        editType: "plot";
        values: readonly ["radial", "horizontal", "vertical", "none"];
     }>;
  }>;
  fillpattern: ObjectNode<{
     bgcolor: Attr<string, {
        arrayOk: boolean;
        description: `Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent${string}.`;
        editType: "style";
     }>;
     fgcolor: Attr<string, {
        arrayOk: boolean;
        description: `Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`${string}.`;
        editType: "style";
     }>;
     fgopacity: Attr<number, {
        description: "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.";
        editType: "style";
        max: 1;
        min: 0;
     }>;
     fillmode: Attr<"replace" | "overlay", {
        description: "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.";
        dflt: "replace";
        editType: "style";
        values: readonly ["replace", "overlay"];
     }>;
     shape: Attr<"" | "x" | "/" | "\" | "-" | "|" | "+" | ".", {
        arrayOk: boolean;
        description: `Hatch shape: diagonal (`'/'`, `'\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none${string}.`;
        dflt: "";
        editType: "style";
        values: readonly ["", "/", "\", "x", "-", "|", "+", "."];
     }>;
     size: Attr<number, {
        arrayOk: boolean;
        description: `Size of the pattern's tiles in CSS px: the spacing of its lines or dots${string}.`;
        dflt: 8;
        editType: "style";
        min: 0;
     }>;
     solidity: Attr<number, {
        arrayOk: boolean;
        description: `Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color${string}.`;
        dflt: 0.3;
        editType: "style";
        max: 1;
        min: 0;
     }>;
  }>;
  groupnorm: Attr<"" | "fraction" | "percent", {
     description: "Normalize each position's `stackgroup` total to 1 (`'fraction'`) or 100 (`'percent'`). The first trace of the group that sets it decides.";
     dflt: "";
     editType: "calc";
     values: readonly ["", "fraction", "percent"];
  }>;
  hoveron: Attr<"points" | "fills" | `points+${string}` | `fills+${string}`, {
     description: "What hover reacts to: points (markers, line vertices) and/or the filled area, which reports the trace. Default `'fills'` for `'toself'` / `'tonext'` fills without markers or text, else `'points'`. Fills hover (in every hovermode) only when no point is under the pointer.";
     editType: "style";
     flags: readonly ["points", "fills"];
  }>;
  line: ObjectNode<{
     color: Attr<string, {
        description: "Line color. Defaults to the marker color (when a single color) or the colorway.";
        editType: "style";
     }>;
     dash: Attr<string, {
        description: "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.";
        dflt: "solid";
        editType: "style";
     }>;
     shape: Attr<"linear" | "spline" | "hv" | "vh" | "hvh" | "vhv", {
        description: "Interpolation between points: straight, `'spline'` (centripetal Catmull-Rom, see `smoothing`), or steps (`'hv'`: horizontal then vertical, …).";
        dflt: "linear";
        editType: readonly (
           | "calc"
           | "calcIfAutorange"
           | "crossTraceCalc"
           | "layout"
           | "ticks"
           | "plot"
           | "style"
           | "colorbars"
           | "legend"
           | "modebar"
           | "camera"
          | "none")[];
        values: readonly ["linear", "spline", "hv", "vh", "hvh", "vhv"];
     }>;
     simplify: Attr<boolean, {
        description: "Decimate dense monotonic lines to at most 4 vertices per pixel column (min/max, visually lossless). Recomputed when zooming changes the scale.";
        dflt: true;
        editType: "plot";
     }>;
     smoothing: Attr<number, {
        description: "Spline tension for `shape: 'spline'`: 0 is straight, 1.3 the smoothest.";
        dflt: 1;
        editType: readonly (
           | "calc"
           | "calcIfAutorange"
           | "crossTraceCalc"
           | "layout"
           | "ticks"
           | "plot"
           | "style"
           | "colorbars"
           | "legend"
           | "modebar"
           | "camera"
          | "none")[];
        max: 1.3;
        min: 0;
     }>;
     width: Attr<number, {
        description: "Line width in CSS px.";
        dflt: 2;
        editType: "style";
        min: 0;
     }>;
  }>;
  marker: ObjectNode<{
     angle: Attr<
        | number
        | TypedArray
        | readonly number[], {
        arrayOk: true;
        description: "Marker rotation in degrees, clockwise, or one per point.";
        dflt: 0;
        editType: "style";
     }>;
     autocolorscale: AttrSpec<boolean, boolean | undefined>;
     cauto: AttrSpec<boolean, boolean | undefined>;
     cmax: AttrSpec<number, number | undefined>;
     cmid: AttrSpec<number, number | undefined>;
     cmin: AttrSpec<number, number | undefined>;
     color: Attr<string | readonly string[], {
        animatable: true;
        arrayOk: true;
        description: "Marker fill color, one CSS color per point, or numbers mapped through `colorscale`. Defaults to the colorway.";
        editType: "style";
     }>;
     coloraxis: AttrSpec<string, string | undefined>;
     colorbar: ObjectNode<{
        bgcolor: Attr<string, {
           description: "Background of the box.";
           dflt: "rgba(0,0,0,0)";
        }>;
        bordercolor: Attr<string, {
           description: "Border color of the colorbar box.";
           dflt: "#444";
        }>;
        borderwidth: Attr<number, {
           description: "Border width of the box, px.";
           dflt: 0;
           min: 0;
        }>;
        dtick: AttrSpec<unknown, unknown>;
        exponentformat: Attr<"none" | "e" | "E" | "power" | "SI" | "B", {
           description: "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).";
           dflt: "B";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
           values: readonly ["none", "e", "E", "power", "SI", "B"];
        }>;
        len: Attr<number, {
           description: "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).";
           dflt: 1;
           min: 0;
        }>;
        lenmode: Attr<"fraction" | "pixels", {
           description: "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).";
           dflt: "fraction";
           values: readonly ["fraction", "pixels"];
        }>;
        minexponent: Attr<number, {
           description: "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.";
           dflt: 3;
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
           min: 0;
        }>;
        nticks: Attr<number, {
           description: "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.";
           dflt: 0;
           editType: "ticks";
           min: 0;
        }>;
        orientation: Attr<"v" | "h", {
           description: "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).";
           dflt: "v";
           values: readonly ["h", "v"];
        }>;
        outlinecolor: Attr<string, {
           description: "Color of the outline around the bar.";
           dflt: "#444";
        }>;
        outlinewidth: Attr<number, {
           description: "Outline width, px.";
           dflt: 1;
           min: 0;
        }>;
        separatethousands: Attr<boolean, {
           description: "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.";
           dflt: false;
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
        }>;
        showexponent: Attr<"none" | "all" | "first" | "last", {
           description: "Which tick labels show the exponent.";
           dflt: "all";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
           values: readonly ["all", "first", "last", "none"];
        }>;
        showticklabels: Attr<boolean, {
           description: "Show tick labels.";
           dflt: true;
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
        }>;
        showtickprefix: Attr<"none" | "all" | "first" | "last", {
           description: "Which tick labels get `tickprefix`.";
           dflt: "all";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
           values: readonly ["all", "first", "last", "none"];
        }>;
        showticksuffix: Attr<"none" | "all" | "first" | "last", {
           description: "Which tick labels get `ticksuffix`.";
           dflt: "all";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
           values: readonly ["all", "first", "last", "none"];
        }>;
        thickness: Attr<number, {
           description: "Thickness of the color bar.";
           dflt: 30;
           min: 0;
        }>;
        thicknessmode: Attr<"fraction" | "pixels", {
           description: "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).";
           dflt: "pixels";
           values: readonly ["fraction", "pixels"];
        }>;
        tick0: AttrSpec<unknown, unknown>;
        tickangle: Attr<number | "auto", {
           description: "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.";
           dflt: "auto";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
           extras: readonly ["auto"];
        }>;
        tickcolor: Attr<string, {
           description: "Tick color. Defaults to `color`.";
           editType: "ticks";
        }>;
        tickfont: ObjectNode<{
           color: Attr<string, {
              description: "Text color.";
              editType: "style";
           }>;
           family: Attr<string, {
              description: "CSS font-family list. The renderer uses the first family it can load and falls back through the list.";
              noBlank: true;
              strict: true;
           }>;
           lineposition: Attr<
              | "none"
              | "under"
              | "over"
              | "through"
              | `under+${(...)}`
              | `over+${(...)}`
              | `through+${(...)}`, {
              description: "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.";
              extras: readonly [...];
              flags: readonly [..., ..., ...];
           }>;
           shadow: Attr<string, {
              description: "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.";
           }>;
           size: Attr<number, {
              description: "Font size in CSS pixels.";
              min: 1;
           }>;
           style: Attr<"normal" | "italic", {
              description: "Font style.";
              values: readonly [..., ...];
           }>;
           textcase: Attr<"normal" | "word caps" | "upper" | "lower", {
              description: "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.";
              values: readonly [..., ..., ..., ...];
           }>;
           variant: Attr<
              | "normal"
              | "small-caps"
              | "all-small-caps"
              | "all-petite-caps"
              | "petite-caps"
              | "unicase", {
              description: "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.";
              values: readonly [..., ..., ..., ..., ..., ...];
           }>;
           weight: Attr<number | "normal" | "bold", {
              description: "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.";
              extras: readonly [..., ...];
              max: 1000;
              min: 1;
           }>;
        }>;
        tickformat: Attr<string, {
           description: "Tick-label format: a d3-format specifier for numbers (`.2f`, `~s`, `$,`) or a d3-time-format specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.";
           dflt: "";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
        }>;
        ticklabeloverflow: Attr<"allow" | "hide past div" | "hide past domain", {
           description: "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.";
           values: readonly ["allow", "hide past div", "hide past domain"];
        }>;
        ticklabelposition: Attr<
           | "outside"
           | "inside"
           | "outside top"
           | "inside top"
           | "outside left"
           | "inside left"
           | "outside right"
           | "inside right"
           | "outside bottom"
           | "inside bottom", {
           description: "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.";
           dflt: "outside";
           values: readonly ["outside", "inside", "outside top", "inside top", "outside bottom", "inside bottom", "outside left", "inside left", "outside right", "inside right"];
        }>;
        ticklabelstep: Attr<number, {
           description: "Label every n-th tick only (`tickmode` `auto` and `linear`).";
           dflt: 1;
           editType: "ticks";
           min: 1;
        }>;
        ticklen: Attr<number, {
           description: "Tick length in px.";
           dflt: 5;
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
           min: 0;
        }>;
        tickmode: Attr<"linear" | "auto" | "array" | "sync", {
           description: "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.";
           editType: "ticks";
           values: readonly ["auto", "linear", "array", "sync"];
        }>;
        tickprefix: Attr<string, {
           description: "Text before each tick label.";
           dflt: "";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
        }>;
        ticks: Attr<"" | "outside" | "inside", {
           description: "Draw tick marks outside or inside the plot area, or not at all (`''`).";
           dflt: "";
           editType: EditType;
           values: readonly ["outside", "inside", ""];
        }>;
        ticksuffix: Attr<string, {
           description: "Text after each tick label.";
           dflt: "";
           editType: readonly (
              | "calc"
              | "calcIfAutorange"
              | "crossTraceCalc"
              | "layout"
              | "ticks"
              | "plot"
              | "style"
              | "colorbars"
              | "legend"
              | "modebar"
              | "camera"
             | "none")[];
        }>;
        ticktext: AttrSpec<DataArray, DataArray | undefined>;
        tickvals: AttrSpec<DataArray, DataArray | undefined>;
        tickwidth: Attr<number, {
           description: "Tick width in px.";
           dflt: 1;
           editType: "ticks";
           min: 0;
        }>;
        title: ObjectNode<{
           font: ObjectNode<{
              color: Attr<..., ...>;
              family: Attr<..., ...>;
              lineposition: Attr<..., ...>;
              shadow: Attr<..., ...>;
              size: Attr<..., ...>;
              style: Attr<..., ...>;
              textcase: Attr<..., ...>;
              variant: Attr<..., ...>;
              weight: Attr<..., ...>;
           }>;
           side: Attr<"right" | "top" | "bottom", {
              description: "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).";
              values: readonly [..., ..., ...];
           }>;
           text: Attr<string, {
              description: "Colorbar title.";
              dflt: "";
           }>;
        }>;
        x: Attr<number, {
           description: "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).";
        }>;
        xanchor: Attr<"left" | "center" | "right", {
           description: "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).";
           values: readonly ["left", "center", "right"];
        }>;
        xpad: Attr<number, {
           description: "Horizontal padding, px.";
           dflt: 10;
           min: 0;
        }>;
        xref: Attr<"container" | "paper", {
           description: "Reference of `x`: the plot area (`paper`) or the whole figure.";
           dflt: "paper";
           values: readonly ["container", "paper"];
        }>;
        y: Attr<number, {
           description: "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).";
        }>;
        yanchor: Attr<"middle" | "top" | "bottom", {
           description: "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).";
           values: readonly ["top", "middle", "bottom"];
        }>;
        ypad: Attr<number, {
           description: "Vertical padding, px.";
           dflt: 10;
           min: 0;
        }>;
        yref: Attr<"container" | "paper", {
           description: "Reference of `y`: the plot area (`paper`) or the whole figure.";
           dflt: "paper";
           values: readonly ["container", "paper"];
        }>;
     }>;
     colorscale: AttrSpec<ColorScale, ColorScale | undefined>;
     image: Attr<string | readonly string[], {
        arrayOk: true;
        description: "Image sprites: a URL or data URI drawn instead of the symbol in a `size` × `size` square (keeping its aspect ratio), or one per point (empty entries keep the symbol). `opacity` applies; `color` and `line` do not. Cross-origin URLs need CORS headers.";
        editType: "style";
        strict: true;
     }>;
     line: ObjectNode<{
        autocolorscale: AttrSpec<boolean, boolean | undefined>;
        cauto: AttrSpec<boolean, boolean | undefined>;
        cmax: AttrSpec<number, number | undefined>;
        cmid: AttrSpec<number, number | undefined>;
        cmin: AttrSpec<number, number | undefined>;
        color: Attr<string | readonly string[], {
           arrayOk: true;
           description: "Marker outline color, one per point, or numbers mapped through its `colorscale`.";
           editType: "style";
        }>;
        coloraxis: AttrSpec<string, string | undefined>;
        colorscale: AttrSpec<ColorScale, ColorScale | undefined>;
        reversescale: AttrSpec<boolean, boolean>;
        width: Attr<
           | number
           | TypedArray
           | readonly number[], {
           arrayOk: true;
           description: "Marker outline width in CSS px, or one per point. Default 0, 1 for bubbles.";
           editType: "style";
           min: 0;
        }>;
     }>;
     maxdisplayed: Attr<number, {
        description: "Draw at most this many markers (evenly strided over the data); 0 draws all.";
        dflt: 0;
        editType: "plot";
        min: 0;
     }>;
     opacity: Attr<
        | number
        | TypedArray
        | readonly number[], {
        animatable: true;
        arrayOk: true;
        description: "Marker opacity (multiplied by the trace `opacity`), or one per point. Default 1, 0.7 for bubbles.";
        editType: "style";
        max: 1;
        min: 0;
     }>;
     reversescale: AttrSpec<boolean, boolean>;
     showscale: AttrSpec<boolean, boolean>;
     size: Attr<
        | number
        | TypedArray
        | readonly number[], {
        animatable: true;
        arrayOk: true;
        description: "Marker diameter in CSS px, or one value per point (scaled by `sizeref`/`sizemode`).";
        dflt: 6;
        editType: "calc";
        min: 0;
     }>;
     sizemin: Attr<number, {
        description: "Minimum radius (px) of markers with per-point `size` values.";
        dflt: 0;
        editType: "calc";
        min: 0;
     }>;
     sizemode: Attr<"area" | "diameter", {
        description: "How per-point `size` values become px: proportional to the diameter or to the area (bubble charts).";
        dflt: "diameter";
        editType: "calc";
        values: readonly ["diameter", "area"];
     }>;
     sizeref: Attr<number, {
        description: "Divides per-point `size` values (bubble charts; see `sizemode`).";
        dflt: 1;
        editType: "calc";
     }>;
     symbol: Attr<
        | PrimitiveValue
        | readonly PrimitiveValue[], {
        accepts: (value) => boolean;
        arrayOk: true;
        description: "Marker symbol: a name (`'diamond-open'`), a Plotly numeric code, a custom symbol registered with `symbols.register` (with the same `-open` / `-dot` variants), a `'text:…'` glyph such as `'text:🚀'`, or one per point.";
        dflt: "circle";
        editType: "style";
        values: readonly PrimitiveValue[];
     }>;
  }>;
  mode: Attr<
     | "none"
     | "lines"
     | "markers"
     | "text"
     | `lines+${string}`
     | `markers+${string}`
     | `text+${string}`, {
     description: "Drawing mode. Defaults to `'lines+markers'` below 20 points, else `'lines'` (Plotly rule).";
     editType: "calc";
     extras: readonly ["none"];
     flags: readonly ["lines", "markers", "text"];
  }>;
  orientation: Attr<"v" | "h", {
     description: "Stacking direction in a `stackgroup`: `'v'` adds y values, `'h'` x values. The first trace of the group that sets it decides; default `'h'` when only `x` is given, else `'v'`.";
     editType: "calc";
     values: readonly ["v", "h"];
  }>;
  selected: ObjectNode<{
     marker: ObjectNode<{
        color: Attr<string, {
           description:   | "Marker color of selected points."
              | "Marker color of unselected points.";
           editType: "style";
        }>;
        opacity: Attr<number, {
           description:   | "Marker opacity of selected points."
              | "Marker opacity of selected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set."
              | "Marker opacity of unselected points."
              | "Marker opacity of unselected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set.";
           editType: "style";
           max: 1;
           min: 0;
        }>;
        size: Attr<number, {
           description:   | "Marker size (px) of selected points."
              | "Marker size (px) of unselected points.";
           editType: "style";
           min: 0;
        }>;
     }>;
     textfont: ObjectNode<{
        color: Attr<string, {
           description: "Text color of selected points." | "Text color of unselected points.";
           editType: "style";
        }>;
     }>;
  }>;
  stackgaps: Attr<"infer zero" | "interpolate", {
     description: "What a `stackgroup` trace contributes where other traces of the group have a position it lacks (or where its value is missing): zero, or a value interpolated linearly between its neighbors (constant beyond its ends). The first trace of the group that sets it decides.";
     dflt: "infer zero";
     editType: "calc";
     values: readonly ["infer zero", "interpolate"];
  }>;
  stackgroup: Attr<string, {
     description: "Stack this trace on the previous traces of the same group on its subplot: their y values add up (x values for `orientation: 'h'`). Stacking turns `fill` on (`'tonexty'` / `'tonextx'`) and makes `mode` default to `'lines'`. Only numeric (linear or log) value axes stack.";
     dflt: "";
     editType: "calc";
  }>;
  text: Attr<string | readonly string[], {
     arrayOk: true;
     description: "Text per point: the labels of `mode` `text`, and hover text.";
     dflt: "";
     editType: "plot";
  }>;
  textfont: ObjectNode<{
     color: Attr<string | readonly string[], {
        arrayOk: true;
        description: "Text color, or one per point.";
        editType: "style";
     }>;
     family: Attr<string | readonly string[], {
        arrayOk: true;
        description: "CSS font family of the text labels, or one per point.";
        editType: "plot";
        noBlank: true;
        strict: true;
     }>;
     size: Attr<
        | number
        | TypedArray
        | readonly number[], {
        arrayOk: true;
        description: "Font size in CSS px, or one per point.";
        editType: "plot";
        min: 1;
     }>;
     style: Attr<"normal" | "italic", {
        description: "Font style.";
        editType: "plot";
        values: readonly ["normal", "italic"];
     }>;
     weight: Attr<number | "normal" | "bold", {
        description: "Font weight: a CSS numeric weight, `normal` or `bold`.";
        editType: "plot";
        extras: readonly ["normal", "bold"];
        max: 1000;
        min: 1;
     }>;
  }>;
  textposition: Attr<string | readonly string[], {
     arrayOk: true;
     description: "Where text labels sit relative to their point (and marker), or one per point.";
     dflt: "middle center";
     editType: "plot";
     values: readonly string[];
  }>;
  texttemplate: Attr<string | readonly string[], {
     arrayOk: true;
     description: "Template for the text labels, e.g. `'%{y:.2f}'` or `'%{x|%b %d}'` (d3-format / d3-time-format after `:` / `|`). Keys: `x`, `y`, `text`, `customdata`, `marker.size`, `marker.color`, `meta`. Overrides `text`.";
     dflt: "";
     editType: "plot";
  }>;
  unselected: ObjectNode<{
     marker: ObjectNode<{
        color: Attr<string, {
           description:   | "Marker color of selected points."
              | "Marker color of unselected points.";
           editType: "style";
        }>;
        opacity: Attr<number, {
           description:   | "Marker opacity of selected points."
              | "Marker opacity of selected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set."
              | "Marker opacity of unselected points."
              | "Marker opacity of unselected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set.";
           editType: "style";
           max: 1;
           min: 0;
        }>;
        size: Attr<number, {
           description:   | "Marker size (px) of selected points."
              | "Marker size (px) of unselected points.";
           editType: "style";
           min: 0;
        }>;
     }>;
     textfont: ObjectNode<{
        color: Attr<string, {
           description: "Text color of selected points." | "Text color of unselected points.";
           editType: "style";
        }>;
     }>;
  }>;
  x: AttrSpec<DataArray, DataArray | undefined>;
  x0: AttrSpec<unknown, unknown>;
  xperiod: AttrSpec<unknown, unknown>;
  xperiod0: AttrSpec<unknown, unknown>;
  xperiodalignment: Attr<"start" | "middle" | "end", {
     description:   | "Where points sit within their `xperiod`."
        | "Where points sit within their `yperiod`.";
     dflt: "middle";
     editType: "calc";
     values: readonly ["start", "middle", "end"];
  }>;
  y: AttrSpec<DataArray, DataArray | undefined>;
  y0: AttrSpec<unknown, unknown>;
  yperiod: AttrSpec<unknown, unknown>;
  yperiod0: AttrSpec<unknown, unknown>;
  yperiodalignment: Attr<"start" | "middle" | "end", {
     description:   | "Where points sit within their `xperiod`."
        | "Where points sit within their `yperiod`.";
     dflt: "middle";
     editType: "calc";
     values: readonly ["start", "middle", "end"];
  }>;
  zorder: Attr<number, {
     description: "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, scatter traces draw above bars (Plotly’s layer order), then in trace order.";
     dflt: 0;
     editType: "plot";
  }>;
}>;

Experimental

The scatter schema. Common trace attributes (name, opacity, xaxis, …) come from core.

Released under the MIT License.