Charts /
CH-TIM-01
CH-TIM-01 . family TIM
LINE
line. Needs: ordered periods + 2 to 4 numeric series.
trendchange-over-time
Use when
- trend over ordered periods
- plan vs actual tracking
- 2 to 4 series maximum
Do not use when
- categorical comparison (use CH-RNK-01 or CH-MAG-01)
- cumulative progress vs plan (use CH-TIM-02 S-CURVE)
- more than 4 series (use small multiples)
- unordered categories
See instead
Alternatives
- CH-TIM-03 (area, planned)
- CH-TIM-05 (slope, planned)
- CH-TIM-06 (sparkline, planned)
Rules
- y starts at zero; a non-zero baseline needs a written justification in the entry that uses it
- series labeled at line ends, never a legend
- exactly one key series; the rest are context
- horizontal gridlines only
- annotation points at the data, with a leader line
Never do this
- legend boxes
- more than one saturated series
- dual y axes
- markers on every point
- smoothed or spline-interpolated lines
QA before delivering
- no legend anywhere
- series labels at line ends
- gridlines horizontal only
- y axis starts at zero or the justification is recorded
- annotation present and anchored to a data point
- title states a finding with a number
- source line present bottom-left
Data shape
| title | string, action title stating the finding with a number |
| eyebrow | string caps, rendered only when the DL chrome asks for it |
| source | string, rendered bottom-left, always |
| unit | string, appears once, on the top y tick label |
| x | array of ordered period labels |
| series | array of {name: string, values: number[] same length as x, role: 'key'|'context'}, exactly one key |
| annotation | {text: string, series: name, index: int, tx: px, ty: px, anchor: 'start'|'end'}, points at a data point |
Sample data (golden)
{
"title": "Actual progress reached 62% in June, 9 points behind plan",
"eyebrow": "PROGRESS . H1 2026",
"source": "Source: sample dataset v1, 2026-07-12",
"unit": "%",
"x": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun"
],
"series": [
{
"name": "Plan",
"values": [
10,
25,
40,
52,
63,
71
],
"role": "context"
},
{
"name": "Actual",
"values": [
8,
20,
33,
45,
55,
62
],
"role": "key"
}
],
"annotation": {
"text": "gap widens from April",
"series": "Actual",
"index": 3,
"tx": 470,
"ty": 340,
"anchor": "end"
}
}