Skip to content

Complete Mark Showcase - All Supported Visualizations ​

This comprehensive guide showcases all supported Observable Plot mark types in the DataGlass plugin. Each example uses exactly 50 data points with embedded JSON and demonstrates both single-mark and multi-mark compositions.


Table of Contents ​

  1. Point and Dot Marks
  2. Line Marks
  3. Area Marks
  4. Bar Marks
  5. Rectangle Marks
  6. Text and Label Marks
  7. Rule Marks
  8. Tick Marks
  9. Link Marks
  10. Vector Marks
  11. Cell Marks (Heatmaps)
  12. Statistical Marks
  13. Multi-Mark Compositions

Point and Dot Marks ​

Basic Scatter Plot with Dots ​

Simple scatter plot showing relationship between two variables.

View Source
data:
  source: [
    {"x": 1, "y": 23}, {"x": 2, "y": 27}, {"x": 3, "y": 25}, {"x": 4, "y": 31}, {"x": 5, "y": 35},
    {"x": 6, "y": 33}, {"x": 7, "y": 38}, {"x": 8, "y": 42}, {"x": 9, "y": 40}, {"x": 10, "y": 45},
    {"x": 11, "y": 48}, {"x": 12, "y": 46}, {"x": 13, "y": 52}, {"x": 14, "y": 55}, {"x": 15, "y": 53},
    {"x": 16, "y": 58}, {"x": 17, "y": 62}, {"x": 18, "y": 60}, {"x": 19, "y": 65}, {"x": 20, "y": 68},
    {"x": 21, "y": 66}, {"x": 22, "y": 72}, {"x": 23, "y": 75}, {"x": 24, "y": 73}, {"x": 25, "y": 78},
    {"x": 26, "y": 82}, {"x": 27, "y": 80}, {"x": 28, "y": 85}, {"x": 29, "y": 88}, {"x": 30, "y": 86},
    {"x": 31, "y": 92}, {"x": 32, "y": 95}, {"x": 33, "y": 93}, {"x": 34, "y": 98}, {"x": 35, "y": 102},
    {"x": 36, "y": 100}, {"x": 37, "y": 105}, {"x": 38, "y": 108}, {"x": 39, "y": 106}, {"x": 40, "y": 112},
    {"x": 41, "y": 115}, {"x": 42, "y": 113}, {"x": 43, "y": 118}, {"x": 44, "y": 122}, {"x": 45, "y": 120},
    {"x": 46, "y": 125}, {"x": 47, "y": 128}, {"x": 48, "y": 126}, {"x": 49, "y": 132}, {"x": 50, "y": 135}
  ]
type: scatter
engine: plot
title: Basic Dot Mark Scatter Plot
width: 600
height: 400
marks:
  - type: dot
    configuration:
      x: x
      y: y
      fill: "#3498db"
      r: 5
      tip: true
x:
  label: X Values
y:
  label: Y Values
grid: true

Colored Dots by Category ​

Scatter plot with color encoding for categorical data.

View Source
data:
  source: [
    {"x": 12, "y": 45, "category": "A"}, {"x": 18, "y": 52, "category": "A"}, {"x": 22, "y": 48, "category": "A"},
    {"x": 28, "y": 55, "category": "A"}, {"x": 32, "y": 51, "category": "A"}, {"x": 38, "y": 58, "category": "A"},
    {"x": 42, "y": 54, "category": "A"}, {"x": 48, "y": 61, "category": "A"}, {"x": 52, "y": 57, "category": "A"},
    {"x": 58, "y": 64, "category": "A"}, {"x": 62, "y": 60, "category": "A"}, {"x": 68, "y": 67, "category": "A"},
    {"x": 72, "y": 63, "category": "A"},
    {"x": 15, "y": 65, "category": "B"}, {"x": 20, "y": 72, "category": "B"}, {"x": 25, "y": 68, "category": "B"},
    {"x": 30, "y": 75, "category": "B"}, {"x": 35, "y": 71, "category": "B"}, {"x": 40, "y": 78, "category": "B"},
    {"x": 45, "y": 74, "category": "B"}, {"x": 50, "y": 81, "category": "B"}, {"x": 55, "y": 77, "category": "B"},
    {"x": 60, "y": 84, "category": "B"}, {"x": 65, "y": 80, "category": "B"}, {"x": 70, "y": 87, "category": "B"},
    {"x": 75, "y": 83, "category": "B"},
    {"x": 10, "y": 35, "category": "C"}, {"x": 16, "y": 42, "category": "C"}, {"x": 24, "y": 38, "category": "C"},
    {"x": 31, "y": 45, "category": "C"}, {"x": 36, "y": 41, "category": "C"}, {"x": 44, "y": 48, "category": "C"},
    {"x": 50, "y": 44, "category": "C"}, {"x": 56, "y": 51, "category": "C"}, {"x": 63, "y": 47, "category": "C"},
    {"x": 69, "y": 54, "category": "C"}, {"x": 74, "y": 50, "category": "C"}, {"x": 80, "y": 57, "category": "C"},
    {"x": 85, "y": 53, "category": "C"},
    {"x": 8, "y": 28, "category": "D"}, {"x": 14, "y": 35, "category": "D"}, {"x": 21, "y": 31, "category": "D"},
    {"x": 27, "y": 38, "category": "D"}, {"x": 33, "y": 34, "category": "D"}, {"x": 39, "y": 41, "category": "D"},
    {"x": 46, "y": 37, "category": "D"}, {"x": 53, "y": 44, "category": "D"}, {"x": 59, "y": 40, "category": "D"},
    {"x": 66, "y": 47, "category": "D"}, {"x": 71, "y": 43, "category": "D"}, {"x": 78, "y": 50, "category": "D"}
  ]
type: scatter
engine: plot
title: Categorical Scatter Plot
width: 600
height: 400
marks:
  - type: dot
    configuration:
      x: x
      y: y
      fill: category
      r: 6
      tip: true
x:
  label: X Position
y:
  label: Y Position
color:
  legend: true
grid: true

Line Marks ​

Simple Line Chart ​

Basic line chart connecting sequential data points.

