home / skills / ancoleman / ai-design-components / visualizing-data

visualizing-data skill

/skills/visualizing-data

This skill helps you select, implement, and optimize data visualizations with accessible, high-performance charts across datasets and dashboards.

npx playbooks add skill ancoleman/ai-design-components --skill visualizing-data

Review the files below or copy the command above to add this skill to your agents.

Files (44)
SKILL.md
9.4 KB
---
name: visualizing-data
description: Builds dashboards, reports, and data-driven interfaces requiring charts, graphs, or visual analytics. Provides systematic framework for selecting appropriate visualizations based on data characteristics and analytical purpose. Includes 24+ visualization types organized by purpose (trends, comparisons, distributions, relationships, flows, hierarchies, geospatial), accessibility patterns (WCAG 2.1 AA compliance), colorblind-safe palettes, and performance optimization strategies. Use when creating visualizations, choosing chart types, displaying data graphically, or designing data interfaces.
---

# Data Visualization Component Library

Systematic guidance for selecting and implementing effective data visualizations, matching data characteristics with appropriate visualization types, ensuring clarity, accessibility, and impact.

## Overview

Data visualization transforms raw data into visual representations that reveal patterns, trends, and insights. This skill provides:

1. **Selection Framework**: Systematic decision trees from data type + purpose → chart type
2. **24+ Visualization Methods**: Organized by analytical purpose
3. **Accessibility Patterns**: WCAG 2.1 AA compliance, colorblind-safe palettes
4. **Performance Strategies**: Optimize for dataset size (<1000 to >100K points)
5. **Multi-Language Support**: JavaScript/TypeScript (primary), Python, Rust, Go

---

## Quick Start Workflow

### Step 1: Assess Data
```
What type? [categorical | continuous | temporal | spatial | hierarchical]
How many dimensions? [1D | 2D | multivariate]
How many points? [<100 | 100-1K | 1K-10K | >10K]
```

### Step 2: Determine Purpose
```
What story to tell? [comparison | trend | distribution | relationship | composition | flow | hierarchy | geographic]
```

### Step 3: Select Chart Type

**Quick Selection:**
- Compare 5-10 categories → Bar Chart
- Show sales over 12 months → Line Chart
- Display distribution of ages → Histogram or Violin Plot
- Explore correlation → Scatter Plot
- Show budget breakdown → Treemap or Stacked Bar

**Complete decision trees:** See `references/selection-matrix.md`

### Step 4: Implement

See language sections below for recommended libraries.

### Step 5: Apply Accessibility
- Add text alternative (aria-label)
- Ensure 3:1 color contrast minimum
- Use colorblind-safe palette
- Provide data table alternative

### Step 6: Optimize Performance
- <1000 points: Standard SVG rendering
- >1000 points: Sampling or Canvas rendering
- Very large: Server-side aggregation

---

## Purpose-First Selection

**Match analytical purpose to chart type:**

| Purpose | Chart Types |
|---------|-------------|
| **Compare values** | Bar Chart, Lollipop Chart |
| **Show trends** | Line Chart, Area Chart |
| **Reveal distributions** | Histogram, Violin Plot, Box Plot |
| **Explore relationships** | Scatter Plot, Bubble Chart |
| **Explain composition** | Treemap, Stacked Bar, Pie Chart (<6 slices) |
| **Visualize flow** | Sankey Diagram, Chord Diagram |
| **Display hierarchy** | Sunburst, Dendrogram, Treemap |
| **Show geographic** | Choropleth Map, Symbol Map |

---

## Visualization Catalog

### Tier 1: Fundamental Primitives
General audiences, straightforward data stories:
- **Bar Chart**: Compare categories
- **Line Chart**: Show trends over time
- **Scatter Plot**: Explore relationships
- **Pie Chart**: Part-to-whole (max 5-6 slices)
- **Area Chart**: Emphasize magnitude over time

### Tier 2: Purpose-Driven
Specific analytical insights:
- **Comparison**: Grouped Bar, Lollipop, Bullet Chart
- **Trend**: Stream Graph, Slope Graph, Sparklines
- **Distribution**: Violin Plot, Box Plot, Histogram
- **Relationship**: Bubble Chart, Hexbin Plot
- **Composition**: Treemap, Sunburst, Waterfall
- **Flow**: Sankey Diagram, Chord Diagram

