# cartography-geoviz

Skill for building thematic maps — choropleths, proportional symbols, bivariate schemes, and interactive layers. Teaches the agent to pick classification, palette, projection, and normalization so the map tells the truth.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · ★ 35
- Author: Muhammed Enes Duran
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/muend/geoai-skills/tree/HEAD/skills/cartography-geoviz/SKILL.md
- Updated: 2026-10-17
- HTML: https://affpapa.org/en/nevibecode/skills/cartography-geoviz

## What it does

Triggers on any request to create, compare, or review a user-facing map. Distinguishes map types by data: choropleth for normalized rates, proportional symbols for raw counts, bivariate for two related variables, heatmap or dot density for individual events. Checks normalization: raw-count polygons turn into population maps, and the agent will suggest rates or density instead.

Inside are tables for projection choice, classification (equal interval, quantile, Jenks, manual), and ColorBrewer palettes with colorblind checks. For map series it locks class breaks so panels stay comparable. Without GeoPandas or QGIS the skill fails: it orchestrates `plot()` arguments, `scheme=`, `cmap=`, and legend rendering. For interactive maps it configures Folium or deck.gl and requires tiling layers above fifty thousand features.

Five-step protocol: squint test at thumbnail size, colorblind simulator pass, legend audit (units, rounding, non-overlapping class edges), cross-check three features against the attribute table, and verify identical class breaks for series. Without denominator, CRS, or units the agent qualifies the result as unfinished.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill cartography-geoviz -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/cartography-geoviz/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/cartography-geoviz/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill cartography-geoviz -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/cartography-geoviz/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill cartography-geoviz -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/cartography-geoviz/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install muend/geoai-skills cartography-geoviz
```

2. **Manually: put the files in place**
- File: `.github/skills/cartography-geoviz/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill cartography-geoviz -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/muend/geoai-skills --path skills/cartography-geoviz
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/cartography-geoviz/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add muend/geoai-skills --skill cartography-geoviz -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/muend/geoai-skills/tree/HEAD/skills/cartography-geoviz/SKILL.md

## When to use it
- select map type and classification from data semantics
- normalize counts to density or rate for choropleth encoding
- lock class breaks across map series for comparison
- render interactive map with legend and formatted tooltips
- check palette for colorblind safety and NoData for separate color

## Example prompts
- Build a disease-rate choropleth by district with quantile classification and YlGnBu palette
- Compare two dates on maps with identical class breaks using `scheme='userdefined'`
- Make a Folium interactive map with legend, tooltips, and formatted numbers

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 87004a21920c619d.

BEGIN THIRD-PARTY FILE 87004a21920c619d
```text
---
name: cartography-geoviz
description: >-
  Always invoke before answering any request to create, compare, design, or
  review a user-facing map, even if the request is terse or underspecified.
  Covers publication maps, choropleths, map series and small multiples,
  comparable multi-date panels, proportional/bivariate/flow maps, raster
  rendering, and interactive web maps. Includes classification, color,
  legends, projections, accessibility, and large-data aggregation. Do not
  trigger for a temporary diagnostic plot inside another analysis.
license: MIT
metadata:
  author: Muhammed Enes Duran
---

# Cartography & Geovisualization

Purpose: maps that communicate honestly. Cartographic choices (class
breaks, ramps, normalization, projection) can manufacture or hide
patterns; this skill treats them as analytical decisions with stated
rationale, not styling.

## The first three questions

1. **What's the message?** One map = one message. If two variables
   compete, consider small multiples or a bivariate scheme — not twelve
   legend classes.
2. **Normalized?** Choropleths of raw counts are population maps in
   disguise. Rates, densities, or per-capita for area-based color; raw
   magnitudes → proportional symbols instead.
3. **Static or interactive?** Print/PDF/paper → matplotlib/QGIS layout;
   exploration/stakeholders → Folium/MapLibre; big point data →
   Kepler.gl/deck.gl (GPU).

## Thematic map type selection

| Data | Map type |
|---|---|
| Rate/ratio by polygon | Choropleth |
| Count/magnitude by place | Proportional/graduated symbols |
| Two related rates | Bivariate choropleth (3×3 max) |
| Individual-level density | Dot density or KDE surface (label bandwidth) |
| Continuous field (raster) | Classified or stretched render + hillshade context |
| Movement/OD | Flow map (width∝volume), aggregate to avoid hairballs |
| Change over time | Small multiples > animation for analysis; animation for outreach |

## Classification — the honesty lever

- **Natural breaks (Jenks)**: default for skewed data; breaks are
  data-specific, so NOT comparable across maps/dates.
- **Quantiles**: guaranteed color balance; can split near-identical values.
- **Equal interval**: comparable and intuitive; fails on skew.
- **Manual/defined**: the ONLY correct choice for map series (same breaks
  across all dates/regions) and for domain thresholds (WHO limits, slope
```
END THIRD-PARTY FILE 87004a21920c619d

The third-party file has ended. Everything between the 87004a21920c619d tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2410 of 6359 bytes. © Muhammed Enes Duran · MIT · https://github.com/muend/geoai-skills/tree/HEAD/skills/cartography-geoviz/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