View Source
data:
  source: [
    {"time": 0, "value": 20}, {"time": 1, "value": 22}, {"time": 2, "value": 21}, {"time": 3, "value": 25},
    {"time": 4, "value": 27}, {"time": 5, "value": 26}, {"time": 6, "value": 30}, {"time": 7, "value": 32},
    {"time": 8, "value": 31}, {"time": 9, "value": 35}, {"time": 10, "value": 37}, {"time": 11, "value": 36},
    {"time": 12, "value": 40}, {"time": 13, "value": 42}, {"time": 14, "value": 41}, {"time": 15, "value": 45},
    {"time": 16, "value": 47}, {"time": 17, "value": 46}, {"time": 18, "value": 50}, {"time": 19, "value": 52},
    {"time": 20, "value": 51}, {"time": 21, "value": 55}, {"time": 22, "value": 57}, {"time": 23, "value": 56},
    {"time": 24, "value": 60}, {"time": 25, "value": 62}, {"time": 26, "value": 61}, {"time": 27, "value": 65},
    {"time": 28, "value": 67}, {"time": 29, "value": 66}, {"time": 30, "value": 70}, {"time": 31, "value": 72},
    {"time": 32, "value": 71}, {"time": 33, "value": 75}, {"time": 34, "value": 77}, {"time": 35, "value": 76},
    {"time": 36, "value": 80}, {"time": 37, "value": 82}, {"time": 38, "value": 81}, {"time": 39, "value": 85},
    {"time": 40, "value": 87}, {"time": 41, "value": 86}, {"time": 42, "value": 90}, {"time": 43, "value": 92},
    {"time": 44, "value": 91}, {"time": 45, "value": 95}, {"time": 46, "value": 97}, {"time": 47, "value": 96},
    {"time": 48, "value": 100}, {"time": 49, "value": 102}
  ]
type: line
engine: plot
title: Simple Line Chart
width: 600
height: 400
marks:
  - type: line
    configuration:
      x: time
      y: value
      stroke: "#2ecc71"
      strokeWidth: 2.5
      tip: true
x:
  label: Time
y:
  label: Value
grid: true

Multi-Line Chart ​

Multiple line series on the same chart. The plugin automatically infers the z channel for grouping when stroke references a categorical field with multiple values.

View Source
data:
  source: [
    {"month": 1, "series": "Product A", "sales": 45}, {"month": 2, "series": "Product A", "sales": 52},
    {"month": 3, "series": "Product A", "sales": 48}, {"month": 4, "series": "Product A", "sales": 55},
    {"month": 5, "series": "Product A", "sales": 62}, {"month": 6, "series": "Product A", "sales": 58},
    {"month": 7, "series": "Product A", "sales": 65}, {"month": 8, "series": "Product A", "sales": 72},
    {"month": 9, "series": "Product A", "sales": 68}, {"month": 10, "series": "Product A", "sales": 75},
    {"month": 11, "series": "Product A", "sales": 82}, {"month": 12, "series": "Product A", "sales": 78},
    {"month": 1, "series": "Product B", "sales": 38}, {"month": 2, "series": "Product B", "sales": 42},
    {"month": 3, "series": "Product B", "sales": 46}, {"month": 4, "series": "Product B", "sales": 43},
    {"month": 5, "series": "Product B", "sales": 50}, {"month": 6, "series": "Product B", "sales": 54},
    {"month": 7, "series": "Product B", "sales": 51}, {"month": 8, "series": "Product B", "sales": 58},
    {"month": 9, "series": "Product B", "sales": 62}, {"month": 10, "series": "Product B", "sales": 59},
    {"month": 11, "series": "Product B", "sales": 66}, {"month": 12, "series": "Product B", "sales": 70},
    {"month": 1, "series": "Product C", "sales": 52}, {"month": 2, "series": "Product C", "sales": 55},
    {"month": 3, "series": "Product C", "sales": 59}, {"month": 4, "series": "Product C", "sales": 62},
    {"month": 5, "series": "Product C", "sales": 58}, {"month": 6, "series": "Product C", "sales": 65},
    {"month": 7, "series": "Product C", "sales": 69}, {"month": 8, "series": "Product C", "sales": 66},
    {"month": 9, "series": "Product C", "sales": 73}, {"month": 10, "series": "Product C", "sales": 77},
    {"month": 11, "series": "Product C", "sales": 74}, {"month": 12, "series": "Product C", "sales": 81},
    {"month": 1, "series": "Product D", "sales": 30}, {"month": 2, "series": "Product D", "sales": 34},
    {"month": 3, "series": "Product D", "sales": 31}, {"month": 4, "series": "Product D", "sales": 38},
    {"month": 5, "series": "Product D", "sales": 42}, {"month": 6, "series": "Product D", "sales": 39},
    {"month": 7, "series": "Product D", "sales": 46}, {"month": 8, "series": "Product D", "sales": 50},
    {"month": 9, "series": "Product D", "sales": 47}, {"month": 10, "series": "Product D", "sales": 54},
    {"month": 11, "series": "Product D", "sales": 58}, {"month": 12, "series": "Product D", "sales": 55}
  ]
type: line
engine: plot
title: Multi-Series Line Chart
width: 600
height: 400
marks:
  - type: line
    configuration:
      x: month
      y: sales
      stroke: series
      strokeWidth: 2
      tip: true
x:
  label: Month
y:
  label: Sales
color:
  legend: true
grid: true

Area Marks ​

Filled Area Chart ​

Area chart showing cumulative or continuous data.

View Source
data:
  source: [
    {"x": 0, "y": 10}, {"x": 1, "y": 15}, {"x": 2, "y": 12}, {"x": 3, "y": 18}, {"x": 4, "y": 22},
    {"x": 5, "y": 20}, {"x": 6, "y": 25}, {"x": 7, "y": 28}, {"x": 8, "y": 26}, {"x": 9, "y": 32},
    {"x": 10, "y": 35}, {"x": 11, "y": 33}, {"x": 12, "y": 38}, {"x": 13, "y": 42}, {"x": 14, "y": 40},
    {"x": 15, "y": 45}, {"x": 16, "y": 48}, {"x": 17, "y": 46}, {"x": 18, "y": 52}, {"x": 19, "y": 55},
    {"x": 20, "y": 53}, {"x": 21, "y": 58}, {"x": 22, "y": 62}, {"x": 23, "y": 60}, {"x": 24, "y": 65},
    {"x": 25, "y": 68}, {"x": 26, "y": 66}, {"x": 27, "y": 72}, {"x": 28, "y": 75}, {"x": 29, "y": 73},
    {"x": 30, "y": 78}, {"x": 31, "y": 82}, {"x": 32, "y": 80}, {"x": 33, "y": 85}, {"x": 34, "y": 88},
    {"x": 35, "y": 86}, {"x": 36, "y": 92}, {"x": 37, "y": 95}, {"x": 38, "y": 93}, {"x": 39, "y": 98},
    {"x": 40, "y": 102}, {"x": 41, "y": 100}, {"x": 42, "y": 105}, {"x": 43, "y": 108}, {"x": 44, "y": 106},
    {"x": 45, "y": 112}, {"x": 46, "y": 115}, {"x": 47, "y": 113}, {"x": 48, "y": 118}, {"x": 49, "y": 122}
  ]
type: area
engine: plot
title: Area Chart
width: 600
height: 400
marks:
  - type: areaY
    configuration:
      x: x
      y: y
      fill: "#9b59b6"
      fillOpacity: 0.6
      tip: true
  - type: line
    configuration:
      x: x
      y: y
      stroke: "#8e44ad"
      strokeWidth: 2
x:
  label: X Position
y:
  label: Y Value
grid: true

Stacked Area Chart ​

Multiple stacked area series.

