Scatter Chart
Scatter and bubble plots, with optional size and grouping fields. The right tool when you are looking for a relationship between two variables rather than a trend over time.


Reach for it when you need:
- Temperature against yield
- Speed against reject rate, grouped by product
Component name: ScatterChart · Category: Chart
In the palette: Scatter / bubble (size + group fields). Bind data to a named query; click a point to expose {{point.value}} ([x, y]).
Properties
Any property can be bound to a tag, another component's property, or a query.
| Property | Type | Default | Description |
|---|---|---|---|
data | array | [{"x":12,"y":18,"size":14,"group":"Line A"},{"x":15,"y":22,"… (truncated) | Array of row objects. Bind to a named query ({{query.MyQuery}}), a tag, or edit inline. Rows map to series via categoryField + seriesFields (auto-derived when empty). |
animation | boolean | true | Enable enter/update animation. |
animationDuration | number | 600 | ms. |
animationEasing | enum | cubicOut | Options: linear · cubicIn · cubicOut · cubicInOut · quadraticOut · elasticOut · bounceOut. |
animationDelay | number | 0 | Per-datum stagger (ms). |
title | object | {"show":true,"text":"","subtext":"","left":"left"} | — |
↳ title.show | boolean | true | — |
↳ title.text | string | "" | — |
↳ title.subtext | string | "" | — |
↳ title.left | enum | left | Options: left · center · right. |
legend | object | {"show":true,"type":"plain","orient":"horizontal","left":"ce… (truncated) | — |
↳ legend.show | boolean | true | — |
↳ legend.type | enum | plain | Options: plain · scroll. |
↳ legend.orient | enum | horizontal | Options: horizontal · vertical. |
↳ legend.left | enum | center | Options: left · center · right. |
↳ legend.placement | enum | bottom | Options: top · bottom. |
tooltip | object | {"show":true,"trigger":"axis","axisPointerType":"line"} | — |
↳ tooltip.show | boolean | true | — |
↳ tooltip.trigger | enum | axis | item = per datum; axis = whole category (cartesian). Options: item · axis · none. |
↳ tooltip.axisPointerType | enum | line | Options: line · shadow · cross. |
colorPalette | string | "" | Comma-separated series colors (e.g. #2563eb, #16a34a). Empty ⇒ theme palette. |
backgroundColor | color | "" | Empty ⇒ transparent/theme. |
xAxis | object | {"show":true,"name":"","type":"category","min":"","max":"","… (truncated) | — |
↳ xAxis.show | boolean | true | — |
↳ xAxis.name | string | "" | — |
↳ xAxis.type | enum | category | Options: category · value · time · log. |
↳ xAxis.min | number | "" | Empty ⇒ auto-scale. |
↳ xAxis.max | number | "" | Empty ⇒ auto-scale. |
↳ xAxis.splitLine | boolean | false | — |
↳ xAxis.boundaryGap | boolean | false | — |
↳ xAxis.inverse | boolean | false | — |
↳ xAxis.rotate | number | 0 | Rotate axis labels (degrees). |
yAxis | object | {"show":true,"name":"","type":"value","min":"","max":"","spl… (truncated) | — |
↳ yAxis.show | boolean | true | — |
↳ yAxis.name | string | "" | — |
↳ yAxis.type | enum | value | Options: category · value · time · log. |
↳ yAxis.min | number | "" | Empty ⇒ auto-scale. |
↳ yAxis.max | number | "" | Empty ⇒ auto-scale. |
↳ yAxis.splitLine | boolean | true | — |
↳ yAxis.scale | boolean | false | Don't force the axis to start at zero. |
↳ yAxis.inverse | boolean | false | — |
↳ yAxis.rotate | number | 0 | Rotate axis labels (degrees). |
grid | object | {"left":8,"right":16,"containLabel":true} | — |
↳ grid.left | number | 8 | — |
↳ grid.right | number | 16 | — |
↳ grid.containLabel | boolean | true | — |
dataZoom | object | {"enabled":false,"type":"inside","start":0,"end":100} | — |
↳ dataZoom.enabled | boolean | false | — |
↳ dataZoom.type | enum | inside | Options: inside · slider · both. |
↳ dataZoom.start | number | 0 | — |
↳ dataZoom.end | number | 100 | — |
xField | string | "" | COLUMN NAME for the X value. Empty ⇒ first numeric column. |
yField | string | "" | COLUMN NAME for the Y value. Empty ⇒ second numeric column. |
sizeField | string | size | Bubble size: COLUMN NAME whose value sizes each bubble (a field like 'size', not a number). Empty ⇒ all points the same size. |
groupField | string | group | Series split: COLUMN NAME to split points into colored series/legend groups (e.g. 'grp'). Empty ⇒ one series. |
symbol | enum | circle | Options: circle · rect · roundRect · triangle · diamond · pin · arrow · none. |
symbolSize | number | 24 | Point diameter in px. With a sizeField set, this is the LARGEST bubble; values scale up to it. Raise it for bigger bubbles. |
enableClick | boolean | true | Fire the Data click event + expose lastClicked. |
lastClicked | object | {} | Output (bind from this): the last-clicked datum — {{ ThisChart.lastClicked.value }}. |
optionOverride | string | "" | Power user: paste a raw JSON object of chart options to deep-merge over the built chart, e.g. {"series":[{"itemStyle":{"color":"#e11"}}]}. Empty = none. |
emptyMessage | string | No data | — |
style | style | {} | Custom CSS properties |
Events
Attach event actions to these in the Event Manager.
| Event | Label | Group | Payload |
|---|---|---|---|
click | Click | Mouse | The DOM event. |
dblclick | Double click | Mouse | The DOM event. |
contextmenu | Right click | Mouse | The DOM event. |
mouseenter | Mouse enter | Mouse | The DOM event. |
mouseleave | Mouse leave | Mouse | The DOM event. |
dataClick | Data click | Chart | context.point — the clicked data point. |
dataDblClick | Data double click | Chart | context.point — the clicked data point. |
legendSelect | Legend toggle | Chart | The toggled series. |
Right-click behaves differently in the Designer
contextmenu fires your configured actions at runtime only — in LiveView and in preview. On the Designer canvas the right-click is captured to open the Event Manager, so testing it there will not run your actions. Test right-click in preview.