Activated Cloud
← App Store

Make clear charts

Activated Cloud✓ Officialactivated/make-clear-charts

No ratings yet12 installsv1.0.0Updated Oct 6, 2026● Unknown

Free · MIT

About

Makes honest, readable charts with matplotlib (PNG and SVG for documents, decks and chat) or as native editable charts in Excel and PowerPoint: picks the right chart for the question, titles it with the finding, highlights what matters, labels directly, and checks the image by looking at it. Use when numbers need to be shown, not listed, or the owner asks for a graph. Not for working out the numbers (see clean-and-analyse-data) or building the workbook around them (see build-excel-spreadsheet).

Workplace

Documentation

From SKILL.md · v1.0.0 · what the agent reads when it loads this skill3 files: SKILL.md, references/chart-chooser.md, references/chart-recipes.md

Make clear charts

A chart exists to make one point obvious at a glance. This skill chooses the chart that fits the question, draws it with matplotlib on your computer (or as a native chart inside Excel or PowerPoint), and checks the result by looking at it. The standard: the title states the finding, the eye goes straight to the data that proves it, axes are honest, and nothing needs a legend hunt to read.

When to use

  • "Can you chart this for me?"
  • "Put a graph of monthly sign-ups in the report."
  • "Show which region is behind."
  • "I need visuals for the board deck."

What you need

  • Clean, aggregated numbers (see clean-and-analyse-data), with units and period.
  • The one message the chart must carry. Write it as a sentence first: "West is the only region below target."
  • Where it will live: report (PNG at 200 dpi, about 16 cm wide), slide (wide, big text), chat (PNG shown with show_card type media), or an editable chart inside Excel or PowerPoint.
  • Brand colours if the owner has them (check memory); otherwise the palette below.

Set up once

python3 -c "import matplotlib" 2>/dev/null || python3 -m pip install --user --break-system-packages matplotlib

(Debian refuses plain pip install --user; --break-system-packages with --user writes only to your home folder.) Your computer has no screen for plots, so always matplotlib.use("Agg") and save to files.