View Source
data:
  source: [
    {"x": 0, "category": "A", "value": 20}, {"x": 1, "category": "A", "value": 22}, {"x": 2, "category": "A", "value": 21},
    {"x": 3, "category": "A", "value": 25}, {"x": 4, "category": "A", "value": 27}, {"x": 5, "category": "A", "value": 26},
    {"x": 6, "category": "A", "value": 30}, {"x": 7, "category": "A", "value": 32}, {"x": 8, "category": "A", "value": 31},
    {"x": 9, "category": "A", "value": 35}, {"x": 10, "category": "A", "value": 37}, {"x": 11, "category": "A", "value": 36},
    {"x": 12, "category": "A", "value": 40},
    {"x": 0, "category": "B", "value": 15}, {"x": 1, "category": "B", "value": 18}, {"x": 2, "category": "B", "value": 16},
    {"x": 3, "category": "B", "value": 20}, {"x": 4, "category": "B", "value": 22}, {"x": 5, "category": "B", "value": 21},
    {"x": 6, "category": "B", "value": 25}, {"x": 7, "category": "B", "value": 27}, {"x": 8, "category": "B", "value": 26},
    {"x": 9, "category": "B", "value": 30}, {"x": 10, "category": "B", "value": 32}, {"x": 11, "category": "B", "value": 31},
    {"x": 12, "category": "B", "value": 35},
    {"x": 0, "category": "C", "value": 10}, {"x": 1, "category": "C", "value": 12}, {"x": 2, "category": "C", "value": 11},
    {"x": 3, "category": "C", "value": 15}, {"x": 4, "category": "C", "value": 17}, {"x": 5, "category": "C", "value": 16},
    {"x": 6, "category": "C", "value": 20}, {"x": 7, "category": "C", "value": 22}, {"x": 8, "category": "C", "value": 21},
    {"x": 9, "category": "C", "value": 25}, {"x": 10, "category": "C", "value": 27}, {"x": 11, "category": "C", "value": 26},
    {"x": 12, "category": "C", "value": 30},
    {"x": 0, "category": "D", "value": 8}, {"x": 1, "category": "D", "value": 10}, {"x": 2, "category": "D", "value": 9},
    {"x": 3, "category": "D", "value": 12}, {"x": 4, "category": "D", "value": 14}, {"x": 5, "category": "D", "value": 13},
    {"x": 6, "category": "D", "value": 16}, {"x": 7, "category": "D", "value": 18}, {"x": 8, "category": "D", "value": 17},
    {"x": 9, "category": "D", "value": 20}, {"x": 10, "category": "D", "value": 22}, {"x": 11, "category": "D", "value": 21},
    {"x": 12, "category": "D", "value": 24}
  ]
engine: plot
title: Stacked Area Chart
width: 600
height: 400
marks:
  - type: areaY
    configuration:
      x: x
      y: value
      fill: category
      tip: true
      stack: y
x:
  label: Time Period
y:
  label: Value
color:
  legend: true
scales:
  color:
    type: ordinal
grid: true

Bar Marks ​

Vertical Bar Chart ​

Standard vertical bars for categorical comparison.

View Source
data:
  source: [
    {"category": "Jan", "value": 45}, {"category": "Feb", "value": 52}, {"category": "Mar", "value": 48},
    {"category": "Apr", "value": 55}, {"category": "May", "value": 62}, {"category": "Jun", "value": 58},
    {"category": "Jul", "value": 65}, {"category": "Aug", "value": 72}, {"category": "Sep", "value": 68},
    {"category": "Oct", "value": 75}, {"category": "Nov", "value": 82}, {"category": "Dec", "value": 78},
    {"category": "Q1-Y2", "value": 85}, {"category": "Q2-Y2", "value": 92}, {"category": "Q3-Y2", "value": 88},
    {"category": "Q4-Y2", "value": 95}, {"category": "Week1", "value": 38}, {"category": "Week2", "value": 42},
    {"category": "Week3", "value": 46}, {"category": "Week4", "value": 43}, {"category": "Mon", "value": 35},
    {"category": "Tue", "value": 40}, {"category": "Wed", "value": 38}, {"category": "Thu", "value": 45},
    {"category": "Fri", "value": 50}, {"category": "A1", "value": 32}, {"category": "A2", "value": 36},
    {"category": "A3", "value": 40}, {"category": "A4", "value": 37}, {"category": "A5", "value": 42},
    {"category": "B1", "value": 48}, {"category": "B2", "value": 45}, {"category": "B3", "value": 52},
    {"category": "B4", "value": 49}, {"category": "B5", "value": 55}, {"category": "C1", "value": 60},
    {"category": "C2", "value": 57}, {"category": "C3", "value": 63}, {"category": "C4", "value": 59},
    {"category": "C5", "value": 66}, {"category": "D1", "value": 70}, {"category": "D2", "value": 67},
    {"category": "D3", "value": 72}, {"category": "D4", "value": 69}, {"category": "D5", "value": 75},
    {"category": "E1", "value": 80}, {"category": "E2", "value": 77}, {"category": "E3", "value": 82},
    {"category": "E4", "value": 79}, {"category": "E5", "value": 85}
  ]
type: bar
engine: plot
title: Vertical Bar Chart
width: 600
height: 400
marks:
  - type: barY
    configuration:
      x: category
      y: value
      fill: "#e74c3c"
      tip: true
x:
  label: Category
y:
  label: Value
grid: true
marginBottom: 80

Grouped Bar Chart ​

Multiple bar series grouped by category.

View Source
data:
  source: [
    {"group": "Q1", "series": "2022", "value": 45}, {"group": "Q1", "series": "2023", "value": 52},
    {"group": "Q1", "series": "2024", "value": 58}, {"group": "Q2", "series": "2022", "value": 50},
    {"group": "Q2", "series": "2023", "value": 57}, {"group": "Q2", "series": "2024", "value": 63},
    {"group": "Q3", "series": "2022", "value": 55}, {"group": "Q3", "series": "2023", "value": 62},
    {"group": "Q3", "series": "2024", "value": 68}, {"group": "Q4", "series": "2022", "value": 60},
    {"group": "Q4", "series": "2023", "value": 67}, {"group": "Q4", "series": "2024", "value": 73},
    {"group": "Jan", "series": "Sales", "value": 42}, {"group": "Jan", "series": "Profit", "value": 18},
    {"group": "Feb", "series": "Sales", "value": 48}, {"group": "Feb", "series": "Profit", "value": 22},
    {"group": "Mar", "series": "Sales", "value": 45}, {"group": "Mar", "series": "Profit", "value": 20},
    {"group": "Apr", "series": "Sales", "value": 52}, {"group": "Apr", "series": "Profit", "value": 25},
    {"group": "May", "series": "Sales", "value": 58}, {"group": "May", "series": "Profit", "value": 28},
    {"group": "Jun", "series": "Sales", "value": 55}, {"group": "Jun", "series": "Profit", "value": 27},
    {"group": "Region A", "series": "Product X", "value": 65}, {"group": "Region A", "series": "Product Y", "value": 55},
    {"group": "Region A", "series": "Product Z", "value": 70}, {"group": "Region B", "series": "Product X", "value": 72},
    {"group": "Region B", "series": "Product Y", "value": 62}, {"group": "Region B", "series": "Product Z", "value": 75},
    {"group": "Region C", "series": "Product X", "value": 58}, {"group": "Region C", "series": "Product Y", "value": 48},
    {"group": "Region C", "series": "Product Z", "value": 62}, {"group": "North", "series": "Type A", "value": 38},
    {"group": "North", "series": "Type B", "value": 45}, {"group": "South", "series": "Type A", "value": 42},
    {"group": "South", "series": "Type B", "value": 50}, {"group": "East", "series": "Type A", "value": 48},
    {"group": "East", "series": "Type B", "value": 55}, {"group": "West", "series": "Type A", "value": 52},
    {"group": "West", "series": "Type B", "value": 60}, {"group": "Cat1", "series": "Var1", "value": 35},
    {"group": "Cat1", "series": "Var2", "value": 40}, {"group": "Cat2", "series": "Var1", "value": 38},
    {"group": "Cat2", "series": "Var2", "value": 43}, {"group": "Cat3", "series": "Var1", "value": 42},
    {"group": "Cat3", "series": "Var2", "value": 47}
  ]
