Skip to content

Color Schemes

Color schemes control how colors are applied to map layers in Honeycomb Maps. You can choose between static colors (single fixed color) or dynamic color schemes that vary based on data values. Dynamic schemes work with both continuous metrics and categorical dimensions.

Static vs. Dynamic Colors

Static Colors

A static color scheme uses a single, fixed color for all features in a layer, regardless of any data values.

When to use:

  • Showing geographic coverage or presence without emphasizing value differences
  • Displaying areas of interest or service zones
  • Creating simple, uncluttered visualizations
  • Layering multiple data sources where one should have neutral coloring

Examples:

  • Coverage areas: Show all H3 cells where service is available in a single blue color
  • Territory boundaries: Display sales territories each in their own static color
  • Background layers: Use a subtle gray for context layers that shouldn't draw attention

Configuration:

  • Color: Select any color using the color picker
  • Opacity: Control transparency (0-100%)

Dynamic Colors

A dynamic color scheme assigns different colors to features based on their data values. Dynamic schemes come in two types, depending on whether you're coloring by continuous metrics or categorical dimensions.

Dynamic Color Schemes: Continuous

Continuous color schemes are used when coloring by numeric fields (metrics) like revenue, temperature, or population. Colors transition along a gradient from low to high values.

There are three interpolation methods available for continuous data:

Value Interpolation

Colors are assigned proportionally based on actual data values. The color scale spans from the minimum to maximum value in your dataset.

How it works:

  • The minimum value in your data gets the first color in the scheme
  • The maximum value gets the last color
  • Values in between are interpolated proportionally

When to use:

  • When you want colors to represent actual data magnitudes
  • For datasets where the range of values is meaningful
  • When comparing values across different time periods or filters

Examples:

  • Sales revenue: $0 (light) to $1M (dark) - higher revenue gets darker colors
  • Temperature: -10°C (blue) to 40°C (red) - temperature gradient
  • Population density: 0 (light yellow) to 10,000/km² (dark red)

Advantages:

  • Intuitive interpretation of color intensity
  • Consistent color-to-value mapping
  • Good for understanding data distribution

Limitations:

  • Outliers can compress the color range for most values
  • May not show differences well if data is clustered

Quantile Interpolation

Colors are assigned by dividing the data into equal-sized groups (quantiles). Each group gets one color, regardless of the actual value range within that group.

How it works:

  • Data is sorted from smallest to largest
  • Values are divided into equal groups (e.g., 5 quantiles = 20% of data in each)
  • Each quantile gets one color from the scheme

When to use:

  • When your data has outliers that would skew value-based coloring
  • To ensure all colors in the scheme are visible
  • When you want to emphasize relative ranking rather than absolute values
  • For datasets with uneven distributions

Examples:

  • Income distribution: Ensure rich and poor areas are both visible despite extreme differences
  • Website traffic: Show relative popularity when some sites have 100× more traffic than others
  • Test scores: Emphasize rankings when the score range is narrow

Advantages:

  • Robust against outliers
  • All colors in the scheme are used
  • Shows relative position in the dataset

Limitations:

  • Different value ranges can have the same color
  • Less intuitive for users expecting color to represent absolute values

Custom Discrete

Define custom value ranges and assign specific colors to each range. This gives you complete control over the color-to-value mapping.

How it works:

  • You define ranges with start values, end values, and colors
  • Each range is inclusive of the start value, exclusive of the end value: [start, end)
  • Values outside all defined ranges receive a default color
  • Ranges can be any size and don't need to be evenly spaced

When to use:

  • Maintaining consistent colors when data changes (e.g., with time slider filters)
  • Highlighting specific value thresholds or breakpoints
  • Showing positive vs. negative values (e.g., profit/loss)
  • Creating categorical visualizations from continuous data
  • Meeting specific color requirements (e.g., regulatory standards)

Examples:

  • Profitability:

    • Loss (< $0): Red
    • Break-even ($0 - $10K): Yellow
    • Profit ($10K+): Green
  • Risk levels:

    • Low (0-30): Green
    • Medium (30-70): Yellow
    • High (70-100): Red
  • Temperature comfort:

    • Too cold (< 60°F): Blue
    • Comfortable (60-75°F): Green
    • Too hot (> 75°F): Orange

Configuration:

  • Ranges: Define one or more ranges with:
    • Start value (inclusive)
    • End value (exclusive)
    • Color for that range
  • Default Color: Color for values outside all defined ranges
  • Ranges are displayed in order and can be added, removed, or reordered

