Skip to content

Interactive Selection Examples

This document demonstrates the SelectionState and InteractionManager features from Phase 3.8, showing how to create interactive charts with click selection, hover highlighting, and brush selection.


Example 1: Click Selection with Scatter Plot

Click on data points to select them. Click again to deselect.

View Source
data:
  source: |
    product,sales,profit,region
    Widget A,12000,3200,North
    Widget B,18000,4500,South
    Widget C,9000,2100,East
    Widget D,15000,3800,West
    Widget E,21000,5200,North
    Widget F,11000,2800,South
    Widget G,16000,4100,East
    Widget H,13000,3400,West
    Widget I,19000,4800,North
    Widget J,14000,3600,South

engine: plot
type: scatter
x: sales
y: profit
color: region

title: Product Performance (Click to Select)
width: 700
height: 500

interactions:
  - type: click
    mode: multi-select
    highlightColor: "#ef4444"
    highlightOpacity: 1.0

scales:
  color:
    scheme: category10
    label: Region

Features Demonstrated:

  • Click to toggle selection
  • Multi-select mode (multiple items can be selected)
  • Custom highlight color and opacity
  • Selection state persists until clicked again

Example 2: Single Selection Mode

Only one item can be selected at a time. Clicking another item replaces the selection.

View Source
data:
  source: |
    category,revenue,quarter
    Product,45000,Q1
    Service,32000,Q1
    Support,18000,Q1
    Product,52000,Q2
    Service,38000,Q2
    Support,22000,Q2
    Product,48000,Q3
    Service,35000,Q3
    Support,20000,Q3
    Product,58000,Q4
    Service,41000,Q4
    Support,25000,Q4

engine: plot
type: bar
x: quarter
y: revenue
fill: category

title: Quarterly Revenue by Category (Single Selection)
width: 700
height: 500

interactions:
  - type: click
    mode: single-select
    highlightColor: "#10b981"

scales:
  fill:
    scheme: tableau10
    label: Category

Features Demonstrated:

  • Single-select mode (only one item at a time)
  • Selection automatically clears when clicking another item
  • Works with grouped bar charts

Example 3: Hover Highlighting

Hover over data points to highlight them temporarily.

View Source
data:
  source: |
    month,temperature,humidity,city
    Jan,5,65,Seattle
    Feb,7,68,Seattle
    Mar,10,62,Seattle
    Apr,13,58,Seattle
    May,17,55,Seattle
    Jun,20,52,Seattle
    Jan,15,45,Phoenix
    Feb,18,42,Phoenix
    Mar,22,38,Phoenix
    Apr,27,32,Phoenix
    May,32,28,Phoenix
    Jun,38,25,Phoenix

engine: plot

marks:
  - type: line
    configuration:
      x: month
      y: temperature
      stroke: city
      strokeWidth: 2
  - type: dot
    configuration:
      x: month
      y: temperature
      fill: city
      r: 5

title: Temperature Trends (Hover to Highlight)
width: 700
height: 500

interactions:
  - type: hover
    highlightColor: "#f59e0b"
    showTooltip: true
    hoverDebounce: 100

scales:
  stroke:
    scheme: paired
    label: City
  fill:
    scheme: paired

Features Demonstrated:

  • Hover highlighting with custom color
  • Debounced hover events (100ms delay)
  • Tooltip display on hover
  • Works with multi-mark charts (line + dot)

Example 4: Brush Selection

Click and drag to select multiple data points within a rectangular area.

View Source
data:
  source: |
    employee,experience,salary,department
    Alice,2,55000,Engineering
    Bob,5,75000,Engineering
    Carol,3,62000,Sales
    Dave,8,95000,Engineering
    Eve,4,68000,Sales
    Frank,6,82000,Marketing
    Grace,1,48000,Sales
    Henry,10,110000,Engineering
    Iris,7,88000,Marketing
    Jack,3,64000,Sales
    Karen,9,102000,Engineering
    Leo,4,70000,Marketing
    Mia,2,52000,Sales
    Nathan,6,80000,Engineering
    Olivia,5,73000,Marketing

engine: plot
type: scatter
x: experience
y: salary
color: department

title: Employee Salary vs Experience (Drag to Select)
width: 700
height: 500

interactions:
  - type: brush
    dimension: xy
    highlightColor: "#8b5cf6"
    highlightOpacity: 0.8

scales:
  color:
    scheme: category10
    label: Department

Features Demonstrated:

  • Brush selection with drag interaction
  • 2D selection (xy dimension)
  • Selected points highlighted with custom color
  • Selection clears when clicking outside brush area

Example 5: Combined Interactions

Use multiple interaction types together: hover, click, and tooltips.

View Source
data:
  source: |
    country,gdp_per_capita,life_expectancy,population
    USA,65000,78.5,330
    China,10500,76.9,1400
    India,2100,69.7,1380
    Germany,46000,81.0,83
    UK,42000,81.2,67
    France,40000,82.5,65
    Japan,40000,84.6,126
    Brazil,8900,75.9,212
    Russia,11300,72.6,144
    Mexico,9700,75.1,128

engine: plot
type: scatter
x: gdp_per_capita
y: life_expectancy

title: GDP vs Life Expectancy (Interactive)
width: 700
height: 500

marks:
  - type: dot
    configuration:
      x: gdp_per_capita
      y: life_expectancy
      r: population
      fill: "#3b82f6"
      fillOpacity: 0.6

