Loading...
stackEnter is an animation effect for stacked graphic elements, primarily used for entrance animations in stacked charts. Its core functionality is to present the layered and cumulative relationships of data in a more intuitive and visually appealing way through dynamic transitions.
Through stackEnter
, AntV makes the initial rendering of stacked charts more expressive, enhancing the clarity of data presentation and user experience.
stackEnter
renders each data layer sequentially in stacking order (from bottom to top), creating a progressive layering animation effect.Property | Description | Type | Default Value |
---|---|---|---|
groupBy | Select a grouping channel | string | string[] | x |
reducer | Grouping value method | (I: number[], V: any[]) => any | (I, V) => V[I[0]] |
orderBy | Sorting channel | string | null |
reverse | Whether to reverse order | boolean | true |
duration | Animation duration (in milliseconds) | number | 3000 |
When stackEnter
executes, data needs to be grouped, and stackEnter
calculation logic is performed within each group. For example, for area charts, y data under the same x value needs to be grouped, then min-max processing logic is applied within the group, so stackEnter
is set to the x
channel.
Theoretically, stackEnter
can be set to all channel values. For details, refer to the encode documentation. All enumerated values are as follows:
export type ChannelTypes =| 'x'| 'y'| 'z'| 'x1'| 'y1'| 'series'| 'color'| 'opacity'| 'shape'| 'size'| 'key'| 'groupKey'| 'position'| 'series'| 'enterType'| 'enterEasing'| 'enterDuration'| 'enterDelay'| 'updateType'| 'updateEasing'| 'updateDuration'| 'updateDelay'| 'exitType'| 'exitEasing'| 'exitDuration'| 'exitDelay'| `position${number}`;
The reducer is a function used to process data after grouping. It receives two parameters:
I
: Array of data indices, representing the index positions of each group's data in the original datasetV
: Array of original data values, containing all data itemsBy default, the reducer returns the first element value of each group: (I, V) => V[I[0]]
, but you can customize this function to implement specific data processing logic, such as summing or averaging, to give charts a clearer organization. Here are simple examples for reference:
// Use custom reducer to calculate the sum of each group's datachart.options({// ...transform: [{type: 'stackEnter',groupBy: 'x',reducer: (indices, values) => {// Calculate the sum of all values in the current groupreturn indices.reduce((sum, index) => sum + values[index].value, 0);},},],});// Use custom reducer to calculate the average of each group's datachart.options({// ...transform: [{type: 'stackEnter',groupBy: 'x',reducer: (indices, values) => {const sum = indices.reduce((acc, index) => acc + values[index].value,0,);return sum / indices.length; // Return average value},},],});
The following is a simple example code demonstrating how to use stackEnter
and its visual effects.
import { Chart } from '@antv/g2';const chart = new Chart({ container: 'container' });chart.options({type: 'interval',data: [{ type: 'Apple', year: '2001', value: 260 },{ type: 'Orange', year: '2001', value: 100 },{ type: 'Banana', year: '2001', value: 90 },{ type: 'Apple', year: '2002', value: 210 },{ type: 'Orange', year: '2002', value: 150 },{ type: 'Banana', year: '2002', value: 30 },],encode: {x: 'year',y: 'value',color: 'type',series: 'type',enterDuration: 1000,},transform: [{ type: 'stackEnter', groupBy: 'x' }],});chart.render();
Finally, the following effect is presented (dynamic effect):