type: bar
engine: plot
title: Grouped Bar Chart
width: 1000
height: 400
marks:
  - type: barY
    configuration:
      x: group
      y: value
      fill: series
      tip: true
x:
  label: Group
y:
  label: Value
color:
  legend: true
grid: true

Rectangle Marks ​

Histogram with Rect ​

Distribution analysis using binned rectangles. This example uses the auto mark type which automatically selects the appropriate visualization (histogram) for a single quantitative dimension.

View Source
data:
  source: [
    {"value": 12.5}, {"value": 15.3}, {"value": 18.7}, {"value": 14.2}, {"value": 16.8},
    {"value": 13.9}, {"value": 17.4}, {"value": 19.2}, {"value": 15.6}, {"value": 14.1},
    {"value": 16.3}, {"value": 18.9}, {"value": 13.2}, {"value": 17.8}, {"value": 15.4},
    {"value": 19.6}, {"value": 14.7}, {"value": 16.1}, {"value": 18.3}, {"value": 13.8},
    {"value": 15.9}, {"value": 17.2}, {"value": 19.8}, {"value": 14.5}, {"value": 16.7},
    {"value": 18.1}, {"value": 13.4}, {"value": 15.8}, {"value": 17.6}, {"value": 19.4},
    {"value": 14.3}, {"value": 16.5}, {"value": 18.5}, {"value": 13.6}, {"value": 15.2},
    {"value": 17.9}, {"value": 19.1}, {"value": 14.8}, {"value": 16.4}, {"value": 18.2},
    {"value": 13.7}, {"value": 15.5}, {"value": 17.3}, {"value": 19.5}, {"value": 14.9},
    {"value": 16.2}, {"value": 18.6}, {"value": 13.5}, {"value": 15.7}, {"value": 17.1}
  ]

engine: plot
title: Histogram Distribution
width: 600
height: 400
marks:
  - type: auto
    configuration:
      x: value
      fill: "#f39c12"
      fillOpacity: 0.7
      tip: true
x:
  label: Value
y:
  label: Frequency
grid: true

Text and Label Marks ​

Scatter Plot with Text Labels ​

Points labeled with text annotations.

View Source
data:
  source: [
    {"x": 10, "y": 45, "label": "A1"}, {"x": 20, "y": 52, "label": "A2"}, {"x": 30, "y": 48, "label": "A3"},
    {"x": 40, "y": 55, "label": "A4"}, {"x": 50, "y": 62, "label": "A5"}, {"x": 15, "y": 38, "label": "B1"},
    {"x": 25, "y": 42, "label": "B2"}, {"x": 35, "y": 46, "label": "B3"}, {"x": 45, "y": 50, "label": "B4"},
    {"x": 55, "y": 54, "label": "B5"}, {"x": 12, "y": 60, "label": "C1"}, {"x": 22, "y": 65, "label": "C2"},
    {"x": 32, "y": 58, "label": "C3"}, {"x": 42, "y": 70, "label": "C4"}, {"x": 52, "y": 75, "label": "C5"},
    {"x": 18, "y": 35, "label": "D1"}, {"x": 28, "y": 40, "label": "D2"}, {"x": 38, "y": 44, "label": "D3"},
    {"x": 48, "y": 48, "label": "D4"}, {"x": 58, "y": 52, "label": "D5"}, {"x": 14, "y": 68, "label": "E1"},
    {"x": 24, "y": 72, "label": "E2"}, {"x": 34, "y": 66, "label": "E3"}, {"x": 44, "y": 78, "label": "E4"},
    {"x": 54, "y": 82, "label": "E5"}, {"x": 16, "y": 30, "label": "F1"}, {"x": 26, "y": 34, "label": "F2"},
    {"x": 36, "y": 38, "label": "F3"}, {"x": 46, "y": 42, "label": "F4"}, {"x": 56, "y": 46, "label": "F5"},
    {"x": 11, "y": 85, "label": "G1"}, {"x": 21, "y": 88, "label": "G2"}, {"x": 31, "y": 82, "label": "G3"},
    {"x": 41, "y": 92, "label": "G4"}, {"x": 51, "y": 95, "label": "G5"}, {"x": 19, "y": 25, "label": "H1"},
    {"x": 29, "y": 28, "label": "H2"}, {"x": 39, "y": 32, "label": "H3"}, {"x": 49, "y": 36, "label": "H4"},
    {"x": 59, "y": 40, "label": "H5"}, {"x": 13, "y": 78, "label": "I1"}, {"x": 23, "y": 80, "label": "I2"},
    {"x": 33, "y": 75, "label": "I3"}, {"x": 43, "y": 85, "label": "I4"}, {"x": 53, "y": 88, "label": "I5"},
    {"x": 17, "y": 55, "label": "J1"}, {"x": 27, "y": 58, "label": "J2"}, {"x": 37, "y": 62, "label": "J3"},
    {"x": 47, "y": 65, "label": "J4"}, {"x": 57, "y": 68, "label": "J5"}
  ]
type: scatter
engine: plot
title: Labeled Scatter Plot
width: 600
height: 400
marks:
  - type: dot
    configuration:
      x: x
      y: y
      fill: "#3498db"
      r: 5
  - type: text
    configuration:
      x: x
      y: y
      text: label
      fontSize: 10
      dy: -10
x:
  label: X Coordinate
y:
  label: Y Coordinate
grid: true

Rule Marks ​

Reference Lines with RuleY and RuleX ​

Horizontal and vertical reference lines.