Method

  1. Pick the chart from the question (full chooser in references/chart-chooser.md):

    • Compare categories or rank them: horizontal bar, sorted by value.
    • Change over time: line (7 or more points) or columns (a few periods).
    • Part of a whole: a single stacked bar or 100% bar; a pie only for 2 or 3 slices.
    • Distribution: histogram or box plot.
    • Relationship between two measures: scatter, labelled points.
    • Actual against target or budget: bars with a target line, or bullet chart.
    • Many series over time: small multiples, not one tangle of lines.
  2. Design rules that matter most.

    • Title = the finding, in plain words. Subtitle = what is measured, unit and period. Source line at the bottom.
    • Highlight one thing in the accent colour; everything else grey.
    • Label lines and bars directly; drop the legend when you can.
    • Bars start at zero, always. Line charts may zoom, but say so if the axis does not start at zero.
    • No 3D, no shadows, no dual y-axes, no rainbow palettes.
    • Sort categories by value unless they have a natural order (months, age bands).
    • Text at least 9 pt at the final size; at least 14 pt on slides.
    • Colour-blind safe: the Okabe-Ito palette (blue #0072B2, orange #E69F00, bluish green #009E73, vermillion #D55E00, sky blue #56B4E9, reddish purple #CC79A7, yellow #F0E442). Never rely on red versus green alone.
  3. Draw it with execute_code (absolute paths; tested):

from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from matplotlib import font_manager

OUT = Path("/home/user/Desktop/Ada - Work space/q3-review/charts")
OUT.mkdir(parents=True, exist_ok=True)
ACCENT, MUTED, INK, SUBTLE = "#0072B2", "#BFC5CC", "#1F2A44", "#6B7280"

installed = {f.name for f in font_manager.fontManager.ttflist}
family = next((f for f in ("Inter", "Liberation Sans", "Arial", "Noto Sans", "DejaVu Sans") if f in installed), "sans-serif")
plt.rcParams.update({"font.family": family, "font.size": 11, "axes.spines.top": False, "axes.spines.right": False,
                     "axes.edgecolor": SUBTLE, "xtick.color": SUBTLE, "ytick.color": SUBTLE,
                     "axes.titlesize": 14, "axes.titleweight": "bold", "axes.titlelocation": "left",
                     "axes.titlepad": 28, "axes.titlecolor": INK, "savefig.dpi": 200, "savefig.bbox": "tight"})

def finish(fig, ax, title, subtitle, source, name):
    ax.set_title(title)
    ax.text(0, 1.035, subtitle, transform=ax.transAxes, color=SUBTLE, fontsize=10)
    fig.text(0.01, -0.02, source, color=SUBTLE, fontsize=8.5)
    fig.savefig(OUT / f"{name}.png"); fig.savefig(OUT / f"{name}.svg"); plt.close(fig)
    print(OUT / f"{name}.png")

regions = {"North": 15600, "South": 14400, "East": 12900, "West": 6720}   # from your analysis
target = 12000
names, values = zip(*sorted(regions.items(), key=lambda kv: kv[1]))
fig, ax = plt.subplots(figsize=(8, 4))
bars = ax.barh(names, values, height=0.6, color=[ACCENT if v < target else MUTED for v in values])
ax.bar_label(bars, labels=[f"£{v:,.0f}" for v in values], padding=4, color=INK)
ax.axvline(target, color=INK, lw=1, ls="--")
ax.text(target, len(names) - 0.4, f" target £{target:,}", color=INK, fontsize=9, va="bottom")
ax.set_xlim(0, max(values) * 1.15)
ax.xaxis.set_visible(False); ax.spines["bottom"].set_visible(False); ax.tick_params(axis="y", length=0)
below = [n for n, v in zip(names, values) if v < target]
title = f"{below[0]} is the only region below target" if len(below) == 1 else f"{len(below)} regions are below target"
finish(fig, ax, title, "Q3 2026 revenue by region, £", "Source: shop orders, 1 Jul to 30 Sep 2026", "q3-revenue-by-region")

Note the title is computed from the data, so it cannot contradict the bars. Line charts with annotations, small multiples, stacked shares, scatter and histograms are in references/chart-recipes.md.

  1. Editable charts when the owner will edit them. In Excel use openpyxl's BarChart / LineChart pointing at the cells (see build-excel-spreadsheet); in PowerPoint use python-pptx's add_chart with CategoryChartData (see build-slide-deck). Apply the same rules: one highlight colour, data labels, no legend for one series.

  2. Look at it. Call vision_analyze on the PNG and ask: "Is any text clipped or overlapping? Is the highlighted bar the one the title talks about? Can every label be read?" Fix and redraw until the answer is clean.

  3. Deliver. Save PNG (for documents and chat) and SVG (scales cleanly) in the job's charts/ folder. Show it to the owner with show_card (type media, the PNG path, a one-line caption) rather than only naming the file.

Output

  • charts/<name>.png (200 dpi) and charts/<name>.svg in the job folder.
  • In chat: the card with the chart and one sentence on what it shows. In documents: the chart with a numbered caption and source.

Checks before you finish

  • The title states a finding that the data supports (recheck the numbers behind it).
  • Bars start at zero; any non-zero line axis is stated.
  • Units, period and source are on the chart.
  • One highlight colour; palette safe for colour-blind readers; no legend needed or legend placed next to the data.
  • You looked at the rendered image; nothing clipped, overlapping or too small.

Pitfalls

  • Topic titles ("Revenue by region"). Say what the reader should see.
  • A title that disagrees with the chart after the data changed. Compute title facts from the data.
  • Pie charts with many slices and donut charts with numbers no one can compare. Use sorted bars.
  • Truncated bar axes that turn a 3% gap into a cliff.
  • Too many series. Beyond four or five lines, split into small multiples or highlight one and grey the rest.
  • Default styling. The default legend, grid and colours compete with the data. Remove what does not help reading.
  • Charts of unreliable numbers. A chart makes numbers look certain. Note small samples or estimates in the subtitle.

See also: clean-and-analyse-data, build-excel-spreadsheet, build-slide-deck, make-pdf-document.

Versions

v1.0.0currentOct 6, 2026

Listed from the source repository.

Reviews

No reviews yet. Be the first.

Write a review