logo

Ant Design Charts

  • 教程
  • 图表组件
  • 图表示例
  • 选项
  • 所有产品antv logo arrow
  • 2.0.0
  • 统计图表
    • 标题(Title)
    • 坐标轴(Axis)
    • 图例(Legend)
    • 滚动条(Scrollbar)
    • 缩略轴(Slider)
    • 提示信息(Tooltip)
    • 数据标签(Label)
    • 颜色映射(Color)
    • 事件(Event)
    • 交互(Interaction)
      • 概览
      • brushAxisHighlight
      • brushHighlight
      • brushXHighlight
      • brushYHighlight
      • brushFilter
      • brushXFilter
      • brushYFilter
      • chartIndex
      • elementHighlight
      • elementHighlightByColor
      • elementHighlightByX
      • elementSelect
      • elementSelectByColor
      • elementSelectByX
      • fisheye
      • legendFilter
      • legendHighlight
      • poptip
      • scrollbarFilter
      • sliderFilter
    • 状态(State)
    • 样式(Style)
    • 比例尺(Scale)
      • 概览
      • band
      • linear
      • log
      • ordinal
      • point
      • quantile
      • quantize
      • sqrt
      • threshold
      • time
      • pow
    • 动画(Animate)
      • 概览
      • fadeIn
      • fadeOut
      • growInX
      • growInY
      • morphing
      • pathIn
      • scaleInX
      • scaleInY
      • scaleOutX
      • scaleOutY
      • waveIn
      • zoomIn
      • zoomOut
    • 主题(Theme)
      • 概览
      • academy
      • classic
      • classicDark
    • 数据(Data)
      • 概览
      • custom
      • ema
      • fetch
      • filter
      • fold
      • inline
      • join
      • kde
      • log
      • map
      • pick
      • rename
      • slice
      • sort
      • sortBy

brushFilter

上一篇
brushYHighlight
下一篇
brushXFilter

Resources

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

概述

brushFilter 交互主要用于实现图表元素的动态范围筛选功能。通过鼠标刷选操作,用户可以在图表上划定特定区域(基于 x/y 轴坐标系),Ant Design Charts 会重新渲染该区域内符合筛选条件的图表元素。

example

典型应用场景:

数据探索:快速聚焦特定数据区间进行深入分析

异常检测:定位分布异常的离散数据点

对比分析:横向/纵向对比不同区间的数据特征

import { Scatter } from '@ant-design/plots';
import React from 'react';
import { createRoot } from 'react-dom';
const Demo = () => {
const config ={
autoFit: true,
data: {
type: 'fetch',
value:
'https://gw.alipayobjects.com/os/basement_prod/6b4aa721-b039-49b9-99d8-540b3f87d339.json',
},
xField: 'height',
yField: 'weight',
colorField: 'gender',
state: { inactive: { stroke: 'gray' } },
interaction: { brushFilter: true }
};
return <Scatter {...config} />;
};
createRoot(document.getElementById('container')).render(<Demo />);

使用方式

配置 brushFilter 交互有两种方式

快速启用模式

通过布尔值开启交互,使用默认配置:

({
interaction: { brushFilter: true }, // 启用默认配置的刷选过滤
});

自定义配置模式

通过配置项 精细化控制交互行为:

({
interaction: {
brushFilter: {
reverse: false, // 关闭反向选择
maskFill: '#rgba(0,0,0,0.3)', // 自定义蒙版颜色
},
},
});

配置层级

交互可以配置在 Mark 层级:

({
interaction: { brushFilter: true },
});

配置项

属性描述类型默认值必选
reversebrush 是否反转booleanfalse
mask框选区域的蒙版样式mask详见 mask

mask

配置框选区域的蒙版的样式。

属性描述类型默认值必选
maskFill蒙版的填充色string#777
maskFillOpacity蒙版的填充透明度number0.3
maskStroke蒙版的描边string#fff
maskStrokeOpacity描边透明度number
maskLineWidth蒙版描边的宽度number
maskLineDash描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。lineDash 设为[0,0]的效果为没有描边。[number,number]
maskOpacity蒙版的整体透明度number
maskShadowColor蒙版阴影颜色string
maskShadowBlur蒙版阴影的高斯模糊系数number
maskShadowOffsetX设置阴影距蒙版的水平距离number
maskShadowOffsetY设置阴影距蒙版的垂直距离number
maskCursor鼠标样式。同 css 的鼠标样式stringdefault

在配置框选区域的蒙版样式的时候,不是以对象的形式来配置,而是以 mask前缀加属性的方式来配置。

样式配置示例:

({
interaction: {
brushFilter: {
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.on('brush:filter', (event) => {
const {
data, // 筛选后的数据集合
nativeEvent, // 原始 DOM 事件
} = event;
console.log('当前选中范围:', data.selection);
});
chart.on('brush:filter', (event) => {
const {
data, // 筛选后的数据集合
nativeEvent, // 原始 DOM 事件
} = event;
console.log('当前选中范围:', data.selection);
});

触发交互

通过编程方式触发筛选:

chart.emit('brush:filter', {
data: {
selection: [
[50, 100],
[20, 80],
],
},
});

案例

import { Column } from '@ant-design/plots';
import React from 'react';
import { createRoot } from 'react-dom';
const DemoColumn = () => {
const config = {
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 },
],
autoFit: true,
interaction: {
brushFilter: {
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',
},
},
xField: 'letter',
yField: 'frequency',
};
return <Column {...config} />;
};
createRoot(document.getElementById('container')).render(<DemoColumn />);