View Source
data:
  source: [
    {"x": 1, "y": 23}, {"x": 2, "y": 27}, {"x": 3, "y": 25}, {"x": 4, "y": 31}, {"x": 5, "y": 35},
    {"x": 6, "y": 33}, {"x": 7, "y": 38}, {"x": 8, "y": 42}, {"x": 9, "y": 40}, {"x": 10, "y": 45},
    {"x": 11, "y": 48}, {"x": 12, "y": 46}, {"x": 13, "y": 52}, {"x": 14, "y": 55}, {"x": 15, "y": 53},
    {"x": 16, "y": 58}, {"x": 17, "y": 62}, {"x": 18, "y": 60}, {"x": 19, "y": 65}, {"x": 20, "y": 68},
    {"x": 21, "y": 66}, {"x": 22, "y": 72}, {"x": 23, "y": 75}, {"x": 24, "y": 73}, {"x": 25, "y": 78},
    {"x": 26, "y": 82}, {"x": 27, "y": 80}, {"x": 28, "y": 85}, {"x": 29, "y": 88}, {"x": 30, "y": 86},
    {"x": 31, "y": 92}, {"x": 32, "y": 95}, {"x": 33, "y": 93}, {"x": 34, "y": 98}, {"x": 35, "y": 102},
    {"x": 36, "y": 100}, {"x": 37, "y": 105}, {"x": 38, "y": 108}, {"x": 39, "y": 106}, {"x": 40, "y": 112},
    {"x": 41, "y": 115}, {"x": 42, "y": 113}, {"x": 43, "y": 118}, {"x": 44, "y": 122}, {"x": 45, "y": 120},
    {"x": 46, "y": 125}, {"x": 47, "y": 128}, {"x": 48, "y": 126}, {"x": 49, "y": 132}, {"x": 50, "y": 135}
  ]
type: scatter
engine: plot
title: Chart with Reference Lines
width: 600
height: 400
marks:
  - type: dot
    configuration:
      x: x
      y: y
      fill: "#3498db"
      r: 4
      tip: true
  - type: ruleY
    configuration:
      y: 75
      stroke: "#e74c3c"
      strokeWidth: 0.1
      strokeDasharray: "4,4"
  - type: ruleY
    configuration:
      y: 100
      stroke: "#27ae60"
      strokeWidth: 0.1
      strokeDasharray: "4,4"
  - type: ruleX
    configuration:
      x: 25
      stroke: "#f39c12"
      strokeWidth: 0.1
      strokeDasharray: "2,2"
x:
  label: X Position
y:
  label: Y Value
grid: true

Tick Marks ​

Distribution Tick Marks ​

Tick marks showing value distribution.

View Source
data:
  source: [
    {"value": 45, "category": "A"}, {"value": 52, "category": "A"}, {"value": 48, "category": "A"},
    {"value": 55, "category": "A"}, {"value": 62, "category": "A"}, {"value": 58, "category": "A"},
    {"value": 65, "category": "A"}, {"value": 72, "category": "A"}, {"value": 68, "category": "A"},
    {"value": 75, "category": "A"}, {"value": 82, "category": "A"}, {"value": 78, "category": "A"},
    {"value": 38, "category": "B"}, {"value": 42, "category": "B"}, {"value": 46, "category": "B"},
    {"value": 43, "category": "B"}, {"value": 50, "category": "B"}, {"value": 54, "category": "B"},
    {"value": 51, "category": "B"}, {"value": 58, "category": "B"}, {"value": 62, "category": "B"},
    {"value": 59, "category": "B"}, {"value": 66, "category": "B"}, {"value": 70, "category": "B"},
    {"value": 52, "category": "C"}, {"value": 55, "category": "C"}, {"value": 59, "category": "C"},
    {"value": 62, "category": "C"}, {"value": 58, "category": "C"}, {"value": 65, "category": "C"},
    {"value": 69, "category": "C"}, {"value": 66, "category": "C"}, {"value": 73, "category": "C"},
    {"value": 77, "category": "C"}, {"value": 74, "category": "C"}, {"value": 81, "category": "C"},
    {"value": 30, "category": "D"}, {"value": 34, "category": "D"}, {"value": 31, "category": "D"},
    {"value": 38, "category": "D"}, {"value": 42, "category": "D"}, {"value": 39, "category": "D"},
    {"value": 46, "category": "D"}, {"value": 50, "category": "D"}, {"value": 47, "category": "D"},
    {"value": 54, "category": "D"}, {"value": 58, "category": "D"}, {"value": 55, "category": "D"},
    {"value": 61, "category": "D"}, {"value": 65, "category": "D"}
  ]

engine: plot
title: Value Distribution Tick Marks
width: 600
height: 400
marks:
  - type: tickX
    configuration:
      x: value
      y: category
      stroke: category
      strokeWidth: 2
x:
  label: Value
y:
  label: Category
color:
  legend: true

Network Connections ​

Link marks connecting nodes (simulated network).

View Source
data:
  source: [
    {"x1": 10, "y1": 20, "x2": 30, "y2": 40}, {"x1": 30, "y1": 40, "x2": 50, "y2": 30},
    {"x1": 50, "y1": 30, "x2": 70, "y2": 50}, {"x1": 70, "y1": 50, "x2": 90, "y2": 45},
    {"x1": 15, "y1": 60, "x2": 35, "y2": 80}, {"x1": 35, "y1": 80, "x2": 55, "y2": 70},
    {"x1": 55, "y1": 70, "x2": 75, "y2": 85}, {"x1": 75, "y1": 85, "x2": 95, "y2": 75},
    {"x1": 20, "y1": 25, "x2": 40, "y2": 35}, {"x1": 40, "y1": 35, "x2": 60, "y2": 45},
    {"x1": 60, "y1": 45, "x2": 80, "y2": 40}, {"x1": 80, "y1": 40, "x2": 100, "y2": 50},
    {"x1": 12, "y1": 55, "x2": 32, "y2": 65}, {"x1": 32, "y1": 65, "x2": 52, "y2": 60},
    {"x1": 52, "y1": 60, "x2": 72, "y2": 75}, {"x1": 72, "y1": 75, "x2": 92, "y2": 70},
    {"x1": 25, "y1": 30, "x2": 45, "y2": 50}, {"x1": 45, "y1": 50, "x2": 65, "y2": 55},
    {"x1": 65, "y1": 55, "x2": 85, "y2": 60}, {"x1": 85, "y1": 60, "x2": 105, "y2": 65},
    {"x1": 18, "y1": 70, "x2": 38, "y2": 85}, {"x1": 38, "y1": 85, "x2": 58, "y2": 80},
    {"x1": 58, "y1": 80, "x2": 78, "y2": 90}, {"x1": 78, "y1": 90, "x2": 98, "y2": 85},
    {"x1": 22, "y1": 15, "x2": 42, "y2": 25}, {"x1": 42, "y1": 25, "x2": 62, "y2": 35},
    {"x1": 62, "y1": 35, "x2": 82, "y2": 30}, {"x1": 82, "y1": 30, "x2": 102, "y2": 40},
    {"x1": 14, "y1": 45, "x2": 34, "y2": 55}, {"x1": 34, "y1": 55, "x2": 54, "y2": 50},
    {"x1": 54, "y1": 50, "x2": 74, "y2": 65}, {"x1": 74, "y1": 65, "x2": 94, "y2": 60},
    {"x1": 28, "y1": 35, "x2": 48, "y2": 45}, {"x1": 48, "y1": 45, "x2": 68, "y2": 40},
    {"x1": 68, "y1": 40, "x2": 88, "y2": 55}, {"x1": 88, "y1": 55, "x2": 108, "y2": 50},
    {"x1": 16, "y1": 75, "x2": 36, "y2": 90}, {"x1": 36, "y1": 90, "x2": 56, "y2": 85},
    {"x1": 56, "y1": 85, "x2": 76, "y2": 95}, {"x1": 76, "y1": 95, "x2": 96, "y2": 90},
    {"x1": 24, "y1": 20, "x2": 44, "y2": 30}, {"x1": 44, "y1": 30, "x2": 64, "y2": 25},
    {"x1": 64, "y1": 25, "x2": 84, "y2": 35}
  ]
