# Hodios paste pack: Data visualisation

Everything in Data visualisation from Hodios, the open prompt library by Hermes IDE: 12 entries, catalog 2026.1003.0.

Every entry is dedicated to the public domain under CC0 1.0. Copy, change and share them freely, no attribution needed.

Browse and search the library at https://hermes-ide.com/prompts

## How to use

Find an entry below and copy the text inside its block into ChatGPT, claude.ai or any chat. Replace each [PLACEHOLDER] with your own material. Personas, rules and styles work best as custom instructions or project instructions.

## Contents

- Data visualisation
  - [Audit an existing dashboard](#audit-dashboard) (prompt)
  - [Chart design rules](#chart-design-rules) (rule)
  - [Choose a chart type](#choose-chart-type) (prompt)
  - [Choose accessible chart colours](#choose-chart-colors) (prompt)
  - [Critique a chart](#critique-chart) (prompt)
  - [Dashboard build track](#dashboard-build-track) (workflow)
  - [Design a KPI dashboard](#design-dashboard) (prompt)
  - [Design a map visualisation](#design-map-visualization) (prompt)
  - [Design a readable data table](#design-data-table) (prompt)
  - [Interpret a chart](#interpret-chart) (prompt)
  - [Tell a data story](#tell-data-story) (prompt)
  - [Write plotting code](#write-plotting-code) (prompt)

---

<a id="audit-dashboard"></a>

## Audit an existing dashboard

`audit-dashboard` · prompt · Data visualisation · https://hermes-ide.com/prompts/audit-dashboard

Audits a dashboard for decision usefulness, metric definitions, clutter, misleading visuals and staleness, ending in a ranked redesign shortlist. Use when a dashboard is ignored or distrusted.

````markdown
<context>
You are a senior BI analyst asked to audit a dashboard that already exists. Dashboards decay: tiles get added for one meeting and never removed, metric names drift away from their definitions, filters stop applying to every tile, data quietly stops refreshing, and the one question users came for ends up below the fold. You judge every tile by whether it helps its users make a decision, check that its numbers can be trusted, and end with a short list of changes ranked by value, not a rebuild by default.
</context>

<task>
Audit the dashboard below.

<dashboard>
[DASHBOARD_DESCRIPTION]
</dashboard>

<users>
[USERS]
</users>

1. Establish the purpose: the users, the decisions or meetings it serves, and how often it is used. If users are not given, infer them from the content, mark it as an assumption and add it to the questions.
2. Review each tile: the question it answers, the decision it informs (or "none"), whether its metric has a clear definition, whether it has a comparison (target, prior period, benchmark), and whether its chart type suits the comparison. Verdict per tile: keep, fix, merge or cut.
3. Check for clutter: number of tiles and filters, duplicated metrics, decorative elements, overloaded legends, and whether the most important number is top-left.
4. Check for misleading visuals: bar axes not starting at zero, dual axes with unrelated scales, pies or donuts with many slices, cumulative charts that always rise, inconsistent date ranges or time zones across tiles, colours that mean different things in different tiles, red and green as the only signal, and percentages with no denominator shown.
5. Check definitions and freshness: metrics with ambiguous names ("active users", "revenue"), filters that do not apply to every tile, the last refresh time and whether it is shown, tiles with stale or broken data, and data sources that differ between tiles for the same metric.
6. Check usability: load time if known, mobile or meeting-screen readability, and accessibility (contrast, colour-blind safety, text size).
7. Produce a redesign shortlist: at most seven changes, ranked by value to the users against effort, each specific enough to do.
</task>

<constraints>
- Judge only what is described or visible. If the material is too thin for a tile-level review, say what to capture (a screenshot of each page, the tile list with metric definitions, refresh settings) and stop.
- Be specific: refer to tiles by title and say exactly what to change ("start the y-axis at zero on 'Orders by week'"), not general advice.
- Do not recommend a full rebuild unless most tiles fail the decision test; when you do, say why and point to a structured redesign.
- If usage data is available, use it: a tile nobody opens is a strong candidate to cut. If not, suggest how to get it from the BI tool's usage metrics.
- Keep the tone factual and respectful of whoever built it.
</constraints>

<output_format>
## Verdict
Three sentences: is it fit for its decisions, the biggest problem, the highest-value change.

## Tile-by-tile review
Table: Tile | Question it answers | Decision supported | Definition clear? | Comparison? | Issue | Verdict (keep, fix, merge, cut).

## Cross-cutting issues
Bullets for clutter, layout and filters.

## Misleading visuals
Bullets naming the tile, the problem and the fix.

## Definitions and freshness
Bullets naming the metric or tile, the problem and the fix.

## Redesign shortlist
Numbered, at most seven: change, why, effort (S, M, L), expected effect.

## Questions for the owner
Up to five.
</output_format>
````

---

<a id="chart-design-rules"></a>

## Chart design rules

`chart-design-rules` · rule · Data visualisation · https://hermes-ide.com/prompts/chart-design-rules

Rules for any chart the assistant designs or codes, covering one message, an action title, honest axes, direct labels, accessible colour and a source note. Load whenever a chart or plot is made.

````markdown
Follow these rules for the rest of this conversation.

When you design, specify, describe or write code for a chart, plot, map or dashboard tile:

Message
- Give each chart one message. Before choosing a chart, state the message in a sentence; if there are two messages, make two charts.
- Use an action title that states the message ("Returns doubled after the June carrier change"), not a label ("Returns by month"). Put what is measured, the unit and the period in the subtitle or axis title.
- Choose the chart for the comparison: a line for change over time, a sorted bar for comparing categories, a scatter for relationships, a histogram or box plot for distributions, and a stacked bar only when the parts of a whole are the point. Never use 3D, and use a pie or donut only for two to four parts of one whole.

Honest scales
- Start bar and column axes at zero. A line chart may zoom in on the range of the data, but say so on the axis when the zoom exaggerates a change.
- Avoid dual axes. If two measures with different units must be compared, use two aligned charts or index both to a common base and say so.
- Keep scales identical across small multiples and panels meant to be compared, unless the point is the shape and you say the scales differ.
- Use consistent time periods and intervals; mark gaps, partial periods and changes in definition on the chart.
- Show uncertainty when it affects the reading: intervals, ranges or sample sizes.

Labels and clutter
- Label series directly at the end of lines or on bars instead of using a legend whenever it fits.
- Label axes with units, use readable number formats (12.5k, 3.2M, 45%), and round to the precision the data supports.
- Sort categorical bars by value unless the categories have a natural order.
- Remove what does not carry information: heavy gridlines, borders, backgrounds, shadows, redundant labels and decimals.
- Annotate the point the message is about (an event, a threshold, a target line) with a short note on the chart.

Colour and accessibility
- Use grey for context and one strong colour for what matters; add more colours only when each one has a meaning.
- Use colour-blind-safe palettes, never rely on red versus green alone, and never make colour the only way to tell series apart: add labels, markers or line styles.
- Keep a colour's meaning the same across every chart in a report or dashboard.
- Make text legible at the size it will be viewed (for slides and screens, nothing smaller than about 10 to 12 points), with enough contrast against the background.
- Provide alt text or a one-sentence description of what the chart shows for anything published.

Provenance
- Add a source note with the data source, the date the data was extracted or the period covered, and any filters or exclusions that change the reading.
- State the base: n, the denominator of percentages, and whether figures are totals, averages or rates.

When writing chart code
- Set the figure size, font sizes and colours explicitly rather than relying on library defaults, and save to a file at a stated size and resolution (vector formats for print).
- Compute the data for the chart in code from the source, not by typing values into the plotting call.
- Never describe what a chart shows as if you had seen it unless you rendered it or the user showed it to you.
````

---

<a id="choose-chart-type"></a>

## Choose a chart type

`choose-chart-type` · prompt · Data visualisation · https://hermes-ide.com/prompts/choose-chart-type

Recommends the chart that best carries a specific message for a given data shape, with encodings, the alternatives considered and the anti-patterns to avoid. Use before building a chart.

````markdown
<context>
You are a data-visualisation designer in the tradition of Cleveland, Few and the Financial Times Visual Vocabulary. A chart is chosen for the comparison it must make easy, not for the data type alone. People judge position along a common scale most accurately, then length, then angle and area, then colour intensity, so the key comparison goes on position whenever possible.
</context>

<task>
Recommend a chart.

<message>
[MESSAGE]
</message>

<data_shape>
[DATA_SHAPE]
</data_shape>

Audience and medium: [AUDIENCE]

If the audience is empty, assume a general business audience reading on a laptop screen.

1. Name the relationship the message is about: change over time, ranking, part-to-whole, deviation from a reference, distribution, correlation, or flow. If the message is a description of the data rather than a point ("show sales by region"), propose the two most likely points and pick one, saying so.
2. Choose the chart that puts that comparison on position or length. Typical choices: line for change over time; sorted bar (horizontal when labels are long) for ranking; slope or dumbbell chart for before-and-after; diverging bar for deviation from a target; histogram, box or strip plot for distributions; scatter for correlation; small multiples when there are more than about four series; a stacked bar or a single 100% bar for part-to-whole with few parts.
3. Specify encodings: x, y, colour, facet, ordering, the baseline, and which single element gets the highlight colour while the rest stay grey.
4. Write a title that states the message (an action title), not the variables.
5. Note the alternatives you rejected and why, and the anti-patterns specific to this data.
</task>

<constraints>
- Bars start at zero. Line charts may use a non-zero baseline when the message is about change, and the axis must make that visible.
- Avoid pie and donut charts for more than three parts or for comparing similar shares; avoid 3D, dual y-axes (offer an indexed chart or two aligned panels instead), and rainbow palettes.
- Use colour for meaning only, keep it distinguishable for colour-blind readers, and never rely on colour alone; label directly where possible instead of using a legend.
- If the data cannot support the message (for example a trend claimed from two points), say so.
- If the data shape is too vague to choose from, ask for the variables and their types and stop.
</constraints>

<output_format>
## Recommendation
The chart type and the action title, in two lines.

## Encodings
A table: channel (x, y, colour, facet, order, highlight, labels) | assignment.

## Why
Two to four sentences tying the choice to the message and audience.

## Alternatives
Up to two, each with when it would be the better choice.

## Avoid
Up to four bullets specific to this data.
</output_format>
````

---

<a id="choose-chart-colors"></a>

## Choose accessible chart colours

`choose-chart-colors` · prompt · Data visualisation · https://hermes-ide.com/prompts/choose-chart-colors

Chooses accessible categorical, sequential or diverging chart palettes with hex codes, colour-vision and contrast checks and highlight rules, fitted to brand colours. Use when colouring charts.

````markdown
<context>
You are a data visualisation designer who builds colour systems for analytics teams. Colour in a chart has a job: tell categories apart, encode an ordered quantity, show distance from a meaningful midpoint, or point to the one thing that matters. You choose the palette type from the data, not from taste, and you make sure it works for the roughly 1 in 12 men and 1 in 200 women with a colour-vision deficiency, in greyscale print, and on the actual background.
</context>

<task>
Choose chart colours for:

<chart_types>
[CHART_TYPES]
</chart_types>

<brand_colors>
[BRAND_COLORS]
</brand_colors>

1. For each chart, choose the palette type and say why:
   - Categorical for unordered groups: distinct hues of similar visual weight, at most six to eight; beyond that, group into "Other", use direct labels, or facet.
   - Sequential for ordered values from low to high: one hue (or a perceptually uniform multi-hue ramp such as viridis or cividis) varying mainly in lightness, light for low and dark for high on a light background.
   - Diverging for values around a meaningful midpoint (zero, target, average): two contrasting hues with a neutral light midpoint placed at that value, and equal perceptual steps on both sides even if the data range is asymmetric.
   - Highlight: greys for context and one accent colour for the focus series.
2. Build the palettes with hex codes. Start from a proven colour-blind-safe base where it fits (for example Okabe-Ito for categorical: #E69F00, #56B4E9, #009E73, #F0E442, #0072B2, #D55E00, #CC79A7, #000000; viridis or cividis for sequential), then adapt to the brand: use brand colours where they pass the checks, and adjust lightness or saturation when they do not, saying what you changed.
3. Check accessibility for each palette:
   - Colour-vision deficiency: whether colours remain distinguishable under protanopia, deuteranopia and tritanopia; avoid red-green pairs as the only distinction.
   - Contrast: graphical elements against the background at 3:1 or more (WCAG 2.x non-text contrast) where they carry meaning, and text at 4.5:1. Report contrast ratios only if you calculated them from the relative-luminance formula, showing the result; otherwise mark them "verify" and name the check.
   - Greyscale: whether the order of a sequential ramp survives printing in black and white.
4. Write usage rules: order of categorical colours, which colour is reserved for which meaning (for example the brand colour for "us", grey for "other", red only for negative), how to handle more series than colours, labelling directly instead of legends where possible, and never relying on colour alone (add labels, markers or patterns).
5. Give a dark-mode variant if a dark background was mentioned.
6. Provide the palettes as code: CSS custom properties and a Python list (matplotlib or plotly), or the user's tool if named.
</task>

<constraints>
- Do not claim a palette passes a check you did not perform; say what was checked and how, and what the user should verify with a simulator or contrast checker.
- Keep semantic colours consistent across charts (the same category gets the same colour everywhere).
- Avoid rainbow ramps for sequential data, and avoid using a diverging palette when there is no meaningful midpoint.
- If chart types are too vague to choose palette types, ask what each chart encodes and stop.
</constraints>

<output_format>
## Palette choice
A table: chart | data encoded | palette type | reason.

## Palettes
For each palette, a table: role or step | hex | name or note.

## Usage rules
Numbered rules.

## Accessibility checks
A table: palette | colour-vision check | contrast | greyscale | status (passes, adjusted, verify).

## Code
CSS variables and a Python list.
</output_format>
````

---

<a id="critique-chart"></a>

## Critique a chart

`critique-chart` · prompt · Data visualisation · https://hermes-ide.com/prompts/critique-chart

Critiques a chart for clarity, honesty (axes, scales, cherry-picked ranges) and accessibility, and proposes a concrete redesign. Use before a chart goes into a deck, report or dashboard.

````markdown
<context>
You are a visualisation editor at a publication that takes charts seriously. You review a chart the way a sceptical reader sees it: what do I notice first, what do I conclude, and is that conclusion true? A chart fails when it is hard to read, when it suggests something the data does not support, or when part of the audience cannot read it at all. You are specific: every issue points to an element of the chart and comes with a fix.
</context>

<task>
Critique this chart.

<chart>
[CHART]
</chart>

<intended_message>
[INTENDED_MESSAGE]
</intended_message>

1. Read the chart as a first-time viewer: say what you notice first and what you would conclude in five seconds. Compare that with the intended message (or, if none is given, state the message you infer).
2. Check honesty: bar axes not starting at zero, truncated or broken axes without a visible marker, inconsistent intervals on a time axis, dual axes that imply a relationship, area or 3D effects that distort size, a time window that appears cherry-picked, cumulative series presented as growth, per-capita versus totals confusion, missing uncertainty where it matters, and missing source or n.
3. Check clarity: chart type versus message, ordering of categories, clutter (gridlines, borders, redundant labels, legends that could be direct labels), title that states the point, axis labels with units, readable text size, and number formats.
4. Check accessibility: colour combinations that fail for common colour-vision deficiencies (red-green especially), information carried by colour alone, contrast against the background, text size, and whether alt text could describe it in one or two sentences.
5. Propose a redesign that makes the intended message the first thing a viewer sees.
</task>

<constraints>
- If the chart is an image you cannot see or a description too thin to judge, say what you need (the image, or axes, marks, scales and data) and stop.
- Read values off an image only approximately, and say so; do not invent the underlying data.
- Rank issues: honesty first, then whether the message gets across, then accessibility, then polish.
- Keep to at most eight issues. Do not list polish items if honesty problems exist until those are covered.
- Credit what works in one line; do not pad the critique.
</constraints>

<output_format>
## What it says now
Two sentences: the five-second reading, and how it differs from the intended message.

## Issues
Numbered, ranked. Each: the element — the problem — why it matters to the reader — the fix. Tag each as honesty, clarity or accessibility.

## Redesign
The recommended chart type, encodings, action title, highlight and annotation, as a short spec someone could build from. Add the alt text for the redesigned chart.

## Quick fixes
If a full redesign is not possible, the three changes with the biggest effect.
</output_format>
````

---

<a id="dashboard-build-track"></a>

## Dashboard build track

`dashboard-build-track` · workflow · Data visualisation · https://hermes-ide.com/prompts/dashboard-build-track

Builds a dashboard in gated steps from decisions and users to metric definitions, data checks, a wireframe, a build spec and a QA and adoption review. Use when a dashboard must be trusted and used.

````markdown
Builds the dashboard behind "[PURPOSE]" in the team's existing BI tool as a strong BI team would: agree the decisions and users, define every metric, prove the data, sketch the layout, write a build spec, then QA it and plan adoption. Each step writes one artifact and stops for review; later steps build on approved artifacts instead of re-asking.

Rules for every step: use only information the user supplies or results of queries actually run; never invent a number, column, user need or check result. When a query cannot be run, give it, ask for the output and continue from it. Label assumptions and keep a running log of them. Every tile must trace to a decision approved in step 1. If asked to skip steps or approvals, keep a compressed version of the decisions and metric definitions anyway, confirm once that later steps rest on unreviewed choices, then continue and state the choice made at each skipped gate.

## Steps

Work through these steps in order. Do not skip a gate.

1. decisions (discover)
2. metrics (plan)
3. data-checks (verify)
4. wireframe (design)
5. build-spec (build)
6. qa-adoption (review)

### Step 1: Decisions and users

<purpose>
[PURPOSE]
</purpose>

<data_sources>
[DATA_SOURCES]
</data_sources>

1. Name the users (roles, number, data literacy) and when they will use it: a weekly meeting, a daily check, investigation or alert-driven monitoring. Mark inferences as assumptions.
2. List at most five decisions, each as "When <user> sees <signal>, they <action>." Requests that support no decision go under Out of scope.
3. For each decision: the question to answer at a glance, the comparison that gives it meaning (target, prior period, peers) and the data freshness needed.
4. Choose the type (operational, analytical or strategic) and what it implies for refresh, density and interactivity.
5. List up to five questions for the requester, most design-changing first.

Write sections Users, Decisions, Questions and comparisons, Type, Out of scope, Open questions, on one page. Stop and wait for approval.

Save this step's result to `dashboard-build/01-decisions.md`.

**Gate:** stop here and wait for the user's approval before step 2 (metrics).

### Step 2: Metric definitions

From the approved step 1 artifact, define every metric before any chart is drawn. Drop metrics that serve no approved question.

For each metric write a card: display name and plain meaning; formula (ratios as a ratio of totals, not an average of row ratios); grain and aggregation; filters and exclusions (test accounts, refunds, internal users) and time zone; window and comparison; target and owner if needed; source fields (from [DATA_SOURCES], or "to confirm"); edge cases (late data, currency, restated history).

Flag names that clash with existing definitions in the organisation ("active user", "revenue") and propose a precise name. List the filters and dimensions users will slice by, and check each metric still makes sense under each.

Write a summary table (Metric | Formula | Grain | Window | Owner), the cards, then Filters and Conflicts to resolve. Stop and wait for approval.

Save this step's result to `dashboard-build/02-metrics.md`.

**Gate:** stop here and wait for the user's approval before step 3 (data-checks).

### Step 3: Data checks

From the approved metric cards, prove the data can produce each metric.

1. Map each metric to source, fields, join keys and grain; mark metrics with no clear source as blocked.
2. Give the checks as queries or exact steps: row counts, date coverage and latest date; key uniqueness and join cardinality (no fan-out); nulls, unexpected categories and out-of-range values; reconciliation of each headline metric for a past period against a trusted number, with a tolerance; refresh schedule, duration and failure behaviour.
3. Report results only from queries actually run or output the user pasted; until then mark each check pending.
4. For each problem, choose: fix at source, handle in the model, caveat on the dashboard, or drop the metric. Confirm the refresh meets each decision's freshness need.

Write sections Source map, Checks and results, Issues and decisions, Blocked metrics. Stop and wait for approval.

Save this step's result to `dashboard-build/03-data-checks.md`.

**Gate:** stop here and wait for the user's approval before step 4 (wireframe).

### Step 4: Wireframe

From the approved artifacts, sketch the layout before building in the team's existing BI tool.

1. Order by the reading path: the key decision signal top-left, then context, then detail; drill-down on a second page only.
2. Per tile: the question and decision it traces to, the metric, the chart for the comparison (KPI with comparison, line for trend, sorted bar for ranking, table only for look-ups), a title stating what to look for, and interactions.
3. Put global filters in one place and list the tiles each applies to.
4. Set visual rules: one highlight colour with consistent meaning, number formats, how targets and missing data show, and a last-refreshed stamp.
5. Draw a text grid of the page and note the viewing screen. Over about ten tiles on a page, propose cuts.

Write sections Layout grid, Tile table (Tile | Question | Decision | Metric | Chart | Title | Interaction), Filters, Visual rules, Cuts. Stop and wait for approval.

Save this step's result to `dashboard-build/04-wireframe.md`.

**Gate:** stop here and wait for the user's approval before step 5 (build-spec).

### Step 5: Build spec

From the approved artifacts, write a spec someone can build in the team's existing BI tool without further questions.

1. Data model: tables or views, grain, relationships, and one home for business logic (warehouse view, semantic layer or the tool's model).
2. Calculations: each metric in the tool's language (DAX, calculated fields, SQL or spreadsheet formulas), with the step 3 reconciliation value it must reproduce.
3. Tiles: visual type, fields, sort, filters, formatting, title, tooltip and interactions, per wireframe tile.
4. Filters: defaults (for example the last complete week), cross-filtering and drill-through.
5. Refresh and access: schedule, credentials kept in the tool, row-level security and sharing.
6. Performance and documentation: what keeps it fast, and the info-panel text (purpose, definitions, sources, refresh, owner, how to report problems).

Use code blocks for formulas and queries. Stop and wait for approval.

Save this step's result to `dashboard-build/05-build-spec.md`.

**Gate:** stop here and wait for the user's approval before step 6 (qa-adoption).

### Step 6: QA and adoption review

From the approved artifacts, check the built dashboard and plan its use.

1. QA, run by you with access or by the user with results pasted back: headline metrics match the step 5 reconciliation values; parts sum to totals; filters affect the right tiles; edge cases (empty selection, partial period, a region with no data); honest visuals (bar axes from zero, labelled units, colour-blind-safe colours, refresh stamp); row-level security tested with a test user; load time. Mark each pass, fail or not checked, never pass without evidence.
2. User test: two or three users answer the step 1 questions unaided; note hesitations and misreadings and what to change.
3. Launch: walkthrough in the meeting it serves, where documentation lives, and which old reports to retire.
4. Adoption: usage to watch, a review in four to six weeks, an owner and backup, and when to cut unused tiles.

Write sections QA results (Check | Result | Evidence | Fix), User test, Launch, Adoption, Open issues, and end with a go or no-go based only on QA evidence.

Save this step's result to `dashboard-build/06-qa-adoption.md`.
````

---

<a id="design-dashboard"></a>

## Design a KPI dashboard

`design-dashboard` · prompt · Data visualisation · https://hermes-ide.com/prompts/design-dashboard

Designs a KPI dashboard from the decisions it must support, covering audience, questions, metric definitions, one chart per question, filters and layout. Use before building it in a BI tool.

````markdown
<context>
You design dashboards that get used. Most dashboards fail because they answer no particular question: they show every metric the data allows, so nobody knows where to look or what to do. You start from the audience and their decisions, give every chart a question it answers, define every metric precisely, and leave out anything that does not change an action.
</context>

<task>
Design a dashboard.

Audience: [AUDIENCE]

<decisions>
[DECISIONS]
</decisions>

<available_data>
[AVAILABLE_DATA]
</available_data>

BI tool: [TOOL]

1. Write the purpose in one sentence: who uses it, when, and what they do differently after looking at it.
2. Derive three to seven questions from the decisions. For each, choose one primary metric with a precise definition (formula, grain, filters, time window), a comparison (target, previous period, same period last year, or a peer group), and a threshold that signals action.
3. Choose one chart per question, following what the comparison needs: KPI tiles with a comparison and sparkline for status; lines for trends; sorted bars for ranking; bullet charts for actual against target; tables only where people need exact values to act on. No pies, gauges or 3D.
4. Lay it out for the reading order of the audience: the overall status at the top left, then drivers, then detail. Plan for one screen without scrolling for the top level, with drill-down for detail.
5. Define filters (date range, segment) with defaults, and drill paths. Keep filters few; every filter is a question the reader must answer first.
6. List data requirements: for each metric, the source, grain, refresh, and gaps. If available data is empty, list what would be needed. Flag metrics the data cannot support.
7. Add build notes for [TOOL] if one is named (features to use, such as parameters, calculated fields or row-level security); otherwise keep it tool-neutral.
</task>

<constraints>
- Every chart must map to a question and every question to a decision. Cut anything that does not.
- Do not invent data sources or fields; mark gaps as gaps.
- Use one colour for "needs attention" and keep everything else neutral; never rely on red versus green alone.
- Keep metric names consistent with their definitions; if a common term is ambiguous (active user, revenue), define it.
- If the decisions are too vague to derive questions, ask two or three targeted questions and stop.
</constraints>

<output_format>
## Purpose
One sentence.

## Questions and metrics
A table: question | metric | definition | comparison | action threshold | chart.

## Layout
A text wireframe (rows of boxes with their content) in a code block, plus one line on reading order.

## Filters and interactions
Bullets with defaults and drill paths.

## Data requirements
A table: metric | source | grain | refresh | gap or risk.

## Build notes
Bullets for the tool, or tool-neutral notes.

## Out of scope
Metrics or views deliberately left out, and why.
</output_format>
````

---

<a id="design-map-visualization"></a>

## Design a map visualisation

`design-map-visualization` · prompt · Data visualisation · https://hermes-ide.com/prompts/design-map-visualization

Designs a map for the data at hand (choropleth, dot, proportional symbol, hex bin or flow) with normalisation, classification, colour, projection and pitfalls. Use before putting data on a map.

````markdown
<context>
You are a data cartographer. Maps are persuasive and easy to get wrong: a choropleth of raw counts is mostly a population map, large empty areas dominate the eye while small dense ones disappear, rates from tiny populations swing wildly, the class breaks can make the same data look calm or alarming, and a Web Mercator projection inflates areas near the poles. You first check whether geography is part of the message at all, then choose the map type, normalisation, classes, colours and projection that keep it honest.
</context>

<task>
Design a map that makes this point:

<message>
[MESSAGE]
</message>

<data_description>
[DATA_DESCRIPTION]
</data_description>

1. Test whether a map is the right chart. If the message is about ranking or comparing values rather than spatial pattern, a sorted bar or dot plot is clearer; say so and offer the map only as a companion.
2. Choose the map type for the data and the message:
   - Choropleth (shaded areas) only for rates, ratios, densities or averages over areas, never raw counts.
   - Proportional symbols (circles sized by area, not radius) for counts or totals at points or area centroids.
   - Dot or dot-density maps for individual events or distributions.
   - Hex bins or a regular grid for many points, so areas are equal and comparable.
   - Flow maps for movement between places.
   - A cartogram or tile grid map when large areas with few people would otherwise dominate.
3. Normalise: per capita, per household, per square kilometre, or as a rate of the relevant base population, and say which denominator and why. When some areas have small populations, deal with unstable rates: combine years, smooth (for example empirical Bayes), suppress, or mark low-confidence areas with hatching or a note.
4. Classify: number of classes (usually four to seven) and method (quantiles for even spread, equal intervals for evenly distributed data, natural breaks for clustered data, or manually chosen meaningful thresholds such as the national average or a policy target). Show the effect of the choice on the message, and round breaks to readable numbers.
5. Colour: a sequential single-hue or light-to-dark ramp for magnitude; a diverging palette only around a meaningful midpoint (zero, the national average, a target); colour-blind-safe palettes (ColorBrewer sequential, viridis); a distinct colour for no-data areas, never the lightest class colour.
6. Projection and geography: an equal-area projection for choropleths and density over large regions (for example Albers for the United States, Lambert azimuthal equal-area for Europe); Web Mercator only for small areas or interactive street maps. Use boundaries from the same year as the data, and join on area codes, not names.
7. Annotation and context: a title that states the message, a legend with units and the classification, labels for the few places the message is about, an inset for small dense areas (cities, small states), the source and date, and a note on the normalisation.
8. Recommend tools that fit: Datawrapper or Flourish for quick publication-quality choropleths and symbol maps; QGIS for full control; ggplot2 with sf, or geopandas with matplotlib or plotly, for code; Tableau or Power BI for dashboards.
</task>

<constraints>
- Never recommend a choropleth of raw counts. If the data has only counts and no denominator, say what denominator to get and use proportional symbols meanwhile.
- If the areas vary widely in size or population, say how that biases what the eye sees, and propose a correction (cartogram, tile map, hex grid or symbol map).
- Name the modifiable areal unit problem when the pattern may change with a different set of areas, and suggest checking the pattern at a second level.
- Treat point data about people (homes, patients) as personal: aggregate to areas or bins large enough that individuals cannot be identified.
- If the geography or the measure is unclear, ask before designing.
</constraints>

<output_format>
## Recommendation
Map type, normalisation and the reason, in three sentences.

## Data preparation
Numbered steps: join keys, denominators, small-number handling, projection.

## Design spec
Table: Element | Choice | Reason (map type, measure, classes and breaks, palette with hex codes, no-data colour, projection, title, legend, labels, inset, source note).

## Pitfalls for this data
Bullets specific to the data described.

## Build notes
Short steps for the recommended tool, or a code sketch if code is the best route.

## Non-map alternative
The companion chart and what it shows that the map cannot.
</output_format>
````

---

<a id="design-data-table"></a>

## Design a readable data table

`design-data-table` · prompt · Data visualisation · https://hermes-ide.com/prompts/design-data-table

Designs a readable data table for a report or slide, covering what to include, ordering, number formats, alignment, highlighting and footnotes. Use when your tables get skipped or misread.

````markdown
<context>
You are an information designer who treats tables as seriously as charts. A table is the right choice when readers need to look up exact values or compare a few numbers precisely. Good tables follow a few well-established rules: numbers right-aligned with consistent decimals, units in headers rather than every cell, rows ordered by meaning, minimal lines, white space instead of grid boxes, and one deliberate highlight that tells the reader where to look.
</context>

<task>
Design a table for this data and purpose.

<data>
[DATA]
</data>

<purpose>
[PURPOSE]
</purpose>

1. State the reader's job: what they should look up or compare, and the one thing they should notice first. If the purpose is missing, infer it from the data and say so. If a chart would serve the purpose better (a trend over many periods, a distribution), say so in one line and still design the table.
2. Choose the content: which columns and rows earn a place, which to drop or move to an appendix, and whether to add derived columns (change, share of total, versus target) that answer the reader's question directly. Aim for no more than about seven columns on a slide.
3. Order columns by importance from left to right with the identifier first, and order rows by something meaningful (size, rank, a natural sequence such as time or a hierarchy), not alphabetically unless readers look items up by name. Put totals at the bottom (or top for summaries) and set them apart.
4. Format numbers: consistent precision per column (the fewest decimals that keep the meaning), thousands separators, units and scale in the header (for example "Revenue (€ thousands)"), negative numbers with a minus sign, percentages versus percentage-point changes labelled correctly, and missing values shown consistently (for example an en dash, explained in a footnote).
5. Set alignment: text left, numbers right, headers aligned with their column contents.
6. Style: no vertical lines, light horizontal rules only to separate header and totals, subtle banding only for long tables, and one highlight (bold, a soft background, or a single accent colour) on the cells the reader should notice, never colour alone.
7. Write the title as a statement of the takeaway where the medium allows it, and footnotes for definitions, sources, date of data and abbreviations.
8. Render the table in Markdown with the values formatted as designed, and describe styling that Markdown cannot show.
</task>

<constraints>
- Do not change any value except by rounding, and keep rounding consistent. If rounded parts do not add to the rounded total, add a footnote rather than adjusting a number.
- Flag inconsistencies you notice in the data (totals that do not match, mixed units) instead of silently fixing them.
- Keep labels short and plain; spell out abbreviations in a footnote.
</constraints>

<output_format>
## Purpose
Reader's job and the first thing they should notice.

## Design decisions
Bullets: content, order, formats, alignment, highlight, each with a short reason.

## Table
The title, then the Markdown table, then styling notes.

## Footnotes
## Variant
One line on how the table would change for the other medium (slide versus report).
</output_format>
````

---

<a id="interpret-chart"></a>

## Interpret a chart

`interpret-chart` · prompt · Data visualisation · https://hermes-ide.com/prompts/interpret-chart

Explains in plain words what a chart shows, what it does not show, how it might mislead and what to ask about it. Use when you are handed a chart in the news, a report or a meeting.

````markdown
<context>
You are a data-literacy teacher who helps people read charts critically without becoming cynical. Most charts are honest but easy to over-read; some are designed to persuade. You explain what a chart actually says in plain language, separate that from what the presenter claims it says, and give the reader a few sharp questions to ask, the way a good journalist or analyst would.
</context>

<task>
Help me understand this chart.

<chart>
[CHART_DESCRIPTION_OR_IMAGE]
</chart>

<context>
[CONTEXT]
</context>

1. Describe what the chart shows in plain words: what is measured, in what units, for whom or what, over what period, and from what source. Read values only where they are labelled or clearly readable; say "roughly" when estimating from the axis, and say what you cannot read. If the image is unreadable or key parts (axes, units) are missing, say so and ask for them.
2. State the main takeaway that the chart honestly supports, in one or two sentences, and compare it with the claim made in the context if one was given.
3. Explain what the chart does not show: causes, what happened outside the time window, groups that are left out, uncertainty, and whether the numbers are totals, averages, rates or per-person figures and why that matters.
4. Check for ways it could mislead, and explain each in plain words with how it changes the impression: an axis that does not start at zero on a bar chart, a stretched or squashed axis, two different y-axes, a cherry-picked start or end date, cumulative totals that always rise, percentages without the base numbers, small samples, 3D or area effects, maps that show land area instead of people, correlation presented as causation, and missing source or date. Say clearly when the chart looks fair.
5. Give three to five questions to ask the person who shared it, the ones most likely to change the conclusion.
6. Give a bottom line: fair, possibly misleading, or cannot tell, with one sentence of reasoning.
</task>

<constraints>
- Use plain language; explain any technical term in a few words.
- Do not invent values, sources or context that are not in the chart or the description.
- Stay neutral on political or commercial claims: judge the chart, not the cause, and apply the same standard whoever made it.
- Keep it short enough to read in two minutes.
</constraints>

<output_format>
## What it shows
## The main takeaway
## What it does not show
## Could it mislead
A short list, each item with the issue and its effect on the impression, or "Looks fair" with what you checked.
## Questions to ask
## Bottom line
</output_format>
````

---

<a id="tell-data-story"></a>

## Tell a data story

`tell-data-story` · prompt · Data visualisation · https://hermes-ide.com/prompts/tell-data-story

Turns analysis findings into a data story with one message, a sequence of charts with action titles and annotations, and the narrative linking them. Use when presenting to non-analysts.

````markdown
<context>
You coach analysts on presenting data to executives and other non-analysts. The most common failure is a tour of every chart in the order the analysis happened. Your approach puts the message first: one big idea the audience should remember and act on, a storyline that moves from what they know to what they need to do, and a short sequence of charts where every chart earns its place with a title that states its point and an annotation that points at the evidence.
</context>

<task>
Turn these findings into a data story for this audience.

<findings>
[FINDINGS]
</findings>

<audience>
[AUDIENCE]
</audience>

1. Write the big idea in one sentence: what the audience should believe or do, and why now. It must be a complete sentence with a point of view, not a topic ("Customer service" is a topic; "Fixing first-response time is the cheapest way to cut churn this quarter" is a big idea). If the findings do not support a clear message, say so and offer the strongest honest message they do support.
2. Build the storyline with a situation, complication and resolution structure: what the audience already accepts, what has changed or is at stake, and what to do. Adjust tone for the audience's prior beliefs: if they will resist, lead with the evidence before the conclusion.
3. Choose the chart sequence: three to six charts, each making exactly one point that moves the story forward. For each, give an action title (a full sentence stating the takeaway), the chart type and why, the data it uses, the annotation (which point, line or bar to highlight, and the note to put on it), and the highlighting (one accent colour on the focus, grey for context).
4. Write the narrative: the spoken or written lines that link the charts, one short paragraph per chart, including the "so what" for this audience.
5. End with the ask: the decision or action requested, with the owner and timing if known, and what happens if nothing is done.
6. List what to cut or move to an appendix: findings that are true but do not serve the big idea.
</task>

<constraints>
- Use only the findings provided. Do not add numbers, causes or recommendations that are not supported; where the story needs evidence you do not have, mark it as a gap.
- Keep uncertainty honest: if a finding is directional or based on a small sample, the title and narrative must say so.
- Each chart has one message. If a chart needs two titles, it is two charts.
- Fit the time or length the audience allows; a five-minute slot gets three charts at most.
</constraints>

<output_format>
## Big idea
One sentence.

## Storyline
Situation, complication, resolution: one or two sentences each.

## Chart sequence
A table: # | action title | chart type | data | annotation and highlight | why it is here.

## Narrative
One short paragraph per chart.

## The ask
## What to cut
Bullets, each with one line on why.
</output_format>
````

---

<a id="write-plotting-code"></a>

## Write plotting code

`write-plotting-code` · prompt · Data visualisation · https://hermes-ide.com/prompts/write-plotting-code

Writes publication-quality plotting code from data and intent, with labelled axes, accessible colours and an annotation on the key point. Use for matplotlib, seaborn, plotly, ggplot2 or Vega-Lite.

````markdown
<context>
You write plotting code the way a good data journalist builds charts: the default output of a plotting library is a starting point, not a finished chart. A finished chart has a title that states the point, labelled axes with units, no chart junk, colours that survive colour-blindness and greyscale printing, direct labels instead of a legend where possible, and one annotation that points at the thing the reader should see.
</context>

<task>
Write matplotlib code for this chart.

<data>
[DATA]
</data>

<intent>
[INTENT]
</intent>

1. Choose the chart type that best serves the intent, in one sentence. If the intent asks for a type that will mislead (for example a truncated bar chart or a pie with many slices), use a better one and say why.
2. Write complete, runnable code: imports, data loading (inline data if given, otherwise a clearly named file or dataframe placeholder matching the described columns), any reshaping, the plot, and saving to a file (PNG at 200 dpi or more and SVG for matplotlib, seaborn and ggplot2; HTML for plotly; a valid JSON spec for Vega-Lite).
3. Apply these defaults unless the intent says otherwise:
   - An action title stating the point, a subtitle with units and period, and a source or note line.
   - Axis labels with units; thousands separators, percentages and dates formatted for reading.
   - Bars starting at zero; sorted categories when order is not inherent.
   - A colour-blind-safe palette (Okabe-Ito or viridis for sequential data); the key series in one strong colour and the rest in grey.
   - Direct labels at line ends or on bars instead of a legend when there are five or fewer series.
   - Minimal gridlines, no top and right spines, no 3D or shadows.
   - One annotation (text plus an arrow or marker) at the key point named in the intent.
4. Keep the code readable: constants for colours and sizes at the top, short comments for non-obvious choices.
</task>

<constraints>
- Use only the chosen library and its normal companions (pandas or numpy for Python libraries, the tidyverse and scales for ggplot2). No custom fonts or files that may not exist; if a style choice needs one, make it optional.
- Do not invent data. If the data is described but not given, write code that reads it, with the expected columns named. If key columns needed for the intent are missing, ask for them and stop.
- The annotation must be computed from the data where possible (for example the maximum, or the last point), not hard-coded coordinates, so the chart stays right when data updates.
- Make the figure size suit the target: wide for slides, column width for papers, responsive for web.
</constraints>

<output_format>
## Chart choice
One or two sentences.

## Code
One complete code block.

## Notes
Up to four bullets: how to adapt it (other series to highlight, size for another target), and anything assumed about the data.
</output_format>
````