Advantages:

  • Complete control over color mapping
  • Colors remain stable as filters change
  • Perfect for emphasizing specific thresholds
  • Can create diverging schemes around a central value (e.g., 0)

Limitations:

  • Requires manual configuration
  • You must anticipate the data range
  • More setup time compared to automatic interpolation

Dynamic Color Schemes: Categorical

Categorical color schemes are used when coloring by categorical fields (dimensions) like store type, region, or product category. Each unique category gets its own distinct color from a categorical palette.

Applicable field types: Text/string fields, boolean fields

How Categorical Coloring Works

  1. Automatic Assignment: Each unique value in the selected dimension receives a distinct color
  2. Consistent Mapping: The same category always gets the same color across the entire layer
  3. Legend Display: All categories are shown in the legend with their assigned colors
  4. Palette Selection: Choose from multiple categorical palettes optimized for different numbers of categories

Examples:

  • Store types: "Restaurant" (red), "Retail" (blue), "Service" (green)
  • Order status: "Pending" (yellow), "Shipped" (orange), "Delivered" (green)
  • Regions: "North" (purple), "South" (teal), "East" (orange), "West" (pink)

When to Use Categorical Color Schemes

Ideal use cases:

  • Store or location types: Restaurants, retail stores, service centers each get distinct colors
  • Product categories: Different product lines or categories in sales data
  • Geographic regions: States, countries, or sales territories
  • Order status: Pending, processing, shipped, delivered
  • Customer segments: New, returning, VIP, churned customers
  • Vehicle types: Cars, trucks, buses, motorcycles

Best practices:

  • Limit categories: While palettes support many categories, 5-10 is ideal for user comprehension
  • High contrast needed: Use categorical palettes (not sequential) so categories are visually distinct
  • No implied order: Categories should be nominal (no natural order), not ordinal
  • Legend essential: Always show the legend so users know which color represents which category

Configuration Options for Categorical Schemes

  • Categorical Palette: Select from available categorical color palettes
  • Number of categories: Automatically determined by unique values in your dimension
  • Opacity: Control transparency (applies to all categories)

Color Palette Options

Honeycomb provides a variety of color palettes optimized for different data types and use cases. Many palettes are from the ColorBrewer Project, available under the Apache 2.0 license.

Sequential Palettes (Continuous Data)

Use for data that goes from low to high values (e.g., population density, revenue, temperature).

Characteristics:

  • Single hue that increases in intensity
  • Light colors represent low values, dark colors represent high values
  • Multiple options: Blues, Greens, Oranges, Reds, Purples, Grays

Examples:

  • Population: Light yellow → Dark red
  • Revenue: Light green → Dark green
  • Depth: Light blue → Dark blue

Available Sequential Palettes:

YlGn (Yellow-Green)
YlGnBu (Yellow-Green-Blue)
GnBu (Green-Blue)
BuGn (Blue-Green)
PuBuGn (Purple-Blue-Green)
PuBu (Purple-Blue)
BuPu (Blue-Purple)
RdPu (Red-Purple)
PuRd (Purple-Red)
OrRd (Orange-Red)
YlOrRd (Yellow-Orange-Red)
YlOrBr (Yellow-Orange-Brown)
Purples
Blues
Greens
Oranges
Reds
Greys

Diverging Palettes (Continuous Data)

Use for data with a meaningful middle point where values diverge in two directions (e.g., profit/loss, temperature anomaly, change from baseline). You can use a Custom Discrete color scheme to set the middle point.

Characteristics:

  • Two hues that diverge from a neutral middle color
  • One hue for values below the midpoint, another for values above
  • Options include: Red-Blue, Orange-Purple, Brown-Teal

Examples:

  • Profit/Loss: Red (loss) ← White → Green (profit)
  • Temperature Change: Blue (cooler) ← White → Red (warmer)
  • Political lean: Red (conservative) ← Purple → Blue (liberal)

Available Diverging Palettes:

PuOr (Purple-Orange)
BrBG (Brown-Blue-Green)
PRGn (Purple-Green)
PiYG (Pink-Yellow-Green)
RdBu (Red-Blue)
RdGy (Red-Grey)
RdYlBu (Red-Yellow-Blue)
Spectral
RdYlGn (Red-Yellow-Green)

Categorical Palettes (Dimensions)

Use for discrete categories where colors should be easily distinguishable (e.g., store types, product categories, regions).