interactions:
  - type: hover
    highlightColor: "#ef4444"
    showTooltip: true
  - type: click
    mode: multi-select
    highlightColor: "#10b981"

tooltip:
  template: "{country}: ${gdp_per_capita:,.0f} GDP, {life_expectancy} years"
  position: auto

scales:
  r:
    range: [50, 500]
    label: Population (millions)

Features Demonstrated:

  • Multiple interaction types on same chart
  • Hover highlighting (red)
  • Click selection (green)
  • Custom tooltip with formatted values
  • Bubble chart with size encoding

Example 6: Selection with Aggregated Data

Interactive selection works with aggregated and transformed data.

View Source
data:
  source: |
    date,sales,region
    2024-01,12000,North
    2024-01,15000,South
    2024-01,11000,East
    2024-02,13000,North
    2024-02,16000,South
    2024-02,12000,East
    2024-03,14000,North
    2024-03,17000,South
    2024-03,13000,East
    2024-04,15000,North
    2024-04,18000,South
    2024-04,14000,East

transformations:
  - type: aggregate
    configuration:
      groupBy: [region]
      sum: [sales]
      avg: [sales]

engine: plot
type: bar
x: region
y: sales_sum

title: Total Sales by Region (Click to Select)
width: 600
height: 450

interactions:
  - type: click
    mode: multi-select
    highlightColor: "#ec4899"

marks:
  - type: bar
    configuration:
      x: region
      y: sales_sum
      fill: region

scales:
  fill:
    scheme: accent

Features Demonstrated:

  • Selection on aggregated data
  • Works with data transformations
  • Custom highlight color (pink)
  • Bar chart with categorical data

Example 7: Brush Selection with 1D Constraint

Brush along only the X-axis to select data points.

View Source
data:
  source: |
    week,metric_a,metric_b
    1,120,85
    2,135,92
    3,128,88
    4,142,95
    5,155,98
    6,148,90
    7,162,102
    8,158,97
    9,171,105
    10,165,100
    11,178,108
    12,185,112

engine: plot

marks:
  - type: line
    configuration:
      x: week
      y: metric_a
      stroke: "#3b82f6"
      strokeWidth: 2
  - type: dot
    configuration:
      x: week
      y: metric_a
      fill: "#3b82f6"
      r: 5

title: Weekly Metrics (Brush Along X-Axis)
width: 700
height: 450

interactions:
  - type: brush
    dimension: x
    highlightColor: "#f59e0b"

Features Demonstrated:

  • 1D brush selection (x-dimension only)
  • Drag horizontally to select time range
  • Works with line charts
  • Orange highlight for selected region

Example 8: Interactive Selection State Events

Monitor selection changes with event handlers.

View Source
data:
  source: |
    project,budget,roi,status
    Alpha,50000,25,Active
    Beta,75000,32,Active
    Gamma,40000,18,Paused
    Delta,90000,38,Active
    Epsilon,55000,22,Active
    Zeta,65000,28,Paused
    Eta,80000,35,Active
    Theta,45000,20,Active

engine: plot
type: scatter
x: budget
y: roi
color: status

title: Project ROI Analysis (Selection Events)
width: 700
height: 500

interactions:
  - type: click
    mode: multi-select
    highlightColor: "#8b5cf6"
    onSelectionChange: |
      (selected) => {
        console.log(`${selected.length} projects selected`);
      }

scales:
  color:
    scheme: category10
    label: Status

Features Demonstrated:

  • Selection change event handlers
  • Log selection count to console
  • Purple highlight color
  • Multi-select mode with status encoding

API Reference

Interaction Types

Click Interaction

yaml
interactions:
  - type: click
    mode: single-select | multi-select  # Selection mode
    highlightColor: "#color"             # CSS color for selected items
    highlightOpacity: 0.8                # Opacity of highlight
    onSelectionChange: function          # Callback when selection changes

Hover Interaction

yaml
interactions:
  - type: hover
    highlightColor: "#color"             # CSS color for hover
    showTooltip: true                    # Show tooltip on hover
    hoverDebounce: 100                   # Debounce delay in ms

Brush Interaction

yaml
interactions:
  - type: brush
    dimension: x | y | xy                # Brush dimension
    highlightColor: "#color"             # Highlight color for selection
    highlightOpacity: 0.8                # Opacity of brush selection
    onBrush: function                    # Callback during brushing
    onBrushEnd: function                 # Callback when brush ends

Selection Modes

  • single-select: Only one item can be selected at a time
  • multi-select: Multiple items can be selected simultaneously

Event Handlers

All interaction types support event handlers:

yaml
interactions:
  - type: click
    onSelectionChange: |
      (selected) => {
        // Handle selection change
        console.log('Selected items:', selected);
      }

Best Practices

  1. Choose Appropriate Interaction Types:

    • Use click for deliberate selection
    • Use hover for quick exploration
    • Use brush for range selection
  2. Visual Feedback:

    • Use contrasting highlight colors
    • Adjust opacity for layered effects
    • Consider colorblind-friendly palettes
  3. Performance:

    • Use hoverDebounce to reduce event frequency
    • Limit interaction on very large datasets (>10k points)
    • Consider sampling for better performance
  4. User Experience:

    • Provide clear visual feedback for interactions
    • Use tooltips to show detailed information
    • Allow users to clear selections easily
  5. Accessibility:

    • Ensure sufficient color contrast
    • Provide keyboard alternatives where possible
    • Use semantic markup for screen readers


Examples created as part of Phase 3.8: Interactive Features

Released under the MIT License. Built by Boundary Lab.