infinite-agents-public/mapbox_test/mapbox_globe_3/CLAUDE.md

10 KiB
Raw Blame History

CLAUDE.md - Globe Visualization 3: Global Economic Dashboard

Project Context

This is iteration 3 in a progressive Mapbox globe learning series. Each iteration builds on previous knowledge while introducing new concepts from web-based documentation.

Series Progression

  1. Iteration 1: Population circles (basic size/color styling)
  2. Iteration 2: Temperature heatmap (density visualization)
  3. Iteration 3: Economic dashboard (data-driven expressions) ← YOU ARE HERE

Web Learning Assignment

Research Source

Key Learnings Extracted

1. Expression Syntax

// Match expression for categorical data
'circle-color': [
  'match',
  ['get', 'ethnicity'],
  'White', '#fbb03b',
  'Black', '#223b53',
  'Hispanic', '#e55e5e',
  'Asian', '#3bb2d0',
  /* other */ '#ccc'
]

2. Interpolate for Dynamic Scaling

// Radius scaling with zoom
'circle-radius': [
  'interpolate',
  ['linear'],
  ['zoom'],
  12, ['/', ['get', 'population'], 10],
  22, ['/', ['get', 'population'], 5]
]

3. Data Property Access

  • Uses ['get', 'property'] to access feature properties
  • Supports nested property access
  • Enables dynamic styling without hardcoded values

Implementation Approach

Adapted Learnings for Economic Data

Original Example: Categorical ethnicity data with match expression Our Implementation: Continuous economic metrics with interpolate expressions

Why Interpolate Over Match?

Economic indicators (GDP, growth rate, development index) are continuous variables, not categories. Interpolate creates smooth gradients that accurately represent data ranges.

Advanced Expression Techniques Used

1. Diverging Color Scale (Growth Rate)

'circle-color': [
  'interpolate',
  ['linear'],
  ['get', 'growthRate'],
  -25, '#b2182b',  // Negative (red)
  0, '#f7f7f7',    // Zero (white)
  8, '#2166ac'     // Positive (blue)
]

Insight: Diverging scales work best when data has a meaningful midpoint (zero growth).

2. Multi-Stop Interpolation (GDP Sizing)

'circle-radius': [
  'interpolate',
  ['linear'],
  ['get', 'gdpPerCapita'],
  0, 3,
  10000, 8,
  30000, 15,
  70000, 25
]

Insight: Multiple stops create non-linear visual progressions matching data distribution.

3. Zoom-Responsive Styling

'circle-opacity': [
  'interpolate',
  ['linear'],
  ['zoom'],
  1, 0.7,
  8, 0.9
]

Insight: Visual properties should adapt to zoom level for optimal clarity.

Data Architecture

Dataset Design

  • 120 countries with realistic economic data
  • 4 properties per country: GDP, growth, development, trade
  • GeoJSON Point features for globe compatibility
  • Comprehensive coverage: All continents and economic regions

Property Selection Rationale

  1. GDP per Capita: Wealth indicator (size encoding)
  2. Growth Rate: Economic momentum (diverging color)
  3. Development Index: Human development (sequential color)
  4. Trade Volume: Global integration (size/color option)

Data Realism

  • Based on World Bank, IMF, UN data patterns
  • Representative values showing global diversity
  • Extreme cases included (Afghanistan -20.7%, Ireland +5.1%)

Multi-Dimensional Encoding Strategy

Visual Channels

  • Size: Quantitative magnitude (GDP, trade, development)
  • Color: Sequential or diverging scales (all metrics)
  • Position: Geographic (inherent to globe)
  • Interaction: Popup reveals all dimensions

Metric Combinations

The system supports 16 possible combinations (4 size × 4 color):

  • GDP × Growth: Wealth vs momentum
  • Trade × Development: Globalization vs human development
  • Development × Growth: Current state vs trajectory
  • Growth × GDP: Expansion leaders vs baseline

Each combination reveals different economic narratives.

Expression Performance Optimization

Why Expressions Are Fast

  1. Client-Side Evaluation: No server round trips
  2. GPU Acceleration: Rendering pipeline optimization
  3. Cached Property Access: Single data fetch per feature
  4. Minimal Layer Updates: Only paint properties change

Performance Metrics

  • 120 features render instantly
  • Metric switching is sub-100ms
  • Zoom interactions remain smooth
  • No visible lag during rotation

UI/UX Design Decisions

Dynamic Legend Generation

Legends update automatically when metrics change:

  • Size legend shows min/max visual examples
  • Color legend displays gradient with labeled endpoints
  • Labels format appropriately ($, %, decimal)

Preset Views

Four curated metric combinations guide exploration:

  1. Economic Performance
  2. Trade & Development
  3. Development Momentum
  4. Growth Leaders

Rationale: Users may not know which combinations are insightful; presets provide guided discovery.

