Loading...
The sliderFilter interaction targets the data domain, filtering the displayed data range through slider controls. It allows users to dynamically adjust the data range displayed in visualization charts by dragging sliders, thus enabling interactive data filtering.
There are two ways to configure the sliderFilter interaction:
First, automatically enable slider filtering interaction by configuring the slider component:
({slider: {x: true,y: true,},});
Second, configure directly in the interaction:
({slider: {x: true,},interaction: {sliderFilter: true, // Use default configuration},});
The interaction can be configured at the View level:
({type: 'view',slider: { x: true, y: true },interaction: { sliderFilter: true },});
| Property | Description | Type | Default | Required |
|---|---|---|---|---|
| initDomain | Initialize coordinate axis range | { x: [number, number], y: [number, number] } | {} | |
| className | CSS class name for slider component | string | 'slider' | |
| prefix | Slider component prefix, used for identification and event naming | string | 'slider' | |
| setValue | Custom function to set slider value | (component, values) => void | (component, values) => component.setValues(values) | |
| hasState | Whether to save slider ratio state | boolean | false | |
| wait | Throttle wait time (milliseconds) | number | 50 | |
| leading | Whether to execute at the beginning during throttling | boolean | true | |
| trailing | Whether to execute at the end during throttling | boolean | false | |
| adaptiveMode | Adaptive filtering mode | 'filter' | false | null | 'filter' | |
| getInitValues | Function to get initial slider values | (slider) => [number, number] | undefined |
In addition to the configuration for sliderFilter interaction, the slider component itself has some important configuration options that affect the behavior of slider filtering:
| Property | Description | Type | Default | Required |
|---|---|---|---|---|
| padding | Slider inner padding | number | number[] | - | |
| values | Initial selection range of slider, in 0 ~ 1 interval | [number, number] | - | |
| slidable | Whether to allow dragging selection and handles | boolean | true |
For detailed documentation see Slider Component
The adaptiveMode configuration option controls the adaptive filtering behavior of the slider:
'filter': Enable adaptive filtering, dynamically adjust other a xi s' domain values based on selected data range (default value)false or null: Disable adaptive filteringHow Adaptive Filtering Works:
({slider: {x: { values: [0.1, 0.8] }},interaction: {sliderFilter: {adaptiveMode: 'filter' // Enable adaptive filtering (default value)// adaptiveMode: false // Disable adaptive filtering}}})
Slider filtering interaction supports the following events:
sliderX:filter - Trigger X axis filteringsliderY:filter - Trigger Y axis filteringchart.emit('sliderX:filter', {data: { selection: [['2001-01', '2001-03'], undefined] },});chart.emit('sliderY:filter', {data: { selection: [undefined, [50, 550]] },});
sliderX:filter - X axis slider filter eventsliderY:filter - Y axis slider filter eventchart.on('sliderX:filter', (event) => {const { data, nativeEvent } = event;if (nativeEvent) console.log('sliderX:filter', data.selection);});chart.on('sliderY:filter', (event) => {const { data, nativeEvent } = event;if (nativeEvent) console.log('sliderY:filter', data.selection);});
The following example shows how to add basic X-axis slider filtering functionality to a line chart:
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',});chart.options({type: 'line',autoFit: true,height: 300,data: {type: 'fetch',value:'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',},encode: { x: 'letter', y: 'frequency', y1: 0.000001 },slider: { x: true },interaction: {sliderFilter: {wait: 100,leading: false,tariling: true,},},});chart.render();
When only X-axis slider is configured, dragging the X-axis slider will automatically adjust the Y-axis display range:
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',autoFit: true,});// Generate interesting data with some outliersconst data = [];for (let i = 0; i < 50; i++) {const baseValue = Math.sin(i / 8) * 30 + 50;// Add outliers in specific rangeconst anomaly = (i >= 20 && i <= 25) ? Math.random() * 150 : 0;data.push({time: i,value: baseValue + anomaly + Math.random() * 10,category: i % 3 === 0 ? 'A' : i % 3 === 1 ? 'B' : 'C'});}chart.options({type: 'point',data,encode: { x: 'time', y: 'value', color: 'category' },slider: {x: {values: [0.2, 0.8],labelFormatter: (d) => `Time: ${Math.round(d)}`}},interaction: {sliderFilter: {adaptiveMode: 'filter' // Enable adaptive filtering}},style: {fillOpacity: 0.8}});chart.render();
When only Y-axis slider is configured, dragging the Y-axis slider will automatically adjust the X-axis display range:
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',autoFit: true,});chart.options({type: 'line',data: {type: 'fetch',value: 'https://gw.alipayobjects.com/os/bmw-prod/551d80c6-a6be-4f3c-a82a-abd739e12977.csv'},encode: { x: 'date', y: 'close' },slider: {y: {values: [0.1, 0.9],labelFormatter: (d) => `Price: ${Math.round(d)}`}},interaction: {sliderFilter: {adaptiveMode: 'filter' // Enable adaptive filtering}}});chart.render();
If adaptive functionality is not needed, you can explicitly disable it:
import { Chart } from '@antv/g2';const chart = new Chart({container: 'container',autoFit: true,});const data = [];for (let i = 0; i < 100; i++) {data.push({x: i,y: Math.sin(i / 10) * 50 + 100 + Math.random() * 20});}chart.options({type: 'line',data,encode: { x: 'x', y: 'y' },slider: {x: {values: [0.3, 0.7]}},interaction: {sliderFilter: {adaptiveMode: false // Disable adaptive filtering}},scale: {y: { domain: [0, 200] } // Fixed Y-axis range}});chart.render();