logo

G2

  • Chart Gallery
  • Docs
  • Examples
  • Theme
  • Ecosystem
  • Productsantv logo arrow
  • 5.3.3
  • Get Started
  • Introduction
    • What is G2
    • Using in Frontend Frameworks
    • Experimental Spec API
  • Chart API
  • Core Concepts
    • Chart
      • Components of G2 Charts
      • How to Use Charts
    • Mark
      • Overview
      • area
      • box
      • boxplot
      • cell
      • chord
      • density
      • gauge
      • heatmap
      • image
      • interval
      • line
      • lineX
      • lineY
      • link
      • liquid
      • sunburst
      • point
      • polygon
      • range
      • rangeX
      • rangeY
      • rect
      • shape
      • text
      • vector
      • connector
      • wordCloud
    • View
    • Data
      • Overview
      • custom
      • ema
      • fetch
      • filter
      • fold
      • inline
      • join
      • kde
      • log
      • map
      • pick
      • rename
      • slice
      • sort
      • sortBy
    • Encode
    • Scale
      • Overview
      • band
      • linear
      • log
      • ordinal
      • point
      • quantile
      • quantize
      • sqrt
      • threshold
      • time
      • pow
    • Transform
      • Overview
      • bin
      • binX
      • diffY
      • dodgeX
      • flexX
      • group
      • groupColor
      • groupX
      • groupY
      • jitter
      • jitterX
      • jitterY
      • normalizeY
      • pack
      • sample
      • select
      • selectX
      • selectY
      • sortColor
      • sortX
      • sortY
      • stackEnter
      • stackY
      • symmetryY
    • Coordinate
      • Overview
      • fisheye
      • parallel
      • polar
      • theta
      • transpose
      • radial
      • cartesian3D
      • helix
    • Style
    • Animate
      • Overview
      • fadeIn
      • fadeOut
      • growInX
      • growInY
      • morphing
      • pathIn
      • scaleInX
      • scaleInY
      • scaleOutX
      • scaleOutY
      • waveIn
      • zoomIn
      • zoomOut
    • State
    • Interaction
      • Overview
      • brushAxisHighlight
      • brushHighlight
      • brushXHighlight
      • brushYHighlight
      • brushFilter
      • brushXFilter
      • brushYFilter
      • chartIndex
      • elementHighlight
      • elementHighlightByColor
      • elementHighlightByX
      • elementSelect
      • elementSelectByColor
      • elementSelectByX
      • legendFilter
      • legendHighlight
      • poptip
      • scrollbarFilter
      • sliderFilter
      • fisheye
    • Composition
      • Overview
      • facetCircle
      • facetRect
      • repeatMatrix
      • spaceFlex
      • spaceLayer
      • timingKeyframe
    • Theme
      • Overview
      • academy
      • classic
      • classicDark
    • Events
    • Color Mapping
  • Chart Component
    • Title
    • Axis
    • Legend
    • Scrollbar
    • Slider
    • Tooltip
    • Data Label
  • Extra Topics
    • Graph
      • forceGraph
      • pack
      • sankey
      • tree
      • treemap
    • Geo
      • geoPath
      • geoView
    • 3D
      • Draw 3D Chart
      • point3D
      • line3D
      • interval3D
      • surface3D
    • Plugin
      • renderer
      • rough
      • lottie
      • a11y
    • Package on demand
    • Set pattern
    • Server-Side Rendering (SSR)
    • Spec Function Expression Support (Available in 5.3.0)
  • Whats New
    • New Version Features
    • Migration from v4 to v5
  • Frequently Asked Questions (FAQ)

elementSelect

Previous
elementHighlightByX
Next
elementSelectByColor

Resources

Ant Design
Galacea Effects
Umi-React Application Framework
Dumi-Component doc generator
ahooks-React Hooks Library

Community

Ant Financial Experience Tech
seeconfSEE Conf-Experience Tech Conference

Help

GitHub
StackOverflow

more productsMore Productions

Ant DesignAnt Design-Enterprise UI design language
yuqueYuque-Knowledge creation and Sharing tool
EggEgg-Enterprise-class Node development framework
kitchenKitchen-Sketch Tool set
GalaceanGalacean-互动图形解决方案
xtechLiven Experience technology
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