Information Hierarchy

  1. Primary Controls: Metric selectors (top-left panel)
  2. Secondary Info: Legend (bottom-left)
  3. Contextual Details: Hover popups (on-demand)
  4. About Box: Methodology explanation (top-right)

Code Organization

Module Structure

src/
├── index.js              # Main application logic
│   ├── Map initialization
│   ├── Expression definitions
│   ├── Layer configuration
│   ├── Interaction handlers
│   └── Legend rendering
└── data/
    └── economic-data.js  # GeoJSON dataset

Separation of Concerns

  • Data: Pure GeoJSON, no logic
  • Styling: Expression objects as configuration
  • Interaction: Event handlers separated from rendering
  • UI Updates: Functional legend rendering

Comparison to Previous Iterations

Iteration 1 (Population)

  • Complexity: Low (2 properties, simple expressions)
  • Expression Types: Basic interpolate
  • Interactivity: None (static visualization)

Iteration 2 (Temperature)

  • Complexity: Medium (heatmap density)
  • Expression Types: Heatmap-specific
  • Interactivity: Hover only

Iteration 3 (Economic)

  • Complexity: High (4 properties, 16 combinations)
  • Expression Types: Interpolate with diverging/sequential scales
  • Interactivity: Full metric switching + presets + popups

Advancement Summary

Multi-dimensional data encoding Dynamic visualization reconfiguration Advanced expression patterns (diverging scales) Professional UI/UX design Real-world complex dataset

Learning Outcomes

Technical Mastery

  1. Expression Syntax: Fluent in interpolate, match, and nested expressions
  2. Data-Driven Styling: Understanding when to use different expression types
  3. Performance Patterns: Client-side evaluation strategies

Visualization Principles

  1. Visual Encoding: Appropriate channel selection for data types
  2. Color Theory: Diverging vs sequential scales
  3. Multi-Dimensional Display: Combining size + color effectively

Economic Analysis

  1. Global Patterns: Wealth concentration, growth hotspots
  2. Development Paradoxes: Trade-rich but development-poor nations
  3. Regional Clusters: Geographic economic similarities

Future Directions

Next Iteration Ideas

  1. Time Series Animation: Add temporal dimension
  2. Step Expressions: Categorical economic tiers
  3. Case Expressions: Conditional styling based on multiple criteria
  4. 3D Extrusions: Height as third encoding dimension

Advanced Expression Concepts

  • Nested Expressions: Combine multiple expression types
  • Mathematical Operations: Calculate derived metrics in expressions
  • String Formatting: Dynamic label generation
  • Boolean Logic: Complex conditional styling

Resources Used

Documentation

  • Mapbox GL JS Expression Reference
  • Data-Driven Styling Examples
  • Globe Projection Documentation

Data Sources

  • World Bank Development Indicators
  • IMF Economic Outlook
  • UN Human Development Reports

Design Inspiration

  • ColorBrewer (color schemes)
  • Gapminder (multi-dimensional visualization)
  • Observable (interactive data exploration)

Development Notes

Challenges Encountered

  1. Diverging Scale Balance: Finding the right zero-point color
  2. Size Range Tuning: Avoiding overlap while maintaining proportionality
  3. Legend Clarity: Displaying complex scales in limited space

Solutions Applied

  1. Iterative Color Testing: Adjusted stops for visual balance
  2. Logarithmic Consideration: Linear worked better than log for this dataset
  3. Dynamic Formatting: Context-aware value formatting in legends

Browser Compatibility

  • Tested on Chrome, Firefox, Safari
  • Requires Mapbox GL JS v3.0+
  • ES6 modules (modern browser requirement)

Maintenance Guidance

Updating Data

Replace src/data/economic-data.js with new GeoJSON:

  • Maintain property names: gdpPerCapita, growthRate, developmentIndex, tradeVolume
  • Ensure Point geometry type
  • Verify coordinate format: [longitude, latitude]

Adding Metrics

  1. Add data property to GeoJSON features
  2. Define color scale in colorScales object
  3. Define size scale in sizeScales object
  4. Add option to <select> elements
  5. Update legend formatting in formatValue()

Adjusting Expressions

Expression arrays follow pattern:

[expressionType, interpolationType, input, stop1, value1, stop2, value2, ...]

Modify stops to change visual mapping.

Educational Value

This visualization demonstrates:

  • Real-world application of Mapbox expressions
  • Multi-dimensional data encoding techniques
  • Interactive data exploration patterns
  • Professional geospatial visualization development

Perfect for learning:

  • Mapbox GL JS expression system
  • Data visualization best practices
  • Economic data analysis
  • Globe-based cartography

Development Iteration: 3 of progressive series Complexity Level: Advanced Learning Focus: Data-driven expressions, multi-dimensional encoding Status: Complete and production-ready