engine: plot
title: Network Link Diagram
width: 600
height: 400
marks:
  - type: link
    configuration:
      x1: x1
      y1: y1
      x2: x2
      y2: y2
      stroke: "#95a5a6"
      strokeWidth: 1.5
      strokeOpacity: 0.6
x:
  label: X Position
y:
  label: Y Position

Vector Marks ​

Vector Field Visualization ​

Directional vectors showing flow or force.

View Source
data:
  source: [
    {"x": 10, "y": 10, "length": 15, "rotate": 45}, {"x": 30, "y": 10, "length": 12, "rotate": 30},
    {"x": 50, "y": 10, "length": 18, "rotate": 60}, {"x": 70, "y": 10, "length": 14, "rotate": 90},
    {"x": 90, "y": 10, "length": 16, "rotate": 120}, {"x": 10, "y": 30, "length": 20, "rotate": 135},
    {"x": 30, "y": 30, "length": 13, "rotate": 150}, {"x": 50, "y": 30, "length": 17, "rotate": 180},
    {"x": 70, "y": 30, "length": 15, "rotate": 210}, {"x": 90, "y": 30, "length": 19, "rotate": 240},
    {"x": 10, "y": 50, "length": 14, "rotate": 270}, {"x": 30, "y": 50, "length": 16, "rotate": 300},
    {"x": 50, "y": 50, "length": 21, "rotate": 330}, {"x": 70, "y": 50, "length": 12, "rotate": 0},
    {"x": 90, "y": 50, "length": 18, "rotate": 45}, {"x": 10, "y": 70, "length": 15, "rotate": 90},
    {"x": 30, "y": 70, "length": 17, "rotate": 120}, {"x": 50, "y": 70, "length": 13, "rotate": 150},
    {"x": 70, "y": 70, "length": 19, "rotate": 180}, {"x": 90, "y": 70, "length": 14, "rotate": 210},
    {"x": 10, "y": 90, "length": 16, "rotate": 240}, {"x": 30, "y": 90, "length": 20, "rotate": 270},
    {"x": 50, "y": 90, "length": 12, "rotate": 300}, {"x": 70, "y": 90, "length": 18, "rotate": 330},
    {"x": 90, "y": 90, "length": 15, "rotate": 0}, {"x": 20, "y": 20, "length": 17, "rotate": 45},
    {"x": 40, "y": 20, "length": 14, "rotate": 75}, {"x": 60, "y": 20, "length": 19, "rotate": 105},
    {"x": 80, "y": 20, "length": 13, "rotate": 135}, {"x": 20, "y": 40, "length": 16, "rotate": 165},
    {"x": 40, "y": 40, "length": 21, "rotate": 195}, {"x": 60, "y": 40, "length": 12, "rotate": 225},
    {"x": 80, "y": 40, "length": 18, "rotate": 255}, {"x": 20, "y": 60, "length": 15, "rotate": 285},
    {"x": 40, "y": 60, "length": 17, "rotate": 315}, {"x": 60, "y": 60, "length": 14, "rotate": 345},
    {"x": 80, "y": 60, "length": 19, "rotate": 15}, {"x": 20, "y": 80, "length": 13, "rotate": 60},
    {"x": 40, "y": 80, "length": 16, "rotate": 90}, {"x": 60, "y": 80, "length": 20, "rotate": 120},
    {"x": 80, "y": 80, "length": 12, "rotate": 150}, {"x": 15, "y": 15, "length": 18, "rotate": 180},
    {"x": 35, "y": 35, "length": 15, "rotate": 210}, {"x": 55, "y": 55, "length": 17, "rotate": 240},
    {"x": 75, "y": 75, "length": 14, "rotate": 270}, {"x": 25, "y": 25, "length": 19, "rotate": 300},
    {"x": 45, "y": 45, "length": 13, "rotate": 330}, {"x": 65, "y": 65, "length": 16, "rotate": 0},
    {"x": 85, "y": 85, "length": 21, "rotate": 30}
  ]

engine: plot
title: Vector Field
width: 600
height: 400
marks:
  - type: vector
    configuration:
      x: x
      y: y
      length: length
      rotate: rotate
      stroke: "#e67e22"
      strokeWidth: 2
x:
  label: X Position
y:
  label: Y Position

Cell Marks (Heatmaps) ​

Basic Heatmap ​

2D cell-based heatmap visualization.

View Source
data:
  source: [
    {"x": "A", "y": "1", "value": 12}, {"x": "A", "y": "2", "value": 18}, {"x": "A", "y": "3", "value": 15},
    {"x": "A", "y": "4", "value": 22}, {"x": "A", "y": "5", "value": 25}, {"x": "B", "y": "1", "value": 15},
    {"x": "B", "y": "2", "value": 22}, {"x": "B", "y": "3", "value": 18}, {"x": "B", "y": "4", "value": 26},
    {"x": "B", "y": "5", "value": 28}, {"x": "C", "y": "1", "value": 14}, {"x": "C", "y": "2", "value": 20},
    {"x": "C", "y": "3", "value": 17}, {"x": "C", "y": "4", "value": 24}, {"x": "C", "y": "5", "value": 27},
    {"x": "D", "y": "1", "value": 16}, {"x": "D", "y": "2", "value": 23}, {"x": "D", "y": "3", "value": 19},
    {"x": "D", "y": "4", "value": 28}, {"x": "D", "y": "5", "value": 30}, {"x": "E", "y": "1", "value": 18},
    {"x": "E", "y": "2", "value": 25}, {"x": "E", "y": "3", "value": 21}, {"x": "E", "y": "4", "value": 30},
    {"x": "E", "y": "5", "value": 32}, {"x": "F", "y": "1", "value": 10}, {"x": "F", "y": "2", "value": 14},
    {"x": "F", "y": "3", "value": 12}, {"x": "F", "y": "4", "value": 18}, {"x": "F", "y": "5", "value": 20},
    {"x": "G", "y": "1", "value": 8}, {"x": "G", "y": "2", "value": 12}, {"x": "G", "y": "3", "value": 10},
    {"x": "G", "y": "4", "value": 15}, {"x": "G", "y": "5", "value": 17}, {"x": "H", "y": "1", "value": 20},
    {"x": "H", "y": "2", "value": 27}, {"x": "H", "y": "3", "value": 23}, {"x": "H", "y": "4", "value": 32},
    {"x": "H", "y": "5", "value": 35}, {"x": "I", "y": "1", "value": 13}, {"x": "I", "y": "2", "value": 19},
    {"x": "I", "y": "3", "value": 16}, {"x": "I", "y": "4", "value": 23}, {"x": "I", "y": "5", "value": 26},
    {"x": "J", "y": "1", "value": 17}, {"x": "J", "y": "2", "value": 24}, {"x": "J", "y": "3", "value": 20},
    {"x": "J", "y": "4", "value": 29}, {"x": "J", "y": "5", "value": 31}
  ]
