Charts /
CH-TIM-14
CH-TIM-14 . family TIM
INDEXED LINE
line, all series rebased to 100. Needs: ordered periods + 2-4 series in DIFFERENT units or magnitudes; rebased to first period = 100.
trendcomparisonchange-over-time
Use when
- comparing growth across series with different units or magnitudes
- cost escalation, price indices, relative performance since a baseline
Do not use when
- absolute levels matter (rebasing hides them; use CH-TIM-01)
- one series only (an index of one is just a line)
See instead
- series share one unit and scale: CH-TIM-01
Alternatives
- CH-TIM-01 (same-unit series)
Rules
- renderer rebases raw values: v / first * 100 (rounded to 0.1)
- the 100 line renders in the index_base_line role, stronger than gridlines
- non-zero y floor is legal HERE ONLY; this entry records the justification
- series labeled at line ends
Never do this
- indexing series that share a unit (hides real gaps)
- hiding the base period
- reading index points as percent without saying so (132 = +32%)
QA before delivering
- all series equal 100 at period 1
- 100 reference line visible
- title translates the index into percent change
- no legend
- source present
Data shape
| title | action title stating the relative move |
| eyebrow | caps, DL chrome only |
| source | bottom-left always |
| unit | index points; pass empty unit by convention |
| x | ordered periods |
| series | RAW values; the renderer rebases each to index_base at period 1 |
| annotation | optional |
Sample data (golden)
{
"title": "Cement cost rose 32% since January; steel held within 4% of baseline",
"eyebrow": "INPUT COSTS . INDEXED JAN = 100",
"source": "Source: sample dataset v1, 2026-07-12",
"unit": "",
"x": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug"
],
"series": [
{
"name": "Steel",
"values": [
880,
872,
889,
901,
915,
908,
921,
899
],
"role": "context"
},
{
"name": "Cement",
"values": [
412,
428,
441,
459,
472,
495,
517,
544
],
"role": "key"
}
]
}