Loading...
The elementSelect
interaction targets chart elements. When clicking an element, that element will be selected.
Trigger: Click element.
End: Click the selected element again.
Affected states:
Selected elements change to selected
state.
Other elements change to unselected
state.
Built-in interaction states:
({// Selected state elements have 1px black borderstate: { selected: { lineWidth: '1', stroke: '#000' } },});
The interaction supports two modes:
single: true
, only one element can be selected at a timeimport { Chart } from '@antv/g2';const chart = new Chart({ container: 'container' });chart.options({type: 'interval',data: {type: 'fetch',value:'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',},encode: { x: 'letter', y: 'frequency' },state: { selected: { fill: 'orange' }, unselected: { opacity: 0.5 } },axis: { y: { labelFormatter: '.0%' } },interaction: { elementSelect: true },});chart.render();
There are two ways to configure the elementSelect
interaction:
First, pass a boolean
to set whether to enable the interaction.
({type: 'interval',interaction: { elementSelect: true }, // Use default configuration});
Second, pass configuration options to configure the interaction.
({type: 'line',interaction: {elementSelect: {background: true,single: true, // Set to single-select mode},},});
Interaction can be configured at the Mark level:
({type: 'interval',interaction: { elementSelect: true },});
It can also be configured at the View level. Interactions declared on the view will be passed to marks declared in children
. If the mark has declared the corresponding interaction, they will be merged; otherwise, it won't be affected.
({type: 'view',interaction: { elementSelect: true },});
Element select interaction configuration has two parts:
Property | Description | Type | Default |
---|---|---|---|
background | Whether to highlight background | boolean | false |
region | Whether clicking empty area triggers selection | boolean | false |
single | Whether single-select mode. When set to true, only one element can be selected at a time. Clicking a selected element deselects it | boolean | false |
multipleSelectHotkey | Hotkey code for multi-select. Hold hotkey to enable multi-select. When set, single becomes invalid. Default to multi-select mode | string | string[] | - |
Element selection style, see example Custom Selection
Property | Description | Type | Default | Required |
---|---|---|---|---|
offset | Offset in the main direction | number | 0 | |
radius | Element border radius | number | (datum, index, data) => number | 0 | |
fill | Element fill color | string | (datum, index, data) => string | - | |
fillOpacity | Element fill opacity | number | (datum, index, data) => number | - | |
stroke | Element stroke | string | (datum, index, data) => string | - | |
strokeOpacity | Element stroke opacity | number | (datum, index, data) => number | - | |
lineWidth | Element stroke width | number | (datum, index, data) => number | - | |
lineDash | Element stroke dash configuration. First value is dash length, second is gap length. Setting lineDash to [0,0] means no stroke. | [number,number] | (datum, index, data) => [number , number] | - | |
opacity | Element overall opacity | number | (datum, index, data) => number | - | |
shadowColor | Element shadow color | string | (datum, index, data) => string | - | |
shadowBlur | Element shadow Gaussian blur coefficient | number | (datum, index, data) => number | - | |
shadowOffsetX | Set horizontal distance of shadow from element | number | (datum, index, data) => number | - | |
shadowOffsetY | Set vertical distance of shadow from element | number | (datum, index, data) => number | - | |
cursor | Element mouse cursor style. Same as CSS cursor style. | string | (datum, index, data) => string | default | |
backgroundRadius | Background border radius | number | (datum, index, data) => number | 0 | |
backgroundFill | Background fill color | string | (datum, index, data) => string | transparent | |
backgroundFillOpacity | Background fill opacity | number | (datum, index, data) => number | - | |
backgroundStroke | Background stroke | string | (datum, index, data) => string | - | |
backgroundStrokeOpacity | Background stroke opacity | number | (datum, index, data) => number | - | |
backgroundLineWidth | Background stroke width | number | (datum, index, data) => number | - | |
backgroundLineDash | Background stroke dash configuration. First value is dash length, second is gap length. Setting lineDash to [0,0] means no stroke. | [number,number] | (datum, index, data) => [number , number] | - | |
backgroundOpacity | Background overall opacity | number | (datum, index, data) => number | - | |
backgroundShadowColor | Background shadow color | string | (datum, index, data) => string | - | |
backgroundShadowBlur | Background shadow Gaussian blur coefficient | number | (datum, index, data) => number | - | |
backgroundShadowOffsetX | Set horizontal distance of shadow from background | number | (datum, index, data) => number | - | |
backgroundShadowOffsetY | Set vertical distance of shadow from background | number | (datum, index, data) => number | - | |
backgroundCursor | Background mouse cursor style. Same as CSS cursor style. | string | (datum, index, data) => string | default |
When configuring background in selected elements, it's not configured as an object, but using the background
prefix with property names.
({state: {selected: {offset: 10,radius: 50,fill: '#1890FF',fillOpacity: 0.9,stroke: '#40A9FF',strokeOpacity: 0.9,lineWidth: 2,lineDash: [4, 8],opacity: 1,shadowColor: '#1890FF',shadowBlur: 10,shadowOffsetX: 5,shadowOffsetY: 5,cursor: 'pointer',backgroundRadius: 50,backgroundFill: '#E6F7FF',backgroundFillOpacity: 0.9,backgroundStroke: '#91D5FF',backgroundStrokeOpacity: 0.9,backgroundLineWidth: 2,backgroundLineDash: [4, 8],backgroundOpacity: 1,backgroundShadowColor: '#91D5FF',backgroundShadowBlur: 10,backgroundShadowOffsetX: 5,backgroundShadowOffsetY: 5,backgroundCursor: 'pointer',},},});
The following events are supported:
element:select
- Triggered when element is selectedelement:unselect
- Triggered when element is deselectedchart.on('element:select', (e) => {console.log(e.data.data);console.log(e.nativeEvent);});chart.on('element:unselect', (e) => {console.log(e.nativeEvent);});
The following events are supported:
element:select
- Select dataelement:unselect
- Deselectchart.emit('element:select', {data: { data: [{ population: 5038433 }, { population: 3983091 }] },});chart.emit('element:unselect', {});
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',});chart.options({type: 'interval',autoFit: true,data: {type: 'fetch',value:'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',},encode: { x: 'letter', y: 'frequency' },transform: [{ type: 'sortX', by: 'y', reverse: true, slice: 5 }],axis: { y: { labelFormatter: '.0%' } },interaction: { elementSelect: { background: true } },});chart.render();
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',});chart.options({type: 'interval',autoFit: true,data: {type: 'fetch',value:'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',},encode: { x: 'letter', y: 'frequency' },transform: [{ type: 'sortX', by: 'y', reverse: true, slice: 5 }],axis: { y: { labelFormatter: '.0%' } },state: {selected: {offset: 10,radius: 50,fill: (d) => (d.frequency > 0.1 ? '#F5222D' : '#1890FF'),fillOpacity: 0.9,stroke: (d) => (d.frequency > 0.1 ? '#FF4D4F' : '#40A9FF'),strokeOpacity: 0.9,lineWidth: 2,lineDash: [4, 8],opacity: 1,shadowColor: (d) => (d.frequency > 0.1 ? '#F5222D' : '#1890FF'),shadowBlur: 10,shadowOffsetX: 5,shadowOffsetY: 5,cursor: 'pointer',backgroundRadius: 50,backgroundFill: (d) => (d.frequency > 0.1 ? '#FFF1F0' : '#E6F7FF'),backgroundFillOpacity: 0.9,backgroundStroke: (d) => (d.frequency > 0.1 ? '#FFA39E' : '#91D5FF'),backgroundStrokeOpacity: 0.9,backgroundLineWidth: 2,backgroundLineDash: [4, 8],backgroundOpacity: 1,backgroundShadowColor: (d) => (d.frequency > 0.1 ? '#FFA39E' : '#91D5FF'),backgroundShadowBlur: 10,backgroundShadowOffsetX: 5,backgroundShadowOffsetY: 5,backgroundCursor: 'pointer',},},interaction: {elementSelect: {background: true,},},});chart.render();
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',});chart.options({type: 'interval',autoFit: true,data: {type: 'fetch',value:'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',},encode: { x: 'letter', y: 'frequency' },transform: [{ type: 'sortX', by: 'y', reverse: true, slice: 5 }],axis: { y: { labelFormatter: '.0%' } },interaction: {elementSelect: {single: true, // Set to single-select modebackground: true,},},});chart.render();
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',});chart.options({type: 'interval',autoFit: true,data: {type: 'fetch',value:'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',},encode: { x: 'letter', y: 'frequency' },transform: [{ type: 'sortX', by: 'y', reverse: true, slice: 5 }],axis: { y: { labelFormatter: '.0%' } },interaction: {elementSelect: {multipleSelectHotkey: 'ShiftLeft', // Hold left Shift key to enter multi-select modebackground: true,},},});chart.render();