Overview

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 border
state: { selected: { lineWidth: '1', stroke: '#000' } },
});

The interaction supports two modes:

  1. Multi-select mode (default): Multiple elements can be selected simultaneously
  2. Single-select mode: Enabled by setting single: true, only one element can be selected at a time
example
import { 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();

Usage

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
},
},
});

Configuration Level

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 },
});

Configuration Options

Element select interaction configuration has two parts:

  1. Interaction configuration
  2. Element selection style

Interaction Configuration

PropertyDescriptionTypeDefault
backgroundWhether to highlight backgroundbooleanfalse
regionWhether clicking empty area triggers selectionbooleanfalse
singleWhether single-select mode. When set to true, only one element can be selected at a time. Clicking a selected element deselects itbooleanfalse
multipleSelectHotkeyHotkey code for multi-select. Hold hotkey to enable multi-select. When set, single becomes invalid. Default to multi-select modestring | string[]-

Element Selection Style

Element selection style, see example Custom Selection

PropertyDescriptionTypeDefaultRequired
offsetOffset in the main directionnumber0
radiusElement border radiusnumber | (datum, index, data) => number0
fillElement fill colorstring | (datum, index, data) => string-
fillOpacityElement fill opacitynumber | (datum, index, data) => number-
strokeElement strokestring | (datum, index, data) => string-
strokeOpacityElement stroke opacitynumber | (datum, index, data) => number-
lineWidthElement stroke widthnumber | (datum, index, data) => number-
lineDashElement 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]-
opacityElement overall opacitynumber | (datum, index, data) => number-
shadowColorElement shadow colorstring | (datum, index, data) => string-
shadowBlurElement shadow Gaussian blur coefficientnumber | (datum, index, data) => number-
shadowOffsetXSet horizontal distance of shadow from elementnumber | (datum, index, data) => number-
shadowOffsetYSet vertical distance of shadow from elementnumber | (datum, index, data) => number-
cursorElement mouse cursor style. Same as CSS cursor style.string | (datum, index, data) => stringdefault
backgroundRadiusBackground border radiusnumber | (datum, index, data) => number0
backgroundFillBackground fill colorstring | (datum, index, data) => stringtransparent
backgroundFillOpacityBackground fill opacitynumber | (datum, index, data) => number-
backgroundStrokeBackground strokestring | (datum, index, data) => string-
backgroundStrokeOpacityBackground stroke opacitynumber | (datum, index, data) => number-
backgroundLineWidthBackground stroke widthnumber | (datum, index, data) => number-
backgroundLineDashBackground 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]-
backgroundOpacityBackground overall opacitynumber | (datum, index, data) => number-
backgroundShadowColorBackground shadow colorstring | (datum, index, data) => string-
backgroundShadowBlurBackground shadow Gaussian blur coefficientnumber | (datum, index, data) => number-
backgroundShadowOffsetXSet horizontal distance of shadow from backgroundnumber | (datum, index, data) => number-
backgroundShadowOffsetYSet vertical distance of shadow from backgroundnumber | (datum, index, data) => number-
backgroundCursorBackground mouse cursor style. Same as CSS cursor style.string | (datum, index, data) => stringdefault

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',
},
},
});

Events

Listening to Events

The following events are supported:

  • element:select - Triggered when element is selected
  • element:unselect - Triggered when element is deselected
chart.on('element:select', (e) => {
console.log(e.data.data);
console.log(e.nativeEvent);
});
chart.on('element:unselect', (e) => {
console.log(e.nativeEvent);
});

Triggering Interaction

The following events are supported:

  • element:select - Select data
  • element:unselect - Deselect
chart.emit('element:select', {
data: { data: [{ population: 5038433 }, { population: 3983091 }] },
});
chart.emit('element:unselect', {});

Examples

Basic Selection

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();

Custom Selection

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();

Single-Select Mode

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 mode
background: true,
},
},
});
chart.render();

Multi-Select Mode

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 mode
background: true,
},
},
});
chart.render();