Standard Categorical Palettes:

  • Set1, Set2, Set3, Paired, Pastel1, Pastel2, Dark2, Accent
  • From the ColorBrewer Project
  • Good for up to 8-12 categories
  • Balanced color distribution
  • Use for general-purpose categorical visualization

Available Categorical Palettes:

Set1
Set2
Set3
Paired
Pastel1
Pastel2
Dark2
Accent

High-Cardinality Palettes:

For datasets with many categories (10+), Honeycomb offers three research-backed palettes designed for maximum color distinction:

Glasbey

31 colors optimized for human color perception. Excellent for 10-30 categories. Based on research by Glasbey et al. (2007).

Kelly

22 highly distinguishable colors from Kenneth Kelly's "Universal Color Language" (1965).

GreenArmytage

26 optimized colors from Paul Green-Armytage's research (2010) on "A Colour Alphabet and the Limits of Colour Coding".

References:

  • Glasbey Palette: Glasbey, C., van der Heijden, G., Toh, V.F.K. and Gray, A. (2007), Colour displays for categorical images. Color Res. Appl., 32: 304-309.
  • Kelly Palette: Kelly, Kenneth L. "A Universal Color Language." Color Engineering, vol. III, no. 2, March-April 1965, pp. CE/3-CE/7.
  • Green-Armytage Palette: Green‐Armytage, Paul. (2010). A Colour Alphabet and the Limits of Colour Coding. Color: Design & Creativity. 5. 1-23.

Additional Configuration Options

Color Steps (Continuous Schemes Only)

Control how many distinct colors are used in the scheme (3-9 steps). More steps provide finer gradation, fewer steps create clearer categories.

When to use different step counts:

  • 3-4 steps: Simple, clear categories (low/medium/high)
  • 5-7 steps: Balance between detail and clarity (most common)
  • 8-9 steps: Maximum detail for subtle variations

Note: Not applicable to categorical schemes, where the number of colors matches the number of unique categories in your data.

Reversed (Continuous Schemes Only)

Flip the order of colors in the scheme. Useful for inverting the meaning (e.g., making high values light instead of dark).

When to use:

  • Change color intensity direction
  • Match conventional color meanings in your field
  • Improve visibility against your basemap

Use Cases and Best Practices

Time Series Visualizations with Fixed Colors

When using the time slider to animate data over time, use Custom Discrete color schemes to keep color meanings consistent:

Problem: With Value or Quantile interpolation, the same color can represent different values at different time periods as the data range changes.

Solution: Define fixed color ranges that remain constant across all time periods:

Sales:
  $0 - $10K: Light green
  $10K - $50K: Medium green
  $50K - $100K: Dark green
  $100K+: Darkest green
Sales:
  $0 - $10K: Light green
  $10K - $50K: Medium green
  $50K - $100K: Dark green
  $100K+: Darkest green

This ensures users can compare across time periods without color meanings shifting.

Highlighting Positive vs. Negative Values

Use Custom Discrete with a diverging color approach for continuous data:

Example - Business Performance:

Negative profit: Red
Break-even ($-1K to $1K): Gray
Positive profit: Green
Negative profit: Red
Break-even ($-1K to $1K): Gray
Positive profit: Green

This immediately shows which areas are profitable (green) vs. unprofitable (red).

Large Categorical Datasets

For categorical data with many categories (> 10):

  • Use Glasbey, Kelly, or Green-Armytage categorical palettes
  • These are specifically designed for maximum color distinction
  • Consider whether all categories need to be shown, or if filtering would help
  • Use filters to focus on the most important categories
  • Be aware that more than 10-12 categories can be difficult for users to distinguish

Dealing with Outliers in Continuous Data

If a few extreme values compress your color scale:

  • Option 1: Use Quantile interpolation to distribute colors evenly
  • Option 2: Use Custom Discrete to define sensible ranges and group outliers
  • Option 3: Filter out outliers if they're not relevant to your analysis

Accessibility Considerations

  • Colorblind-friendly: Use colorblind-safe palettes when possible (many ColorBrewer palettes are designed for this)
  • Contrast: Ensure colors have sufficient contrast with your basemap
  • Legends: Always include a legend so color meaning is clear
  • Multiple indicators: Don't rely on color alone - consider size, pattern, or labels
  • Categorical limits: More than 10-12 categories becomes difficult for users to distinguish

Technical Notes

  • Color schemes are saved with your map configuration
  • Changing filters or data doesn't change Custom Discrete ranges (unlike Value/Quantile)
  • Opacity can be adjusted independently of the color scheme
  • Legend updates automatically based on the current color scheme and data