type: heatmap
engine: plot
title: Cell-Based Heatmap
width: 600
height: 400
marks:
  - type: cell
    configuration:
      x: x
      y: y
      fill: value
      tip: true
x:
  label: X Category
y:
  label: Y Category
color:
  scheme: Blues
  legend: true

Statistical Marks ​

Box Plot Distribution ​

Statistical summary showing quartiles and outliers.

View Source
data:
  source: [
    {"category": "Group A", "value": 45}, {"category": "Group A", "value": 52}, {"category": "Group A", "value": 48},
    {"category": "Group A", "value": 55}, {"category": "Group A", "value": 62}, {"category": "Group A", "value": 58},
    {"category": "Group A", "value": 65}, {"category": "Group A", "value": 72}, {"category": "Group A", "value": 68},
    {"category": "Group A", "value": 75},
    {"category": "Group B", "value": 38}, {"category": "Group B", "value": 42}, {"category": "Group B", "value": 46},
    {"category": "Group B", "value": 43}, {"category": "Group B", "value": 50}, {"category": "Group B", "value": 54},
    {"category": "Group B", "value": 51}, {"category": "Group B", "value": 58}, {"category": "Group B", "value": 62},
    {"category": "Group B", "value": 59},
    {"category": "Group C", "value": 52}, {"category": "Group C", "value": 55}, {"category": "Group C", "value": 59},
    {"category": "Group C", "value": 62}, {"category": "Group C", "value": 58}, {"category": "Group C", "value": 65},
    {"category": "Group C", "value": 69}, {"category": "Group C", "value": 66}, {"category": "Group C", "value": 73},
    {"category": "Group C", "value": 77},
    {"category": "Group D", "value": 30}, {"category": "Group D", "value": 34}, {"category": "Group D", "value": 31},
    {"category": "Group D", "value": 38}, {"category": "Group D", "value": 42}, {"category": "Group D", "value": 39},
    {"category": "Group D", "value": 46}, {"category": "Group D", "value": 50}, {"category": "Group D", "value": 47},
    {"category": "Group D", "value": 54},
    {"category": "Group E", "value": 60}, {"category": "Group E", "value": 65}, {"category": "Group E", "value": 62},
    {"category": "Group E", "value": 70}, {"category": "Group E", "value": 75}, {"category": "Group E", "value": 72},
    {"category": "Group E", "value": 80}, {"category": "Group E", "value": 85}, {"category": "Group E", "value": 82},
    {"category": "Group E", "value": 90}
  ]

engine: plot
title: Statistical Box Plot
width: 600
height: 400
marks:
  - type: boxY
    configuration:
      x: category
      y: value
      fill: category
      #tip: true
x:
  label: Category
y:
  label: Value Distribution
color:
  legend: true

Density Plot ​

Smooth kernel density estimation.

View Source
data:
  source: [
    {"value": 45}, {"value": 48}, {"value": 52}, {"value": 55}, {"value": 58},
    {"value": 61}, {"value": 65}, {"value": 68}, {"value": 72}, {"value": 75},
    {"value": 78}, {"value": 82}, {"value": 85}, {"value": 88}, {"value": 91},
    {"value": 54}, {"value": 63}, {"value": 70}, {"value": 77}, {"value": 84},
    {"value": 50}, {"value": 57}, {"value": 64}, {"value": 71}, {"value": 79},
    {"value": 86}, {"value": 93}, {"value": 60}, {"value": 67}, {"value": 74},
    {"value": 81}, {"value": 89}, {"value": 53}, {"value": 62}, {"value": 69},
    {"value": 76}, {"value": 83}, {"value": 90}, {"value": 47}, {"value": 56},
    {"value": 66}, {"value": 73}, {"value": 80}, {"value": 87}, {"value": 95},
    {"value": 59}, {"value": 68}, {"value": 75}, {"value": 82}, {"value": 92}
  ]
engine: plot
title: Kernel Density Estimation
width: 600
height: 400
marks:
  - type: density
    configuration:
      y: value
      x: value
      fill: "#9b59b6"
      fillOpacity: 0.4
      stroke: "#8e44ad"
      strokeWidth: 2
x:
  label: Value
y:
  label: Density
grid: true

Multi-Mark Compositions ​

Scatter with Line and Confidence Band ​

Multiple marks creating a comprehensive visualization.

