Skip to content

elementHighlightByColor

Overview

The elementHighlightByColor interaction targets chart elements. When the mouse hovers over an element, it highlights all elements with the same color channel value as the hovered element.

  • Trigger: Mouse hover over element.

  • End: Mouse leaves element.

  • Affected states:

Hovered elements change to active state.

Other elements change to inactive state.

Built-in interaction states:

({
  // Active state elements have 1px black border
  state: { active: { lineWidth: '1', stroke: '#000' } },
});
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/f129b517-158d-41a9-83a3-3294d639b39e.csv',
    format: 'csv',
  },
  encode: { x: 'state', y: 'population', color: 'age' },
  transform: [
    { type: 'stackY' },
    { type: 'sortX', by: 'y', reverse: true, slice: 5 },
  ],
  state: {
    active: { fill: 'red', linkFillOpacity: 0.5 },
    inactive: { opacity: 0.5 },
  },
  axis: { y: { labelFormatter: '~s' } },
  interaction: { elementHighlightByColor: { link: true } },
});

chart.render();

Usage

There are two ways to configure the elementHighlightByColor interaction:

First, pass a boolean to set whether to enable the interaction.

({
  type: 'interval',
  interaction: { elementHighlightByColor: true }, // Use default configuration
});

Second, pass configuration options to configure the interaction.

({
  type: 'line',
  interaction: {
    elementHighlightByColor: {
      background: true,
    },
  },
});

Configuration Level

Interaction can be configured at the Mark level:

({
  type: 'interval',
  interaction: { elementHighlightByColor: 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: { elementHighlightByColor: true },
});

Configuration Options

Element highlight interaction configuration has two parts:

  1. Interaction configuration
  2. Element highlight style

Interaction configuration

Property Description Type Default
background Whether to highlight background boolean false
region Whether to trigger highlight when mouse moves to empty area of element (see below) boolean false
link Whether to show connection lines boolean false
example

Element highlight style configuration

Property Description Type Default
offset Offset in the main direction number 0
background Whether to highlight background backgroundStyle See backgroundstyle
link Whether to show connection lines linkStyle See linkStyle

backgroundStyle

Element highlight background style, see example Custom Highlight

Property Description Type Default Required
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
({
  state: {
    active: {
      backgroundRadius: 50,
      backgroundFill: '#000',
      backgroundFillOpacity: 0.9,
      backgroundStroke: '#DAF5EC',
      backgroundStrokeOpacity: 0.9,
      backgroundLineWidth: 2,
      backgroundLineDash: [4, 8],
      backgroundOpacity: 1,
      backgroundShadowColor: '#d3d3d3',
      backgroundShadowBlur: 10,
      backgroundShadowOffsetX: 10,
      backgroundShadowOffsetY: 10,
      backgroundCursor: 'pointer',
    },
  },
});

linkStyle

Connection style, see example Connection Line Highlight

Property Description Type Default Required
linkRadius Connection line border radius number | (datum, index, data) => number 0
linkFill Connection line fill color string | (datum, index, data) => string transparent
linkFillOpacity Connection line fill opacity number | (datum, index, data) => number -
linkStroke Connection line stroke string | (datum, index, data) => string -
linkStrokeOpacity Connection line stroke opacity number | (datum, index, data) => number -
linkLineWidth Connection line stroke width number | (datum, index, data) => number -
linkLineDash Connection line 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] -
linkOpacity Connection line overall opacity number | (datum, index, data) => number -
linkShadowColor Connection line shadow color string | (datum, index, data) => string -
linkShadowBlur Connection line shadow Gaussian blur coefficient number | (datum, index, data) => number -
linkShadowOffsetX Set horizontal distance of shadow from connection line number | (datum, index, data) => number -
linkShadowOffsetY Set vertical distance of shadow from connection line number | (datum, index, data) => number -
linkCursor Connection line mouse cursor style. Same as CSS cursor style. string | (datum, index, data) => string default
({
  state: {
    active: {
      linkRadius: 50,
      linkFill: '#000',
      linkFillOpacity: 0.9,
      linkStroke: '#DAF5EC',
      linkStrokeOpacity: 0.9,
      linkLineWidth: 2,
      linkLineDash: [4, 8],
      linkOpacity: 1,
      linkShadowColor: '#d3d3d3',
      linkShadowBlur: 10,
      linkShadowOffsetX: 10,
      linkShadowOffsetY: 10,
      linkCursor: 'pointer',
    },
  },
});

