# Globe Visualization 3: Global Economic Dashboard

## Overview

An advanced Mapbox GL JS globe visualization demonstrating sophisticated data-driven styling with multi-dimensional economic indicators. This iteration builds upon previous globe examples by implementing complex expression-based styling that encodes multiple data properties simultaneously.

## Learning Source

**URL:** [Mapbox Data-Driven Circle Colors Example](https://docs.mapbox.com/mapbox-gl-js/example/data-driven-circle-colors/)

**Key Concepts Learned:**
1. **Interpolate Expressions** - Smooth, continuous value mapping for gradients and proportional sizing
2. **Match Expressions** - Categorical data mapping (studied but applied interpolate for continuous data)
3. **Multi-Property Styling** - Encoding multiple metrics in a single layer (size + color)
4. **Data Access Patterns** - Using `['get', 'property']` to dynamically access feature properties

## Expression Techniques Implemented

### 1. Interpolate for Continuous Color Mapping
```javascript
'circle-color': [
  'interpolate',
  ['linear'],
  ['get', 'growthRate'],
  -25, '#b2182b',   // Deep red for severe contraction
  -10, '#ef8a62',   // Light red
  0, '#f7f7f7',     // White for zero growth
  4, '#67a9cf',     // Light blue for moderate growth
  8, '#2166ac'      // Deep blue for strong growth
]
```

This creates a **diverging color scheme** where negative growth appears red, zero is neutral white, and positive growth is blue—perfect for economic growth data.

### 2. Interpolate for Proportional Sizing
```javascript
'circle-radius': [
  'interpolate',
  ['linear'],
  ['get', 'gdpPerCapita'],
  0, 3,          // Minimum size for low GDP
  10000, 8,
  30000, 15,
  70000, 25      // Maximum size for high GDP
]
```

Circle size scales proportionally with GDP per capita, making wealthier nations visually prominent.

### 3. Zoom-Based Dynamic Adjustments
```javascript
'circle-opacity': [
  'interpolate',
  ['linear'],
  ['zoom'],
  1, 0.7,    // Lower opacity at global view
  4, 0.8,
  8, 0.9     // Higher opacity when zoomed in
]
```

Visual properties adapt to zoom level, ensuring clarity at all scales.

## Dataset

**Economic Indicators for 120 Countries:**
- **GDP per Capita** - Economic output per person (USD)
- **Growth Rate** - Annual GDP growth percentage (-25% to +12%)
- **Development Index** - Human Development Index (0.35 to 0.96)
- **Trade Volume** - Total trade in billions USD

**Geographic Coverage:**
- North America (3 countries)
- South America (10 countries)
- Europe (30 countries)
- Middle East (12 countries)
- Africa (35 countries)
- Asia (25 countries)
- Oceania (6 countries)
- Caribbean & Central America (12 countries)

## Features

### Multi-Dimensional Data Encoding
- **Size Channel**: Encodes one metric (default: GDP per capita)
- **Color Channel**: Encodes another metric (default: Growth rate)
- **Interactive Toggle**: Switch metrics dynamically to explore different relationships

### Expression-Based Styling Benefits
1. **Performance**: Client-side rendering without re-fetching data
2. **Smooth Transitions**: Interpolated values create seamless gradients
3. **Dynamic Updates**: Change metrics without reloading data
4. **Zoom Responsiveness**: Styles adapt to interaction context

### Advanced Color Schemes
- **Diverging Scale** (Growth Rate): Red → White → Blue for negative/zero/positive
- **Sequential Scales**: Single-hue progressions for GDP, Development, Trade
- **Perceptually Uniform**: ColorBrewer-inspired palettes for accurate data perception

### Interactive Controls
- **Dual Metric Selection**: Independent control of size and color encoding
- **Preset Views**: Four recommended metric combinations
  - Economic Performance (Wealth vs Growth)
  - Trade & Development (Trade vs HDI)
  - Development Momentum (HDI vs Growth)
  - Growth Leaders (Growth vs GDP)
- **Detailed Popups**: All four metrics displayed on hover

### Professional Design
- Globe projection with atmospheric effects
- Continuous rotation for cinematic presentation
- Zoom-adaptive labels and stroke widths
- Dynamic legend generation based on active metrics

## Technical Implementation

### Expression Architecture
The visualization leverages three core Mapbox expression types:

1. **Data Property Access**: `['get', 'propertyName']`
2. **Linear Interpolation**: `['interpolate', ['linear'], input, ...stops]`
3. **Conditional Logic**: Implemented through stop arrays with threshold values

### Performance Optimizations
- Single GeoJSON source with all data
- Client-side expression evaluation
- Minimal layer count (2 layers: circles + labels)
- Efficient zoom-based rendering

### Code Organization
```
mapbox_globe_3/
├── index.html           # Main application shell
├── src/
│   ├── index.js         # Map initialization and expression logic
│   └── data/
│       └── economic-data.js   # 120-country GeoJSON dataset
├── README.md            # This file
└── CLAUDE.md           # Development documentation
```

## Improvement Over Previous Iterations

**Iteration 1 (Population Circles):**
- Single metric visualization
- Basic circle styling
- Static color scheme

**Iteration 2 (Temperature Heatmap):**
- Density visualization
- Heatmap layer type
- Single data dimension

**Iteration 3 (Economic Dashboard):**
- ✅ **Multi-dimensional encoding** (2 metrics simultaneously)
- ✅ **Advanced expressions** (interpolate with multiple stops)
- ✅ **Dynamic metric switching** (4x4 = 16 possible combinations)
- ✅ **Sophisticated color theory** (diverging + sequential schemes)
- ✅ **Professional UI/UX** (preset views, dynamic legends)
- ✅ **Complex real-world data** (4 properties × 120 countries)

## How Multi-Property Styling Reveals Insights

### Example Analysis: GDP vs Growth
When sizing by GDP and coloring by growth:
- **Large blue circles** = Wealthy, growing economies (Ireland, Poland)
- **Large red circles** = Wealthy, contracting economies (Venezuela, Lebanon)
- **Small blue circles** = Poor but fast-growing (Rwanda, Ethiopia)
- **Small red circles** = Poor and struggling (Afghanistan, Syria)

This single view reveals economic patterns impossible to see with single-metric visualizations.

### Example Analysis: Development vs Trade
When sizing by Development Index and coloring by Trade Volume:
- Countries with high development but low trade (Norway, Switzerland)
- Emerging trade hubs (Vietnam, Poland)
- Trade giants (China, Germany, USA)
- Development-trade imbalances

## Usage

1. **Install**: No build required—open `index.html` in a modern browser
2. **Configure**: Add your Mapbox access token to `src/index.js`:
   ```javascript
   mapboxgl.accessToken = 'YOUR_TOKEN_HERE';
   ```
3. **Explore**: Use dropdown menus to select different metric combinations
4. **Interact**: Hover over countries for detailed data, zoom to explore regions

## Learning Outcomes

### Mapbox Expression Mastery
- Understanding interpolate vs step vs match expressions
- Building complex data-driven styles
- Optimizing expression performance

### Data Visualization Principles
- Multi-dimensional encoding strategies
- Color theory for diverging/sequential data
- Interactive exploration design patterns

### Economic Data Insights
- Global wealth distribution patterns
- Growth vs development relationships
- Trade volume geographic clustering

## Future Enhancement Ideas

1. **Time Series**: Animate economic changes over years
2. **Filtering**: Add data range sliders for subset exploration
3. **Additional Metrics**: Employment, inflation, debt-to-GDP
4. **Comparison Mode**: Side-by-side globes with different metrics
5. **Case Expressions**: Add categorical classifications (developed/developing/frontier)
6. **Step Expressions**: Create discrete economic tiers
7. **Statistical Overlays**: Add mean/median lines to legends

## Resources

- [Mapbox Expressions Documentation](https://docs.mapbox.com/mapbox-gl-js/style-spec/expressions/)
- [Data-Driven Styling Examples](https://docs.mapbox.com/mapbox-gl-js/example/)
- [ColorBrewer Color Schemes](https://colorbrewer2.org/)
- [Human Development Index Data](https://hdr.undp.org/)

## License

Educational demonstration project. Economic data sourced from World Bank, IMF, and UN databases (representative values for demonstration purposes).