View Source
data:
  source: [
    {"x": 1, "y": 23, "lower": 20, "upper": 26}, {"x": 2, "y": 27, "lower": 24, "upper": 30},
    {"x": 3, "y": 25, "lower": 22, "upper": 28}, {"x": 4, "y": 31, "lower": 28, "upper": 34},
    {"x": 5, "y": 35, "lower": 32, "upper": 38}, {"x": 6, "y": 33, "lower": 30, "upper": 36},
    {"x": 7, "y": 38, "lower": 35, "upper": 41}, {"x": 8, "y": 42, "lower": 39, "upper": 45},
    {"x": 9, "y": 40, "lower": 37, "upper": 43}, {"x": 10, "y": 45, "lower": 42, "upper": 48},
    {"x": 11, "y": 48, "lower": 45, "upper": 51}, {"x": 12, "y": 46, "lower": 43, "upper": 49},
    {"x": 13, "y": 52, "lower": 49, "upper": 55}, {"x": 14, "y": 55, "lower": 52, "upper": 58},
    {"x": 15, "y": 53, "lower": 50, "upper": 56}, {"x": 16, "y": 58, "lower": 55, "upper": 61},
    {"x": 17, "y": 62, "lower": 59, "upper": 65}, {"x": 18, "y": 60, "lower": 57, "upper": 63},
    {"x": 19, "y": 65, "lower": 62, "upper": 68}, {"x": 20, "y": 68, "lower": 65, "upper": 71},
    {"x": 21, "y": 66, "lower": 63, "upper": 69}, {"x": 22, "y": 72, "lower": 69, "upper": 75},
    {"x": 23, "y": 75, "lower": 72, "upper": 78}, {"x": 24, "y": 73, "lower": 70, "upper": 76},
    {"x": 25, "y": 78, "lower": 75, "upper": 81}, {"x": 26, "y": 82, "lower": 79, "upper": 85},
    {"x": 27, "y": 80, "lower": 77, "upper": 83}, {"x": 28, "y": 85, "lower": 82, "upper": 88},
    {"x": 29, "y": 88, "lower": 85, "upper": 91}, {"x": 30, "y": 86, "lower": 83, "upper": 89},
    {"x": 31, "y": 92, "lower": 89, "upper": 95}, {"x": 32, "y": 95, "lower": 92, "upper": 98},
    {"x": 33, "y": 93, "lower": 90, "upper": 96}, {"x": 34, "y": 98, "lower": 95, "upper": 101},
    {"x": 35, "y": 102, "lower": 99, "upper": 105}, {"x": 36, "y": 100, "lower": 97, "upper": 103},
    {"x": 37, "y": 105, "lower": 102, "upper": 108}, {"x": 38, "y": 108, "lower": 105, "upper": 111},
    {"x": 39, "y": 106, "lower": 103, "upper": 109}, {"x": 40, "y": 112, "lower": 109, "upper": 115},
    {"x": 41, "y": 115, "lower": 112, "upper": 118}, {"x": 42, "y": 113, "lower": 110, "upper": 116},
    {"x": 43, "y": 118, "lower": 115, "upper": 121}, {"x": 44, "y": 122, "lower": 119, "upper": 125},
    {"x": 45, "y": 120, "lower": 117, "upper": 123}, {"x": 46, "y": 125, "lower": 122, "upper": 128},
    {"x": 47, "y": 128, "lower": 125, "upper": 131}, {"x": 48, "y": 126, "lower": 123, "upper": 129},
    {"x": 49, "y": 132, "lower": 129, "upper": 135}, {"x": 50, "y": 135, "lower": 132, "upper": 138}
  ]
engine: plot
title: Multi-Mark Composition with Confidence Band
width: 600
height: 400
marks:
  - type: area
    configuration:
      x: x
      y1: lower
      y2: upper
      fill: "#3498db"
      fillOpacity: 0.2
  - type: line
    configuration:
      x: x
      y: y
      stroke: "#2980b9"
      strokeWidth: 1
  - type: dot
    configuration:
      x: x
      y: y
      fill: "#e74c3c"
      r: 2
      tip: true
x:
  label: X Values
y:
  label: Y Values
grid: true

Bar Chart with Reference Lines and Labels ​

Complex composition with multiple mark types.

View Source
data:
  source: [
    {"category": "A", "value": 45, "target": 50}, {"category": "B", "value": 62, "target": 60},
    {"category": "C", "value": 38, "target": 45}, {"category": "D", "value": 75, "target": 70},
    {"category": "E", "value": 52, "target": 55}, {"category": "F", "value": 68, "target": 65},
    {"category": "G", "value": 42, "target": 50}, {"category": "H", "value": 85, "target": 80},
    {"category": "I", "value": 58, "target": 60}, {"category": "J", "value": 72, "target": 70},
    {"category": "K", "value": 48, "target": 50}, {"category": "L", "value": 92, "target": 90},
    {"category": "M", "value": 55, "target": 55}, {"category": "N", "value": 78, "target": 75},
    {"category": "O", "value": 35, "target": 40}, {"category": "P", "value": 88, "target": 85},
    {"category": "Q", "value": 62, "target": 65}, {"category": "R", "value": 45, "target": 50},
    {"category": "S", "value": 95, "target": 90}, {"category": "T", "value": 52, "target": 55},
    {"category": "U", "value": 68, "target": 70}, {"category": "V", "value": 42, "target": 45},
    {"category": "W", "value": 82, "target": 80}, {"category": "X", "value": 58, "target": 60},
    {"category": "Y", "value": 72, "target": 70}, {"category": "Z", "value": 65, "target": 65},
    {"category": "AA", "value": 48, "target": 50}, {"category": "AB", "value": 92, "target": 90},
    {"category": "AC", "value": 55, "target": 55}, {"category": "AD", "value": 78, "target": 75},
    {"category": "AE", "value": 35, "target": 40}, {"category": "AF", "value": 88, "target": 85},
    {"category": "AG", "value": 62, "target": 65}, {"category": "AH", "value": 75, "target": 70},
    {"category": "AI", "value": 52, "target": 55}, {"category": "AJ", "value": 68, "target": 70},
    {"category": "AK", "value": 42, "target": 45}, {"category": "AL", "value": 85, "target": 80},
    {"category": "AM", "value": 58, "target": 60}, {"category": "AN", "value": 72, "target": 70},
    {"category": "AO", "value": 48, "target": 50}, {"category": "AP", "value": 92, "target": 90},
    {"category": "AQ", "value": 55, "target": 55}, {"category": "AR", "value": 78, "target": 75},
    {"category": "AS", "value": 65, "target": 65}, {"category": "AT", "value": 88, "target": 85},
    {"category": "AU", "value": 52, "target": 55}, {"category": "AV", "value": 72, "target": 70},
    {"category": "AW", "value": 45, "target": 50}, {"category": "AX", "value": 95, "target": 90}
  ]
type: bar
engine: plot
title: Performance vs Target Multi-Mark Chart
width: 600
height: 450
marks:
  - type: barY
    configuration:
      x: category
      y: value
      fill: "#3498db"
      tip: true
  - type: tick
    configuration:
      x: category
      y: target
      stroke: "#e74c3c"
      strokeWidth: 1
  - type: ruleY
    configuration:
      y: 60
      stroke: "#27ae60"
      strokeWidth: 1
      strokeDasharray: "4,4"
x:
  label: Category
y:
  label: Value
grid: true
marginBottom: 100

Usage Notes ​

Mark Configuration ​

All marks support these common channels:

  • Positional: x, y, x1, y1, x2, y2
  • Visual: fill, stroke, fillOpacity, strokeOpacity, strokeWidth
  • Interactive: tip (tooltips), href (links)
  • Stylistic: r (radius for dots), fontSize (for text), strokeDasharray

Multi-Mark Best Practices ​

  1. Layer order matters: Marks are drawn in order, so place background elements first
  2. Combine complementary marks: Area + Line, Bars + Rules, Dots + Text
  3. Use consistent scales: Ensure all marks use the same data scale
  4. Performance: Limit the number of marks for better rendering speed

Data Requirements ​

  • All examples use exactly 50 data points with inline JSON
  • Use source: prefix for embedded data
  • Ensure consistent property names across data objects
  • Include appropriate data types (numbers for quantities, strings for categories)

Customization ​

Modify these properties to customize visualizations:

  • Colors: Change fill and stroke values (hex codes or CSS names)
  • Sizes: Adjust width, height, r, strokeWidth
  • Labels: Update title, x.label, y.label
  • Grid: Set grid: true for reference lines

Complete showcase of all Observable Plot mark types for DataGlass plugin

Released under the MIT License. Built by Boundary Lab.