Stack
Edit this pageTo stack fields in Vega-Lite, users can either use the stack property of an encoding field definition or a stack transform inside the transform array.
Documentation Overview
Stack in Encoding Field Definition
// A Single View or a Layer Specification
{
...,
"mark/layer": ...,
"encoding": { // Encoding
"x" or "y": {
"field": ...,
"type": "quantitative",
"stack": ..., // Stack
...
},
...
},
...
}
The stack property of a position field definition determines type of stacking offset if the field should be stacked.
| Property | Type | Description |
|---|---|---|
| stack | String | Null | Boolean |
Type of stacking offset if the field should be stacked.
Default value: See also: |
Stack Bar Chart
Adding a color field to a bar chart also creates stacked bar chart by default.
Stack Area Chart
Similarly, adding a color field to area chart also creates stacked area chart by default.
Normalized Stacked Bar and Area Charts
You can set stack to "normalize" to create normalized (or percentage) stacked bar and area charts.
Streamgraph
Setting stack to "center" for a stacked area chart creates a streamgraph:
Layered Bar Chart
If stack is null, the marks will be layered on top of each other. In this example, setting the mark’s opacity to be semi-transparent (0.6) creates a layered bar chart.
Diverging Stacked Bar Chart (Stacked with negative values)
The stack transform can also handle negative values by creating a diverging stacked bar chart.
Note: that the stack transform cannot handle if there should be items stacked in the middle like in the “Diverging Stacked Bar Chart with Neutral Parts” example.
Sorting Stack Order
You can use the order channel to sort the order of stacked marks.
For example, given a stacked bar chart for the barley dataset:
By default, the stacked bar are sorted by the stack grouping fields (color in this example).
Mapping the sum of yield to order channel will sort the layer of stacked bar by the sum of yield instead.
Here we can see that site with higher yields for each type of barley are put on the top of the stack (rightmost).
If you want to define custom sort order, you can derive a new field using the calculate transform and sort by that field instead. For example, the following plot makes “University Farm” and “Grand Rapids” be the first (0) and second values in the stack order:
Note: we plan to have a better syntax for customized sort order in the future.
Layering Lines on top of Stacked Area Chart
Since line marks are not stacked by default, to layer lines on top of stacked area charts, you have to manually set the stack offset for the lines.
Stack Transform
// Any View Specification
{
...
"transform": [
// Stack Transform
{
"stack": ...,
"groupby": ...,
"offset": ...,
"sort": ...,
"as": ...
}
...
],
...
}
For example, here is the same normalized stacked bar chart of the "population", grouped by "age" and colored by "gender", but this time using the stack property of transform.
The stack transform in the transform array has the following properties:
| Property | Type | Description |
|---|---|---|
| stack | String |
Required. The field which is stacked. |
| groupby | String[] |
Required. The data fields to group by. |
| offset | String |
Mode for stacking marks. One of Default value: |
| sort | SortField[] |
Field that determines the order of leaves in the stacked charts. |
| as | String | Any[] |
Required. Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively. If a single string(e.g., |
We can use stack transform in conjunction with other transforms to create more complicated charts.
Diverging Bar Chart
Here we initially stack by "question" and then use window transform to offset each stack.
Mosaic Chart
To create a mosaic chart we stack twice, once in each direction along with window transform.
To add labels to this chart, consult this example.