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)

brushXFilter

Previous
brushFilter
Next
brushYFilter

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

brushXFilter interaction is a horizontal-constrained version of brushFilter, specifically designed for data filtering based on X-axis dimensions. This interaction restricts users to horizontal brush selection operations (along the X-axis direction only) to filter chart elements by range, particularly suitable for time series analysis, horizontal comparison, and other scenarios.

example

Key characteristics:

Unidirectional operation: Only allows horizontal direction brush selection, Y-axis range is automatically fully selected

Dimensional focus: Precise control of X-axis data range (such as time ranges, numerical intervals)

Responsive updates: Dynamically triggers view updates after filtering

import { Chart } from '@antv/g2';
const chart = new Chart({ container: 'container' });
chart.options({
type: 'line',
autoFit: true,
data: {
type: 'fetch',
value:
'https://gw.alipayobjects.com/os/antvdemo/assets/data/blockchain.json',
},
encode: {
x: (d) => new Date(d.date), // X-axis bound to time data
y: 'total',
},
interaction: {
brushXFilter: true, // Enable horizontal filtering
},
});
chart.render();

Usage

There are two ways to configure brushXFilter interaction:

Quick Enable Mode

Enable interaction with a boolean value using default configuration:

({
type: 'interval',
interaction: { brushXFilter: true }, // Enable X-axis brush filter with default configuration
});

Custom Configuration Mode

Fine-tune interaction behavior through configuration options:

({
type: 'interval',
interaction: {
brushXFilter: {
reverse: false, // Disable reverse selection
maskFill: '#rgba(0,0,0,0.3)', // Custom mask color
},
},
});

Configuration Level

Interaction can be configured at the Mark level:

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

Configuration Options

PropertyDescriptionTypeDefaultRequired
reverseWhether to reverse brushbooleanfalse
maskStyle of brush area maskmaskSee mask

mask

Configure the style of the brush area mask.

PropertyDescriptionTypeDefaultRequired
maskFillMask fill colorstring#777
maskFillOpacityMask fill opacitynumber0.3
maskStrokeMask strokestring#fff
maskStrokeOpacityStroke opacitynumber
maskLineWidthMask stroke widthnumber
maskLineDashStroke dash configuration. First value is dash length, second is gap length. Setting lineDash to [0,0] means no stroke.[number,number]
maskOpacityMask overall opacitynumber
maskShadowColorMask shadow colorstring
maskShadowBlurMask shadow Gaussian blur coefficientnumber
maskShadowOffsetXSet horizontal distance of shadow from masknumber
maskShadowOffsetYSet vertical distance of shadow from masknumber
maskCursorMouse cursor style. Same as CSS cursor stylestringdefault

When configuring the mask style of the brush area, it's not configured as an object, but using the mask prefix with property names.

Style configuration example:

({
interaction: {
brushXFilter: {
maskFill: '#000',
maskFillOpacity: 0.2,
maskStroke: 'red',
maskStrokeOpacity: 0.9,
maskLineWidth: 2,
maskLineDash: [4, 8],
maskOpacity: 0.2,
maskShadowColor: '#d3d3d3',
maskShadowBlur: 10,
maskShadowOffsetX: 10,
maskShadowOffsetY: 10,
maskCursor: 'pointer',
},
},
});

Events

Listening to Events

Listen to brush filter actions:

chart.on('brush:filter', (event) => {
const {
data, // Filtered data collection
nativeEvent, // Original DOM event
} = event;
const [xStart, xEnd] = data.selection[0];
console.log(`Filter range: ${xStart} ~ ${xEnd}`);
});

Triggering Interaction

Trigger filtering programmatically:

// Set X-axis filter range (timestamp example)
chart.emit('brush:filter', {
data: {
selection: [
[new Date('2023-01-01').getTime(), new Date('2023-06-30').getTime()],
],
},
});

Examples

import { Chart } from '@antv/g2';
const data = [
{ letter: 'A', frequency: 0.08167 },
{ letter: 'B', frequency: 0.01492 },
{ letter: 'C', frequency: 0.02782 },
{ letter: 'D', frequency: 0.04253 },
{ letter: 'E', frequency: 0.12702 },
{ letter: 'F', frequency: 0.02288 },
{ letter: 'G', frequency: 0.02015 },
{ letter: 'H', frequency: 0.06094 },
{ letter: 'I', frequency: 0.06966 },
{ letter: 'J', frequency: 0.00153 },
{ letter: 'K', frequency: 0.00772 },
{ letter: 'L', frequency: 0.04025 },
{ letter: 'M', frequency: 0.02406 },
{ letter: 'N', frequency: 0.06749 },
{ letter: 'O', frequency: 0.07507 },
{ letter: 'P', frequency: 0.01929 },
{ letter: 'Q', frequency: 0.00095 },
{ letter: 'R', frequency: 0.05987 },
{ letter: 'S', frequency: 0.06327 },
{ letter: 'T', frequency: 0.09056 },
{ letter: 'U', frequency: 0.02758 },
{ letter: 'V', frequency: 0.00978 },
{ letter: 'W', frequency: 0.0236 },
{ letter: 'X', frequency: 0.0015 },
{ letter: 'Y', frequency: 0.01974 },
{ letter: 'Z', frequency: 0.00074 },
];
const chart = new Chart({
container: 'container',
});
chart.options({
autoFit: true,
interaction: {
brushXFilter: {
maskFill: '#000',
maskFillOpacity: 0.2,
maskStroke: 'red',
maskStrokeOpacity: 0.9,
maskLineWidth: 2,
maskLineDash: [4, 8],
maskOpacity: 0.2,
maskShadowColor: '#d3d3d3',
maskShadowBlur: 10,
maskShadowOffsetX: 10,
maskShadowOffsetY: 10,
maskCursor: 'pointer',
},
},
});
chart.interval().data(data).encode('x', 'letter').encode('y', 'frequency');
chart.render();