Events

Listening to Events

The following events are supported:

  • element:highlight - Triggered when element is highlighted
  • element:unhighlight - Triggered when element highlight is removed
chart.on('element:highlight', (e) => {
  console.log(e.data.data);
  console.log(e.data.group);
  console.log(e.nativeEvent);
});

chart.on('element:unhighlight', (e) => {
  console.log(e.nativeEvent);
});

Triggering Interaction

The following events are supported:

  • element:highlight - Highlight data
  • element:unhighlight - Remove highlight
chart.emit('element:highlight', {
  data: { data: { population: 5038433 } },
});

chart.emit('element:unhighlight', {});

Examples

Basic Highlight

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/f129b517-158d-41a9-83a3-3294d639b39e.csv',
    format: 'csv',
  },
  encode: { x: 'state', y: 'population', color: 'age' },
  transform: [
    { type: 'stackY' },
    { type: 'sortX', by: 'y', reverse: true, slice: 5 },
  ],
  state: {
    active: { fill: 'red', linkFillOpacity: 0.5 },
    inactive: { opacity: 0.5 },
  },
  axis: { y: { labelFormatter: '~s' } },
  interaction: { elementHighlightByColor: true },
});

chart.render();

Connection Line Highlight

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/f129b517-158d-41a9-83a3-3294d639b39e.csv',
    format: 'csv',
  },
  encode: { x: 'state', y: 'population', color: 'age' },
  transform: [
    { type: 'stackY' },
    { type: 'sortX', by: 'y', reverse: true, slice: 5 },
  ],
  state: {
    active: {
      fill: 'red',
      linkRadius: 50,
      linkFill: 'green',
      linkFillOpacity: 0.9,
      linkStroke: '#DAF5EC',
      linkStrokeOpacity: 0.9,
      linkLineWidth: 2,
      linkOpacity: 1,
      linkCursor: 'pointer',
    },
    inactive: { opacity: 0.5 },
  },
  axis: { y: { labelFormatter: '~s' } },
  interaction: {
    elementHighlightByColor: { link: true, background: true },
  },
});

chart.render();

Transpose

import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
});
chart.options({
  type: 'interval',
  height: 600,
  transform: [
    { type: 'stackY' },
    { type: 'sortX', by: 'y', reverse: true, slice: 5 },
  ],
  coordinate: { transform: [{ type: 'transpose' }] },
  data: {
    type: 'fetch',
    value:
      'https://gw.alipayobjects.com/os/bmw-prod/f129b517-158d-41a9-83a3-3294d639b39e.csv',
    format: 'csv',
  },
  legend: false,
  encode: {
    x: 'state',
    y: 'population',
    color: 'age',
  },
  axis: {
    y: { labelFormatter: '~s' },
  },
  scale: {
    x: { paddingInner: 0.2 },
  },
  state: {
    active: {
      linkFill: (d) => (d.state === 'CA' ? 'red' : undefined),
      stroke: '#000',
      lineWidth: 1,
      linkFillOpacity: 0.5,
    },
    inactive: {
      opacity: 0.6,
    },
  },
  interaction: {
    elementHighlightByColor: {
      link: true,
    },
  },
});

chart.render();
© Copyright 2026 Ant Group Co., Ltd..备案号:京ICP备15032932号-38
Site search
Documentation and examplesType to start searching

Search documentation, APIs, and examples

↑↓Select↵OpenEscClose