### Tier 3: Advanced
Complex data, sophisticated audiences:
- **Multi-dimensional**: Parallel Coordinates, Radar Chart, Small Multiples
- **Temporal**: Gantt Chart, Calendar Heatmap, Candlestick
- **Network**: Force-Directed Graph, Adjacency Matrix

**Detailed descriptions:** See `references/chart-catalog.md`

---

## Accessibility Requirements (WCAG 2.1 AA)

### Text Alternatives
```html
<figure role="img" aria-label="Sales increased 15% from Q3 to Q4">
  <svg>...</svg>
</figure>
```

### Color Requirements
- Non-text UI elements: 3:1 minimum contrast
- Text: 4.5:1 minimum (or 3:1 for large text ≥24px)
- Don't rely on color alone - use patterns/textures + labels

### Colorblind-Safe Palettes

**IBM Palette (Recommended):**
```
#648FFF (Blue), #785EF0 (Purple), #DC267F (Magenta),
#FE6100 (Orange), #FFB000 (Yellow)
```

**Avoid:** Red/Green combinations (8% of males have red-green colorblindness)

### Keyboard Navigation
- Tab through interactive elements
- Enter/Space to activate tooltips
- Arrow keys to navigate data points

**Complete accessibility guide:** See `references/accessibility.md`

---

## Performance by Data Volume

| Rows | Strategy | Implementation |
|------|----------|----------------|
| <1,000 | Direct rendering | Standard libraries (SVG) |
| 1K-10K | Sampling/aggregation | Downsample to ~500 points |
| 10K-100K | Canvas rendering | Switch from SVG to Canvas |
| >100K | Server-side aggregation | Backend processing |

---

## JavaScript/TypeScript Implementation

### Recharts (Business Dashboards)
Composable React components, declarative API, responsive by default.

```bash
npm install recharts
```

```tsx
import { LineChart, Line, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts';

const data = [
  { month: 'Jan', sales: 4000 },
  { month: 'Feb', sales: 3000 },
  { month: 'Mar', sales: 5000 },
];

export function SalesChart() {
  return (
    <ResponsiveContainer width="100%" height={300}>
      <LineChart data={data}>
        <XAxis dataKey="month" />
        <YAxis />
        <Tooltip />
        <Line type="monotone" dataKey="sales" stroke="#8884d8" />
      </LineChart>
    </ResponsiveContainer>
  );
}
```

### D3.js (Custom Visualizations)
Maximum flexibility, industry standard, unlimited chart types.

```bash
npm install d3
```

### Plotly (Scientific/Interactive)
3D visualizations, statistical charts, interactive out-of-box.

```bash
npm install react-plotly.js plotly.js
```

**Detailed examples:** See `references/javascript/`

---

## Python Implementation

**Common Libraries:**
- **Plotly** - Interactive charts (same API as JavaScript)
- **Matplotlib** - Publication-quality static plots
- **Seaborn** - Statistical visualizations
- **Altair** - Declarative visualization grammar

**When building Python implementations:**
1. Follow universal patterns above
2. Use RESEARCH_GUIDE.md to research libraries
3. Add to `references/python/`

---

## Integration with Design Tokens

Reference the **design-tokens** skill for theming:

```css
--chart-color-primary
--chart-color-1 through --chart-color-10
--chart-axis-color
--chart-grid-color
--chart-tooltip-bg
```

```tsx
<Line stroke="var(--chart-color-primary)" />
```

Light/dark/high-contrast themes work automatically via design tokens.

---

## Common Mistakes to Avoid

1. **Chart-first thinking** - Choose based on data + purpose, not aesthetics
2. **Pie charts for >6 categories** - Use sorted bar chart instead
3. **Dual-axis charts** - Usually misleading, use small multiples
4. **3D when 2D sufficient** - Adds complexity, reduces clarity
5. **Rainbow color scales** - Not perceptually uniform, not colorblind-safe
6. **Truncated y-axis** - Indicate clearly or start at zero
7. **Too many colors** - Limit to 6-8 distinct categories
8. **Missing context** - Always label axes, include units

---

## Quick Decision Tree

