Charts
TwBumpAreaChart
TwBumpAreaChart is a Blazor bump area chart: a band per series that is as thick as its value and moves as its rank changes.
Last updated
Please be aware this component is new, may have bugs and/or be subject to change. Please report any bugs at
https://github.com/twblazor/twblazor/issues.
Basic usage
TwBumpAreaChart draws a band for each series. At every category the bands are stacked from the largest value at the top to the smallest at the bottom, so a band climbs when its series overtakes another and its thickness shows by how much it leads.Atlas, 2021Rank
1Value
42
Beacon, 2021Rank
2Value
30
Comet, 2021Rank
3Value
28
Atlas, 2022Rank
1Value
38
Beacon, 2022Rank
2Value
32
Comet, 2022Rank
3Value
30
Beacon, 2023Rank
1Value
36
Atlas, 2023Rank
2Value
33
Comet, 2023Rank
3Value
31
Beacon, 2024Rank
1Value
39
Comet, 2024Rank
2Value
31
Atlas, 2024Rank
3Value
30
Beacon, 2025Rank
1Value
44
Comet, 2025Rank
2Value
30
Atlas, 2025Rank
3Value
26
20212022202320242025
RAZOR
<TwChart Title="Market share by platform" Description="Percent">
<TwBumpAreaChart Categories="@_years" Series="@_platforms" />
</TwChart>CSHARP
@code {
private readonly string[] _years = ["2021", "2022", "2023", "2024", "2025"];
private readonly ChartSeries[] _platforms =
[
new("Atlas", [42, 38, 33, 30, 26]),
new("Beacon", [30, 32, 36, 39, 44]),
new("Comet", [28, 30, 31, 31, 30])
];
}Changing leaders
With more series and more crossings the chart tells the story of a race. Where a TwBumpChart shows only the order, the band thickness here also shows when the leader was far ahead and when the field was close.
Falcon, Q1 23Rank
1Value
38%
Otter, Q1 23Rank
2Value
24%
Lynx, Q1 23Rank
3Value
20%
Heron, Q1 23Rank
4Value
12%
Wren, Q1 23Rank
5Value
6%
Falcon, Q2 23Rank
1Value
36%
Otter, Q2 23Rank
2Value
26%
Lynx, Q2 23Rank
3Value
19%
Heron, Q2 23Rank
4Value
13%
Wren, Q2 23Rank
5Value
6%
Falcon, Q3 23Rank
1Value
33%
Otter, Q3 23Rank
2Value
29%
Lynx, Q3 23Rank
3Value
19%
Heron, Q3 23Rank
4Value
12%
Wren, Q3 23Rank
5Value
7%
Otter, Q4 23Rank
1Value
32%
Falcon, Q4 23Rank
2Value
30%
Lynx, Q4 23Rank
3Value
18%
Heron, Q4 23Rank
4Value
13%
Wren, Q4 23Rank
5Value
7%
Otter, Q1 24Rank
1Value
35%
Falcon, Q1 24Rank
2Value
27%
Lynx, Q1 24Rank
3Value
17%
Heron, Q1 24Rank
4Value
14%
Wren, Q1 24Rank
5Value
7%
Otter, Q2 24Rank
1Value
37%
Falcon, Q2 24Rank
2Value
25%
Lynx, Q2 24Rank
3Value
17%
Heron, Q2 24Rank
4Value
13%
Wren, Q2 24Rank
5Value
8%
Otter, Q3 24Rank
1Value
40%
Falcon, Q3 24Rank
2Value
22%
Lynx, Q3 24Rank
3Value
16%
Heron, Q3 24Rank
4Value
14%
Wren, Q3 24Rank
5Value
8%
Otter, Q4 24Rank
1Value
43%
Falcon, Q4 24Rank
2Value
20%
Lynx, Q4 24Rank
3Value
15%
Heron, Q4 24Rank
4Value
13%
Wren, Q4 24Rank
5Value
9%
Q1 23Q2 23Q3 23Q4 23Q1 24Q2 24Q3 24Q4 24
RAZOR
<TwChart Title="Browser usage" Description="Percent of sessions">
<TwBumpAreaChart Categories="@_quarters" Series="@_browsers" CategoryHeader="Quarter" ValueFormat="0'%'" Height="ChartHeight.Large" />
</TwChart>CSHARP
@code {
private readonly string[] _quarters = ["Q1 23", "Q2 23", "Q3 23", "Q4 23", "Q1 24", "Q2 24", "Q3 24", "Q4 24"];
private readonly ChartSeries[] _browsers =
[
new("Falcon", [38, 36, 33, 30, 27, 25, 22, 20]),
new("Otter", [24, 26, 29, 32, 35, 37, 40, 43]),
new("Lynx", [20, 19, 19, 18, 17, 17, 16, 15]),
new("Heron", [12, 13, 12, 13, 14, 13, 14, 13]),
new("Wren", [6, 6, 7, 7, 7, 8, 8, 9])
];
}Late arrivals
Use
null where a series has no value. Its band starts, stops or breaks there, and the other bands close the gap.Hardware, 2021Rank
1Value
¤4.2
Software, 2021Rank
2Value
¤2.1
Hardware, 2022Rank
1Value
¤4.0
Software, 2022Rank
2Value
¤2.9
Software, 2023Rank
1Value
¤3.8
Hardware, 2023Rank
2Value
¤3.6
Services, 2023Rank
3Value
¤0.9
Software, 2024Rank
1Value
¤4.6
Hardware, 2024Rank
2Value
¤3.1
Services, 2024Rank
3Value
¤1.8
Software, 2025Rank
1Value
¤5.2
Services, 2025Rank
2Value
¤3.4
Hardware, 2025Rank
3Value
¤2.8
20212022202320242025
RAZOR
<TwChart Title="Revenue by product line" Description="Millions of pounds">
<TwBumpAreaChart Categories="@_years" Series="@_products" ValueFormat="C1" />
</TwChart>CSHARP
@code {
private readonly ChartSeries[] _products =
[
new("Hardware", [4.2, 4.0, 3.6, 3.1, 2.8]),
new("Software", [2.1, 2.9, 3.8, 4.6, 5.2]),
new("Services", [null, null, 0.9, 1.8, 3.4])
];
}When to use
Use a bump area chart when both the order of the series and the size of the lead matter. When only the order matters, TwBumpChart is simpler. Negative values count as zero.
Summary
Tooltips and the table view give the value of every series for each category. Tooltips also give the rank of each series. The arrow keys move down each category in rank order, then on to the next.
Shared features
The legend, tooltips, keyboard navigation, table view, value formatting, height and empty state work the same on every chart. See TwChart for those options.
Keyboard navigation
The plot is a single Tab stop. Each data point is announced with its series and value as focus reaches it, and the table view presents the same data without the plot.
| Key | What it does |
|---|---|
| Tab | Moves focus into the plot, onto the data point last visited. |
| Arrow Right or Arrow Down | Moves to the next data point. |
| Arrow Left or Arrow Up | Moves to the previous data point. |
| Home or End | Moves to the first or last data point. |
| Escape | Hides the tooltip of the focused data point. |
| Enter or Space | On a legend item: shows or hides that series. On the table button: switches between the chart and its data table. |