- Home
- Skills
- Research & Analysis
- SIGNAL — Finding-First Data Visualization
More screenshots
Works with the AI tools you already use
SIGNAL — Finding-First Data Visualization
Your agent already makes charts. SIGNAL makes it decide which chart deserves to exist — naming the finding before it picks an encoding.
$9.99
SIGNAL — Finding-First Data Visualization
Example session with this skill installed
We're closing out Q4 and I need something for the board deck. We've got eight quarters of subscriber numbers and ad revenue — subscribers are up a lot, revenue is up but not as much. Can you visualize this?
- Read your context and instructions
- Compiled the signal
- Generated the UI component
Summary
Two series, two different units, eight quarters. The request implies one chart with both — which is the setup for a dual y-axis. I'm not going to build that, and the reason is arithmetic rather than aesthetic. Below: the question your data can actually answer, the finding, and the encoding that proves it honestly.
Data read — 8 quarters, 2 series. Subscribers in thousands (count). Ad revenue in $K (currency). Different units, non-commensurable. Both strictly increasing, no gaps, no outliers.
Analytical question
The request says "visualize this." The question underneath it, for a board audience, is:
Is monetization keeping pace with audience growth?
That's a question about relative rates, not absolute levels. It decides everything downstream.
Finding
Subscribers nearly doubled while ad revenue grew just 18%.
The arithmetic
| Q1 '24 | Q4 '25 | Growth | |
|---|---|---|---|
| Subscribers (000s) | 120 | 236 | +96.7% |
| Ad revenue ($K) | 410 | 484 | +18.0% |
236 ÷ 120 = 1.967. 484 ÷ 410 = 1.181. Audience grew more than five times faster than the revenue it generates.
The derived figure, if you want it in the notes: revenue per subscriber fell from
$3.42 to $2.05, a 40% decline. Same data, stated as a rate.
Recommended visualization
Both series indexed to Q1 2024 = 100, on one shared scale, with the band between them shaded.
| Quarter | Subscribers | Index | Ad revenue | Index |
|---|---|---|---|---|
| Q1 '24 | 120 | 100.0 | 410 | 100.0 |
| Q2 '24 | 138 | 115.0 | 418 | 102.0 |
| Q3 '24 | 152 | 126.7 | 425 | 103.7 |
| Q4 '24 | 171 | 142.5 | 441 | 107.6 |
| Q1 '25 | 189 | 157.5 | 448 | 109.3 |
| Q2 '25 | 204 | 170.0 | 455 | 111.0 |
| Q3 '25 | 219 | 182.5 | 469 | 114.4 |
| Q4 '25 | 236 | 196.7 | 484 | 118.0 |
Indexing is earned here, not imposed. "Keeping pace" is a ratio question, and indexing is the encoding that answers ratio questions directly. If you'd asked "what's our revenue per subscriber," the right answer would be a single derived series — not an index. The transformation follows the question.
The gap at Q4 '25 is
78.6 index points, and that gap is the finding — so the accent goes on the shaded band between the lines, not on either line.
Why the default chart is weaker
The default here is subscriber bars on a left axis running 100–250, revenue as a line on a right axis running 400–500. Both ranges are plausible. Every plotted value is correct.
And yet
| Series | Starts at | Ends at | Travel up the page |
|---|---|---|---|
| Subscribers (+96.7%) | 13.3% | 90.7% | 77.3 points |
| Ad revenue (+18.0%) | 10.0% | 84.0% | 74.0 points |
A series that grew 96.7% and a series that grew 18.0% ascend the page by within
3.3 percentage points of each other. A board member reads "revenue is keeping up." That conclusion is manufactured entirely by four numbers the analyst chose, and nothing on the chart signals a choice was made.
A dual-axis chart has four free parameters. Any crossing, any convergence, any "these move together" can be produced from true values. That's why this one has no exceptions.
(The left axis is also a truncated bar axis — a second, independent defect. The dual axis is the one that matters.)
Design directions
Accent the band, not the lines. Fill the area between the two indexed series at ~10% opacity in a single accent color. The divergence becomes the subject.
- Direct-label both series at their right ends. No legend.
Two emphasized values, by exception: +97% in ink and +18% in grey, both large. The finding is the contrast between two rates, so both carry emphasis — separated by color tier, never by size. Setting one larger implies a precision ranking the data doesn't contain.
One annotation: 79-point gap by Q4 2025, placed inside the band's widest region. No leader line needed — the text is already standing on its subject.
- Everything else neutral. No chart border, no vertical gridlines, no markers on all sixteen points.
Integrity & accessibility
Transformation disclosed in the subtitle, not a footnote: Indexed to Q1 2024 = 100 · subscribers vs. ad revenue. An undisclosed transformation is the same class of failure as an undisclosed truncated axis.
- Shared zero-anchored scale. Both lines start at 100 by construction; the axis includes it.
Meaning survives grayscale — the two lines differ in weight and are directly labeled, so hue carries nothing on its own.
Alt text: "Line chart of subscribers and ad revenue, both indexed to Q1 2024 = 100, across eight quarters. Subscribers rise to 196.7 while ad revenue reaches 118.0; the widening band between them reaches 79 index points by Q4 2025."
- Source line:
Source: internal reporting, Q1 2024 – Q4 2025 · indexed to Q1 2024 = 100 · illustrative data
10-point audit
| # | Check | Result |
|---|---|---|
| 1 | Finding title | ✅ "Subscribers nearly doubled while ad revenue grew just 18%" |
| 2 | Right chart type | ✅ Ratio question → indexed comparison; dual axis rejected on arithmetic |
| 3 | No default palette | ✅ One accent, one neutral |
| 4 | Colorblind-safe | ✅ Weight + direct labels; passes desaturation |
| 5 | Honest axes | ✅ One shared scale, no dual axis, transformation disclosed |
| 6 | Formatted numbers | ✅ +97%, $484K, 236K |
| 7 | Direct labels | ✅ No legend |
| 8 | Chartjunk removed | ✅ No border, no markers, no vertical gridlines |
| 9 | Insight annotated | ✅ One callout inside the band |
| 10 | Source and date | ✅ Present, with disclosure |
10/10. Last check: would a different but equally defensible axis choice change the reader's conclusion? No — there is one scale, and both series sit on it.
Next step
Tell me your plotting environment and I'll write it — matplotlib, Plotly, Vega-Lite, ggplot2, or hand-authored SVG. If you also want the absolute levels for the appendix, that's two stacked panels sharing one x-axis, never a second y-axis.
signal-finding-first-data-visualization.tsx
TSX · React component
Example file from a real run - the skill writes it into your workspace.
Connects securely to your tools. The creator never sees your data.
What you get
About this skill
Your agent isn't bad at charts. It's answering the wrong question.
Ask any AI for a chart and it reaches for a type. Rainbow pie. Six-line spaghetti. Clustered bars. Two y-axes. Each one is a reasonable response to the words of your request — and none of them answers the question underneath it.
The failure happens before a pixel is drawn, at the moment the agent asks "what chart type?" instead of "what does this data actually prove?"
That's why the output looks machine-made. Not the colors. The order of operations.
Finding first. Chart second.
SIGNAL inverts it. Before any plotting code exists, your agent writes down the one thing the data proves — one sentence, with a specific quantity in it. Then it picks the encoding that proves that sentence. Then it audits the result.
A chart type is an output of the analytical question, never an input to it.
The nine-stage pipeline
data → audience → analytical question → finding → encoding
→ annotation → visual treatment → accessibility → audit
Stages one through four happen before a line of code. The agent reads the actual data, establishes units and denominators, works out who's reading and what they need in five seconds, converts a vague request into a question the data can answer, and states the finding. Only then does it choose an encoding — from a table mapping fourteen analytical questions to the encoding that answers each, and the specific thing never to use for it.
Four transformations, fully worked
Not chart tricks. Four cases where the obvious chart and the correct chart diverge:
Default reached for Question actually asked What ships Rainbow pie, because the word was "mix" Which is biggest? Sorted horizontal bar Six lines, all equal weight Did the ranking change? Two-tier neutral, crossing annotated Clustered bars, because "vs" Who improved, who didn't? Dumbbell sorted by change Dual axis, because two units Is Y keeping pace with X? Indexed to a shared base, gap shadedEach traced through all nine stages, with the arithmetic behind every claim and the reason each alternative was rejected.
The dual-axis case is the one worth reading. Two y-axes give the analyst four free parameters — the min and max of each scale. SIGNAL's worked example shows a series that grew 96.7% and a series that grew 18.0% climbing almost exactly the same distance up the page — 77.3% of plot height versus 74.0% — on two perfectly plausible axis ranges, with every plotted value correct. A chart can be composed entirely of true numbers and still be false.
The 10-point AI-tells audit
Every chart is scored before delivery against the ten things that read as machine-generated:
finding title · right chart type · no default palette · colorblind-safe · honest axes · formatted numbers · direct labels · chartjunk removed · insight annotated · source and date
Below 10/10 isn't finished. And one last question on every chart: would a different but equally defensible axis, scale, sort order, or time window change the reader's conclusion? If yes, it's persuading rather than informing.
Depth, loaded only when needed
A decision engine that's always active, plus six specialist modules the agent pulls on demand:
- Chart selection — the perceptual hierarchy behind every recommendation, a nine-branch decision tree, and the absolute no-list
- Integrity — zero baselines by encoding channel, the dual-axis ban and its arithmetic, when indexing is earned, log scales, percentage points versus percent, denominators, privacy
- Design system — the one-accent principle, two-tier neutral, contrast and size minimums, the type scale, and the thumbnail survival law
- Annotation — headline patterns that turn a filename into a finding, direct labeling, placement geometry, reference lines
- Tooling — working configuration and the specific default to override in each environment
- Examples — the four transformations, end to end
Works where you work
matplotlib, Plotly, Vega-Lite, ggplot2, D3, hand-authored SVG, Excel and Sheets — each with the default it imposes and the override for it. The decision logic is tool-agnostic; it works the same for a chart you'll build by hand in a spreadsheet.
No command to remember. It fires whenever you ask for a chart.
You stop reviewing charts for taste and start shipping ones that hold up in a board meeting.
How to install
Works the same in every agent - Claude, Cursor, Codex, Copilot and 20+ more.
- 1
Download the ZIP
Free skills download straight away. Paid skills unlock right after purchase.
- 2
Unzip into your skills folder
Every agent reads skills from one folder on your machine. Drop the unzipped folder in there.
- 3
Ask your agent to use it
Restart the agent if it was already running. It picks the skill up automatically - no config needed.
Skills folder by agent
Click the path to copy it. Create the folder if it does not exist yet.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
30-day refund
Not a fit? Get your money back
Trust & safety
Security scanned
Verified clean 15 days ago
- Passed all security checks, Safe to install