```
START: What is your data?

Categorical (categories/groups)
  ├─ Compare values → Bar Chart
  ├─ Show composition → Treemap or Pie Chart (<6 slices)
  └─ Show flow → Sankey Diagram

Continuous (numbers)
  ├─ Single variable → Histogram, Violin Plot
  └─ Two variables → Scatter Plot

Temporal (time series)
  ├─ Single metric → Line Chart
  ├─ Multiple metrics → Small Multiples
  └─ Daily patterns → Calendar Heatmap

Hierarchical (nested)
  ├─ Proportions → Treemap
  └─ Show depth → Sunburst, Dendrogram

Geographic (locations)
  ├─ Regional aggregates → Choropleth Map
  └─ Point locations → Symbol Map
```

---

## References

**Selection Guides:**
- `references/chart-catalog.md` - All 24+ visualization types
- `references/selection-matrix.md` - Complete decision trees

**Technical Guides:**
- `references/accessibility.md` - WCAG 2.1 AA patterns
- `references/color-systems.md` - Colorblind-safe palettes
- `references/performance.md` - Optimization by data volume

**Language-Specific:**
- `references/javascript/` - React, D3.js, Plotly examples
- `references/python/` - Plotly, Matplotlib, Seaborn

**Assets:**
- `assets/color-palettes/` - Accessible color schemes
- `assets/example-datasets/` - Sample data for testing

---

## Examples

**Working code examples:**
- `examples/javascript/bar-chart.tsx`
- `examples/javascript/line-chart.tsx`
- `examples/javascript/scatter-plot.tsx`
- `examples/javascript/accessible-chart.tsx`

```bash
cd examples/javascript && npm install && npm start
```

---

## Validation

```bash
# Validate accessibility
scripts/validate_accessibility.py <chart-html>

# Test colorblind
# Use browser DevTools color vision deficiency emulator
```

---

**Progressive disclosure:** This SKILL.md provides overview and quick start. Detailed documentation, code examples, and language-specific implementations in `references/` and `examples/` directories.

Overview

This skill builds dashboards, reports, and data-driven interfaces that require charts, graphs, or visual analytics. It provides a purpose-first framework to match data characteristics to appropriate visualization types, plus accessibility patterns, colorblind-safe palettes, and performance guidance for different dataset sizes.

How this skill works

Assess data by type (categorical, continuous, temporal, spatial, hierarchical), dimensionality, and point volume, then pick a visualization based on the analytical goal (comparison, trend, distribution, relationship, composition, flow, hierarchy, geographic). It includes a catalog of 24+ chart types organized by purpose, implementation suggestions for JS/TS and Python, WCAG 2.1 AA accessibility rules, and strategies for rendering and aggregation depending on data volume.

When to use it

  • Designing dashboards or reports that must communicate clear analytical messages
  • Choosing the right chart type based on data shape and analytical purpose
  • Creating accessible visualizations that meet WCAG 2.1 AA standards
  • Optimizing visualization rendering for datasets from dozens to millions of rows
  • Building frontend visualization components with React, D3, Plotly, or Python libraries

Best practices

  • Start with data + purpose, not aesthetics; select charts that match the question
  • Limit categorical slices (<=6) for pie-like visuals; prefer bar charts for many categories
  • Provide text alternatives, strong contrast, and non-color encodings for accessibility
  • Switch rendering strategies by data size: SVG <1K, Canvas 10K+, server aggregation >100K
  • Avoid dual y-axes and 3D effects; favor small multiples or normalized scales

Example use cases

  • Monthly sales dashboard: line charts for trends, small multiples for product comparisons
  • Customer segmentation: stacked bars or treemaps to show composition by cohort
  • Exploratory analysis: scatter and hexbin plots for relationship detection on large samples
  • Network or flow analysis: Sankey or chord diagrams to visualize transfers between groups
  • Geospatial reporting: choropleth for regional aggregates, symbol maps for point data

FAQ

Which chart should I pick for time series with multiple metrics?

Use line charts with small multiples or stacked/colored area charts; avoid overcrowding by splitting metrics into panels.

How do I make charts accessible for colorblind users?

Use a colorblind-safe palette (e.g., IBM palette), ensure 3:1 contrast for UI elements, add textures/labels, and provide aria-labels and a data table alternative.