Unit 13.01: Building the charts against the brief
Every chart should support a clause of the summary sentence, and any that supports none is not built.
Clause coverage
Four candidate charts mapped against the three clauses of the summary sentence.
The code reports which clauses each supports and which remain uncovered.
SENTENCE = ("Two suppliers account for 60% of spend at above-median unit cost.")
CLAUSES = ["two suppliers", "60% of spend", "above-median unit cost"]
CHARTS = [
("bar: spend by supplier, sorted, top two highlighted",
["two suppliers", "60% of spend"]),
("dot plot: unit cost by supplier, median line marked",
["above-median unit cost"]),
("scatter: volume against unit cost, top two labelled",
["two suppliers", "above-median unit cost"]),
("pie: spend share by supplier",
[]),
]
print(f"{'chart':52} supports")
for chart, supports in CHARTS:
print(f"{chart:52} {supports or 'NOTHING -- do not build it'}")
covered = {c for _, s in CHARTS for c in s}
print(f"\nclauses covered: {sorted(covered)}")
print(f"clauses uncovered: {sorted(set(CLAUSES) - covered) or 'none'}")
The pie chart supports nothing. It shows spend share, which sounds relevant and does not carry either the count, the percentage, or the unit cost - so it is not built, however natural it feels.
The coverage check at the end is the useful part: it names any clause the charts do not support, which means either a missing chart or an unsupportable claim.
The mistake this prevents
The mistake is building the chart that is easiest from the data you have and then finding a clause it might support. The mapping has to run in the other direction, or the sentence quietly changes to match the charts.
Takeaway
Map every chart to a clause of the summary sentence. A chart supporting no clause is not built; a clause with no chart is an unsupported claim.
