chartletv0.23.0

Showcase

Each example shows real output produced by chartlet itself, from files in the project repository. Input on the left, output on the right.

Bar charts

Monthly revenue

examples/monthly-revenue.jsonDetail: Monthly revenue →
{
  "schemaVersion": 1,
  "type": "bar",
  "title": "Monthly revenue",
  "description": "Revenue increased in February and remained above January in March.",
  "source": "Example data",
  "categoryAxis": {
    "title": "Month"
  },
  "valueAxis": {
    "title": "Revenue in thousands",
    "format": "number"
  },
  "data": [
    {
      "label": "January",
      "value": 120
    },
    {
      "label": "February",
      "value": 180
    },
    {
      "label": "March",
      "value": 150
    }
  ]
}
Monthly revenue
Monthly revenueRevenue increased in February and remained above January in March.050100150200Revenue in thousandsJanuary: 120120JanuaryFebruary: 180180FebruaryMarch: 150150MarchMonth

Source: Example data

Show chart data
Data for Monthly revenue
CategoryValue
January120
February180
March150
  • Bar (vertical)
  • Compare categories

Quarterly change

examples/quarterly-change.jsonDetail: Quarterly change →
{
  "schemaVersion": 1,
  "type": "bar",
  "orientation": "horizontal",
  "title": "Quarterly change",
  "source": "Example data",
  "categoryAxis": {
    "title": "Quarter"
  },
  "valueAxis": {
    "title": "Change",
    "format": "percent"
  },
  "data": [
    {
      "label": "First quarter",
      "value": 0.12
    },
    {
      "label": "Second quarter",
      "value": -0.04
    },
    {
      "label": "Third quarter with a deliberately long label",
      "value": 0.08
    },
    {
      "label": "Fourth quarter",
      "value": 0.15
    }
  ]
}
Quarterly change
Quarterly changeBar chart with 4 categories. Highest: 15% (Fourth quarter). Lowest: −4% (Second quarter).−5%0%5%10%15%ChangeQuarterFirst quarter: 12%12%First quarterSecond quarter: −4%−4%Second quarterThird quarter with a deliberately long label: 8%8%Third quarter with adeliberately long labelFourth quarter: 15%15%Fourth quarter

Source: Example data

Show chart data
Data for Quarterly change
CategoryValue
First quarter12%
Second quarter−4%
Third quarter with a deliberately long label8%
Fourth quarter15%
  • Bar (horizontal)
  • Show change and deviation

Open support tickets by region

examples/ticket-backlog.jsonDetail: Open support tickets by region →
{
  "schemaVersion": 1,
  "type": "bar",
  "orientation": "horizontal",
  "title": "Open support tickets by region",
  "source": "Sample data",
  "valueAxis": {
    "title": "Open tickets",
    "thousandsSeparator": true
  },
  "references": [
    {
      "value": 2500,
      "label": "Target"
    }
  ],
  "data": [
    {
      "label": "North America",
      "value": 4860
    },
    {
      "label": "Europe",
      "value": 3125
    },
    {
      "label": "Latin America",
      "value": 2210
    },
    {
      "label": "Asia Pacific",
      "value": 1875
    },
    {
      "label": "Middle East & Africa",
      "value": 1240
    }
  ]
}
Open support tickets by region
Open support tickets by regionBar chart with 5 categories. Highest: 4,860 (North America). Lowest: 1,240 (Middle East & Africa). Reference lines: Target at 2,500.01,0002,0003,0004,0005,000Open ticketsTarget: 2,500North America: 4,8604,860North AmericaEurope: 3,1253,125EuropeLatin America: 2,2102,210Latin AmericaAsia Pacific: 1,8751,875Asia PacificMiddle East & Africa: 1,2401,240Middle East & AfricaTarget

Source: Sample data

Show chart data
Data for Open support tickets by region
CategoryValue
North America4,860
Europe3,125
Latin America2,210
Asia Pacific1,875
Middle East & Africa1,240
  • Bar (horizontal)
  • Compare against a target

Electricity generation by source

examples/energy-mix.jsonDetail: Electricity generation by source →
{
  "schemaVersion": 1,
  "type": "bar",
  "stack": "normal",
  "title": "Electricity generation by source",
  "source": "Sample data",
  "valueAxis": {
    "title": "TWh"
  },
  "categories": [
    "2019",
    "2020",
    "2021",
    "2022",
    "2023"
  ],
  "series": [
    {
      "name": "Wind",
      "values": [
        126,
        132,
        114,
        125,
        139
      ]
    },
    {
      "name": "Solar",
      "values": [
        46,
        50,
        49,
        60,
        62
      ]
    },
    {
      "name": "Gas",
      "values": [
        90,
        95,
        89,
        79,
        76
      ]
    },
    {
      "name": "Coal",
      "values": [
        171,
        134,
        163,
        181,
        130
      ]
    }
  ]
}
Electricity generation by source
Electricity generation by sourceBar chart with 5 categories and 4 series (Wind, Solar, Gas, Coal). Highest: 181 (Coal in 2022). Lowest: 46 (Solar in 2019). The series are stacked. Highest total: 445 (2022). Lowest total: 407 (2023).0100200300400500TWhWindSolarGasCoal2019 – Wind: 1261262019 – Solar: 46462019 – Gas: 90902019 – Coal: 17117143320192020 – Wind: 1321322020 – Solar: 50502020 – Gas: 95952020 – Coal: 13413441120202021 – Wind: 1141142021 – Solar: 49492021 – Gas: 89892021 – Coal: 16316341520212022 – Wind: 1251252022 – Solar: 60602022 – Gas: 79792022 – Coal: 18118144520222023 – Wind: 1391392023 – Solar: 62622023 – Gas: 76762023 – Coal: 1301304072023

Source: Sample data

Show chart data
Data for Electricity generation by source
CategoryWindSolarGasCoal
20191264690171
20201325095134
20211144989163
20221256079181
20231396276130
  • Bar (stacked)
  • Show a total and its parts

Accessibility checks by page

examples/audit-outcomes.jsonDetail: Accessibility checks by page →
{
  "schemaVersion": 1,
  "type": "bar",
  "orientation": "horizontal",
  "stack": "percent",
  "title": "Accessibility checks by page",
  "source": "Sample data",
  "categories": [
    "Home",
    "Search",
    "Checkout",
    "Account",
    "Help"
  ],
  "series": [
    {
      "name": "Failed",
      "values": [
        4,
        9,
        12,
        3,
        1
      ]
    },
    {
      "name": "Needs review",
      "values": [
        6,
        7,
        10,
        5,
        4
      ]
    },
    {
      "name": "Passed",
      "values": [
        38,
        30,
        25,
        40,
        44
      ]
    },
    {
      "name": "Not tested",
      "values": [
        2,
        4,
        3,
        2,
        1
      ]
    }
  ]
}
Accessibility checks by page
Accessibility checks by pageBar chart with 5 categories and 4 series (Failed, Needs review, Passed, Not tested). Highest: 44 (Passed in Help). Lowest: 1 (Failed in Help, Not tested in Help). Each bar shows the shares of the series in its category's total.0%20%40%60%80%100%FailedNeeds reviewPassedNot testedHome – Failed: 4 (8%)8%Home – Needs review: 6 (12%)12%Home – Passed: 38 (76%)76%Home – Not tested: 2 (4%)HomeSearch – Failed: 9 (18%)18%Search – Needs review: 7 (14%)14%Search – Passed: 30 (60%)60%Search – Not tested: 4 (8%)8%SearchCheckout – Failed: 12 (24%)24%Checkout – Needs review: 10 (20%)20%Checkout – Passed: 25 (50%)50%Checkout – Not tested: 3 (6%)6%CheckoutAccount – Failed: 3 (6%)6%Account – Needs review: 5 (10%)10%Account – Passed: 40 (80%)80%Account – Not tested: 2 (4%)AccountHelp – Failed: 1 (2%)Help – Needs review: 4 (8%)8%Help – Passed: 44 (88%)88%Help – Not tested: 1 (2%)Help

Source: Sample data

Show chart data
Data for Accessibility checks by page
CategoryFailedNeeds reviewPassedNot tested
Home46382
Search97304
Checkout1210253
Account35402
Help14441
  • Bar (100 % stacked)
  • Compare shares

Budget and actual costs

examples/budget-vs-actual.jsonDetail: Budget and actual costs →
{
  "schemaVersion": 1,
  "type": "bar",
  "title": "Budget and actual costs",
  "source": "Example data",
  "categoryAxis": {
    "title": "Month"
  },
  "valueAxis": {
    "title": "Costs in thousands"
  },
  "categories": [
    "January",
    "February",
    "March",
    "April"
  ],
  "series": [
    {
      "name": "Budget",
      "values": [
        120,
        150,
        140,
        160
      ]
    },
    {
      "name": "Actual",
      "values": [
        130,
        145,
        152,
        null
      ]
    }
  ]
}
Series
Budget and actual costs
Budget and actual costsBar chart with 4 categories and 2 series (Budget, Actual). Highest: 160 (Budget in April). Lowest: 120 (Budget in January). 1 value is missing.050100150200Costs in thousandsBudgetActualJanuary – Budget: 120120January – Actual: 130130JanuaryFebruary – Budget: 150150February – Actual: 145145FebruaryMarch – Budget: 140140March – Actual: 152152MarchApril – Budget: 160160AprilMonth

Source: Example data

Show chart data
Data for Budget and actual costs
CategoryBudgetActual
January120130
February150145
March140152
April160Missing
  • Grouped bar
  • Plan versus actual

Share of world population and of CO₂ emissions

examples/population-and-emissions.jsonDetail: Share of world population and of CO₂ emissions →
{
  "schemaVersion": 1,
  "type": "bar",
  "orientation": "horizontal",
  "patterns": true,
  "title": "Share of world population and of CO₂ emissions",
  "source": "Sample data, rounded",
  "valueAxis": {
    "format": "percent"
  },
  "categories": [
    "China",
    "United States",
    "European Union",
    "India",
    "Africa"
  ],
  "series": [
    {
      "name": "Population",
      "values": [
        0.18,
        0.04,
        0.06,
        0.18,
        0.18
      ]
    },
    {
      "name": "CO₂ emissions",
      "values": [
        0.31,
        0.13,
        0.07,
        0.08,
        0.04
      ]
    }
  ]
}
Series
Share of world population and of CO₂ emissions
Share of world population and of CO₂ emissionsBar chart with 5 categories and 2 series (Population, CO₂ emissions). Highest: 31% (CO₂ emissions in China). Lowest: 4% (Population in United States, CO₂ emissions in Africa).0%10%20%30%40%PopulationCO₂ emissionsChina – Population: 18%18%China – CO₂ emissions: 31%31%ChinaUnited States – Population: 4%4%United States – CO₂ emissions: 13%13%United StatesEuropean Union – Population: 6%6%European Union – CO₂ emissions: 7%7%European UnionIndia – Population: 18%18%India – CO₂ emissions: 8%8%IndiaAfrica – Population: 18%18%Africa – CO₂ emissions: 4%4%Africa

Source: Sample data, rounded

Show chart data
Data for Share of world population and of CO₂ emissions
CategoryPopulationCO₂ emissions
China18%31%
United States4%13%
European Union6%7%
India18%8%
Africa18%4%
  • Bar (grouped, outlined series)
  • Compare two shares per category

Effects of an evening without a phone

examples/benefit-and-harm.jsonDetail: Effects of an evening without a phone →
{
  "schemaVersion": 1,
  "type": "bar",
  "orientation": "horizontal",
  "title": "Effects of an evening without a phone",
  "source": "Illustrative values",
  "width": 720,
  "height": 340,
  "showValues": true,
  "valueAxis": {
    "title": "Effect on a scale of 0 to 5"
  },
  "data": [
    {
      "label": "Sleep quality",
      "value": 4.5,
      "group": "Benefit"
    },
    {
      "label": "Concentration",
      "value": 3.5,
      "group": "Benefit"
    },
    {
      "label": "Conversation",
      "value": 3,
      "group": "Benefit"
    },
    {
      "label": "Missed messages",
      "value": 2,
      "group": "Harm"
    },
    {
      "label": "Less access to news",
      "value": 1.5,
      "group": "Harm"
    }
  ]
}
Effects of an evening without a phone
Effects of an evening without a phoneBar chart with 5 categories. Highest: 4.5 (Sleep quality). Lowest: 1.5 (Less access to news). Colors show groups: Benefit: Sleep quality, Concentration, Conversation; Harm: Missed messages, Less access to news.012345Effect on a scale of 0 to 5BenefitHarmSleep quality – Benefit: 4.54.5Sleep qualityConcentration – Benefit: 3.53.5ConcentrationConversation – Benefit: 33ConversationMissed messages – Harm: 22Missed messagesLess access to news – Harm: 1.51.5Less access to news

Source: Illustrative values

Show chart data
Data for Effects of an evening without a phone
CategoryValueGroup
Sleep quality4.5Benefit
Concentration3.5Benefit
Conversation3Benefit
Missed messages2Harm
Less access to news1.5Harm
  • Bar chart (groups)
  • Set two kinds of effect apart

Satisfaction score by plan, with 95 % confidence interval

examples/satisfaction-scores.jsonDetail: Satisfaction score by plan, with 95 % confidence interval →
{
  "schemaVersion": 1,
  "type": "bar",
  "orientation": "horizontal",
  "title": "Satisfaction score by plan, with 95 % confidence interval",
  "source": "Illustrative survey",
  "width": 720,
  "height": 320,
  "showValues": true,
  "valueAxis": {
    "title": "Score from 1 to 5",
    "max": 5
  },
  "data": [
    {
      "label": "Free",
      "value": 3.4,
      "lower": 3.1,
      "upper": 3.7
    },
    {
      "label": "Team",
      "value": 4.1,
      "lower": 3.9,
      "upper": 4.3
    },
    {
      "label": "Business",
      "value": 4.4,
      "lower": 4,
      "upper": 4.8
    },
    {
      "label": "Enterprise",
      "value": 4,
      "lower": 3.3,
      "upper": 4.7
    }
  ]
}
Satisfaction score by plan, with 95 % confidence interval
Satisfaction score by plan, with 95 % confidence intervalBar chart with 4 categories. Highest: 4.4 (Business). Lowest: 3.4 (Free). Error bars show the interval from lower to upper; the table gives it for every bar.012345Score from 1 to 5Free: 3.4 (3.1 to 3.7)3.4FreeTeam: 4.1 (3.9 to 4.3)4.1TeamBusiness: 4.4 (4 to 4.8)4.4BusinessEnterprise: 4 (3.3 to 4.7)4Enterprise

Source: Illustrative survey

Show chart data
Data for Satisfaction score by plan, with 95 % confidence interval
CategoryValueInterval
Free3.43.1 to 3.7
Team4.13.9 to 4.3
Business4.44 to 4.8
Enterprise43.3 to 4.7
  • Bar chart with error bars
  • Show how sure an estimate is

Satisfaction by quarter, with 95 % confidence intervals

examples/satisfaction-by-quarter.jsonDetail: Satisfaction by quarter, with 95 % confidence intervals →
{
  "schemaVersion": 1,
  "type": "bar",
  "title": "Satisfaction by quarter, with 95 % confidence intervals",
  "source": "Illustrative survey",
  "width": 760,
  "height": 400,
  "showValues": true,
  "valueAxis": {
    "title": "Score from 1 to 5",
    "max": 5
  },
  "categories": [
    "Q1",
    "Q2",
    "Q3",
    "Q4"
  ],
  "series": [
    {
      "name": "Free plan",
      "values": [
        3.2,
        3.4,
        3.5,
        3.8
      ],
      "lower": [
        2.9,
        3.1,
        3.2,
        3.5
      ],
      "upper": [
        3.5,
        3.7,
        3.8,
        4.1
      ]
    },
    {
      "name": "Team plan",
      "values": [
        3.9,
        4,
        4.3,
        4.4
      ],
      "lower": [
        3.7,
        3.8,
        4.1,
        4.2
      ],
      "upper": [
        4.1,
        4.2,
        4.5,
        4.6
      ]
    }
  ],
  "mobile": {
    "width": 400,
    "height": 400
  }
}
Series
Satisfaction by quarter, with 95 % confidence intervals
Satisfaction by quarter, with 95 % confidence intervalsBar chart with 4 categories and 2 series (Free plan, Team plan). Highest: 4.4 (Team plan in Q4). Lowest: 3.2 (Free plan in Q1). Error bars show the interval from lower to upper; the table gives it for every bar.012345Score from 1 to 5Free planTeam planQ1 – Free plan: 3.2 (2.9 to 3.5)3.2Q1 – Team plan: 3.9 (3.7 to 4.1)3.9Q1Q2 – Free plan: 3.4 (3.1 to 3.7)3.4Q2 – Team plan: 4 (3.8 to 4.2)4Q2Q3 – Free plan: 3.5 (3.2 to 3.8)3.5Q3 – Team plan: 4.3 (4.1 to 4.5)4.3Q3Q4 – Free plan: 3.8 (3.5 to 4.1)3.8Q4 – Team plan: 4.4 (4.2 to 4.6)4.4Q4
Satisfaction by quarter, with 95 % confidence intervalsBar chart with 4 categories and 2 series (Free plan, Team plan). Highest: 4.4 (Team plan in Q4). Lowest: 3.2 (Free plan in Q1). Error bars show the interval from lower to upper; the table gives it for every bar.012345Score from 1 to 5Free planTeam planQ1 – Free plan: 3.2 (2.9 to 3.5)3.2Q1 – Team plan: 3.9 (3.7 to 4.1)3.9Q1Q2 – Free plan: 3.4 (3.1 to 3.7)3.4Q2 – Team plan: 4 (3.8 to 4.2)4Q2Q3 – Free plan: 3.5 (3.2 to 3.8)3.5Q3 – Team plan: 4.3 (4.1 to 4.5)4.3Q3Q4 – Free plan: 3.8 (3.5 to 4.1)3.8Q4 – Team plan: 4.4 (4.2 to 4.6)4.4Q4

Source: Illustrative survey

Show chart data
Data for Satisfaction by quarter, with 95 % confidence intervals
CategoryFree planTeam planFree plan – IntervalTeam plan – Interval
Q13.23.92.9 to 3.53.7 to 4.1
Q23.443.1 to 3.73.8 to 4.2
Q33.54.33.2 to 3.84.1 to 4.5
Q43.84.43.5 to 4.14.2 to 4.6
  • Grouped bars (error bars)
  • Compare groups with their uncertainty

Line charts

Monthly active users

examples/monthly-trend.jsonDetail: Monthly active users →
{
  "schemaVersion": 1,
  "type": "line",
  "title": "Monthly active users",
  "description": "Usage grew through May. April has no reported value and is shown as a gap.",
  "source": "Example data",
  "categoryAxis": {
    "title": "Month"
  },
  "valueAxis": {
    "title": "Active users",
    "format": "number"
  },
  "data": [
    {
      "label": "January",
      "value": 1200
    },
    {
      "label": "February",
      "value": 1460
    },
    {
      "label": "March",
      "value": 1390
    },
    {
      "label": "April",
      "value": null
    },
    {
      "label": "May",
      "value": 1810
    },
    {
      "label": "June",
      "value": 2050
    }
  ]
}
Monthly active users
Monthly active usersUsage grew through May. April has no reported value and is shown as a gap.1000120014001600180020002200Active usersJanuary: 12001200JanuaryFebruary: 14601460FebruaryMarch: 13901390MarchAprilMay: 18101810MayJune: 20502050JuneMonth

Source: Example data

Show chart data
Data for Monthly active users
CategoryValue
January1200
February1460
March1390
AprilMissing
May1810
June2050
  • Line
  • Show a trend

Weekly visitors by channel

examples/visitors-by-channel.jsonDetail: Weekly visitors by channel →
{
  "schemaVersion": 1,
  "type": "line",
  "title": "Weekly visitors by channel",
  "source": "Sample data",
  "valueAxis": {
    "title": "Visitors",
    "thousandsSeparator": true
  },
  "categories": [
    "Week 1",
    "Week 2",
    "Week 3",
    "Week 4",
    "Week 5",
    "Week 6"
  ],
  "series": [
    {
      "name": "Search",
      "values": [
        4200,
        4650,
        4400,
        5100,
        5350,
        5600
      ]
    },
    {
      "name": "Direct",
      "values": [
        2600,
        2550,
        2800,
        2750,
        null,
        3050
      ]
    },
    {
      "name": "Social",
      "values": [
        1300,
        1900,
        1650,
        1500,
        2100,
        2400
      ]
    }
  ]
}
Series
Weekly visitors by channel
Weekly visitors by channelLine chart with 6 categories and 3 series (Search, Direct, Social). Highest: 5,600 (Search in Week 6). Lowest: 1,300 (Social in Week 1). 1 value is missing.1,0002,0003,0004,0005,0006,000VisitorsSearchDirectSocialWeek 1 – Search: 4,200Week 2 – Search: 4,650Week 3 – Search: 4,400Week 4 – Search: 5,100Week 5 – Search: 5,350Week 6 – Search: 5,600Week 1 – Direct: 2,600Week 2 – Direct: 2,550Week 3 – Direct: 2,800Week 4 – Direct: 2,750Week 6 – Direct: 3,050Week 1 – Social: 1,300Week 2 – Social: 1,900Week 3 – Social: 1,650Week 4 – Social: 1,500Week 5 – Social: 2,100Week 6 – Social: 2,400Week 1Week 2Week 3Week 4Week 5Week 6

Source: Sample data

Show chart data
Data for Weekly visitors by channel
CategorySearchDirectSocial
Week 14,2002,6001,300
Week 24,6502,5501,900
Week 34,4002,8001,650
Week 45,1002,7501,500
Week 55,350Missing2,100
Week 65,6003,0502,400
  • Line (several series)
  • Compare trends

Earthquakes per year by magnitude

examples/quake-frequency.jsonDetail: Earthquakes per year by magnitude →
{
  "schemaVersion": 1,
  "type": "line",
  "title": "Earthquakes per year by magnitude",
  "source": "Sample data, rounded",
  "categoryAxis": {
    "title": "Magnitude"
  },
  "valueAxis": {
    "title": "Earthquakes per year",
    "scale": "log",
    "thousandsSeparator": true
  },
  "data": [
    {
      "label": "4–4.9",
      "value": 13000
    },
    {
      "label": "5–5.9",
      "value": 1300
    },
    {
      "label": "6–6.9",
      "value": 130
    },
    {
      "label": "7–7.9",
      "value": 15
    },
    {
      "label": "8+",
      "value": 1
    }
  ]
}
Earthquakes per year by magnitude
Earthquakes per year by magnitudeLine chart with 5 categories. Highest: 13,000 (4–4.9). Lowest: 1 (8+).1101001,00010,000Earthquakes per year4–4.9: 13,00013,0004–4.95–5.9: 1,3001,3005–5.96–6.9: 1301306–6.97–7.9: 15157–7.98+: 118+Magnitude

Source: Sample data, rounded

Show chart data
Data for Earthquakes per year by magnitude
CategoryValue
4–4.913,000
5–5.91,300
6–6.9130
7–7.915
8+1
  • Line (logarithmic axis)
  • Show values across orders of magnitude

Mean satisfaction by month, with 95 % confidence interval

examples/monthly-satisfaction.jsonDetail: Mean satisfaction by month, with 95 % confidence interval →
{
  "schemaVersion": 1,
  "type": "line",
  "title": "Mean satisfaction by month, with 95 % confidence interval",
  "source": "Illustrative survey",
  "width": 720,
  "height": 380,
  "showValues": true,
  "valueAxis": {
    "title": "Score from 1 to 5",
    "max": 5
  },
  "data": [
    {
      "label": "Jan",
      "value": 3.1,
      "lower": 2.7,
      "upper": 3.5
    },
    {
      "label": "Feb",
      "value": 3.4,
      "lower": 3,
      "upper": 3.9
    },
    {
      "label": "Mar",
      "value": 3.9,
      "lower": 3.5,
      "upper": 4.2
    },
    {
      "label": "Apr",
      "value": 3.7,
      "lower": 3.2,
      "upper": 4.1
    },
    {
      "label": "May",
      "value": 4,
      "lower": 3.7,
      "upper": 4.3
    },
    {
      "label": "Jun",
      "value": 4.2,
      "lower": 3.8,
      "upper": 4.6
    }
  ],
  "mobile": {
    "width": 400,
    "height": 380
  }
}
Mean satisfaction by month, with 95 % confidence interval
Mean satisfaction by month, with 95 % confidence intervalLine chart with 6 categories. Highest: 4.2 (Jun). Lowest: 3.1 (Jan). Error bars show the interval from lower to upper; the table gives it for every point.2.53.03.54.04.55.0Score from 1 to 5Jan: 3.1 (2.7 to 3.5)3.1JanFeb: 3.4 (3 to 3.9)3.4FebMar: 3.9 (3.5 to 4.2)3.9MarApr: 3.7 (3.2 to 4.1)3.7AprMay: 4 (3.7 to 4.3)4MayJun: 4.2 (3.8 to 4.6)4.2Jun
Mean satisfaction by month, with 95 % confidence intervalLine chart with 6 categories. Highest: 4.2 (Jun). Lowest: 3.1 (Jan). Error bars show the interval from lower to upper; the table gives it for every point.2.53.03.54.04.55.0Score from 1 to 5Jan: 3.1 (2.7 to 3.5)3.1JanFeb: 3.4 (3 to 3.9)3.4FebMar: 3.9 (3.5 to 4.2)3.9MarApr: 3.7 (3.2 to 4.1)3.7AprMay: 4 (3.7 to 4.3)4MayJun: 4.2 (3.8 to 4.6)4.2Jun

Source: Illustrative survey

Show chart data
Data for Mean satisfaction by month, with 95 % confidence interval
CategoryValueInterval
Jan3.12.7 to 3.5
Feb3.43 to 3.9
Mar3.93.5 to 4.2
Apr3.73.2 to 4.1
May43.7 to 4.3
Jun4.23.8 to 4.6
  • Line chart (error bars)
  • Show a trend with its uncertainty

Headcount

examples/headcount.jsonDetail: Headcount →
{
  "schemaVersion": 1,
  "type": "line",
  "title": "Headcount",
  "description": "Headcount rose steadily from January to August.",
  "source": "Example data",
  "categoryAxis": {
    "title": "Month"
  },
  "valueAxis": {
    "title": "Employees",
    "format": "number"
  },
  "data": [
    {
      "label": "January",
      "value": 42
    },
    {
      "label": "February",
      "value": 44
    },
    {
      "label": "March",
      "value": 47
    },
    {
      "label": "April",
      "value": 50
    },
    {
      "label": "May",
      "value": 54
    },
    {
      "label": "June",
      "value": 58
    },
    {
      "label": "July",
      "value": 61
    },
    {
      "label": "August",
      "value": 66
    }
  ],
  "zoomSteps": [
    {
      "label": "All months",
      "from": 0,
      "to": 7
    },
    {
      "label": "January to April",
      "from": 0,
      "to": 3
    },
    {
      "label": "May to August",
      "from": 4,
      "to": 7
    }
  ]
}
View
Headcount
HeadcountHeadcount rose steadily from January to August.40506070EmployeesJanuary: 4242JanuaryFebruary: 4444FebruaryMarch: 4747MarchApril: 5050AprilMay: 5454MayJune: 5858JuneJuly: 6161JulyAugust: 6666AugustMonth
HeadcountHeadcount rose steadily from January to August.40424446485052EmployeesJanuary: 4242JanuaryFebruary: 4444FebruaryMarch: 4747MarchApril: 5050AprilMonth
HeadcountHeadcount rose steadily from January to August.5055606570EmployeesMay: 5454MayJune: 5858JuneJuly: 6161JulyAugust: 6666AugustMonth

Source: Example data

Show chart data
Data for Headcount
CategoryValue
January42
February44
March47
April50
May54
June58
July61
August66
  • Line
  • Show growth

Revenue by region, 2024 and 2025

examples/regional-slope.jsonDetail: Revenue by region, 2024 and 2025 →
{
  "schemaVersion": 1,
  "type": "line",
  "slope": true,
  "title": "Revenue by region, 2024 and 2025",
  "source": "Illustrative figures, millions of euros",
  "width": 640,
  "height": 400,
  "categories": [
    "2024",
    "2025"
  ],
  "series": [
    {
      "name": "North",
      "values": [
        42,
        55
      ]
    },
    {
      "name": "South",
      "values": [
        38,
        36
      ]
    },
    {
      "name": "East",
      "values": [
        51,
        49
      ]
    },
    {
      "name": "West",
      "values": [
        29,
        41
      ]
    }
  ],
  "valueAxis": {
    "format": "number",
    "decimals": 0
  },
  "mobile": {
    "width": 380,
    "height": 440
  }
}
Series
Revenue by region, 2024 and 2025
Revenue by region, 2024 and 2025Slope chart of 4 series from 2024 to 2025: North 42 → 55 (+13); South 38 → 36 (−2); East 51 → 49 (−2); West 29 → 41 (+12). Largest rise: North (+13). Largest fall: South (−2).20242025North, 2024: 42North, 2025: 55South, 2024: 38South, 2025: 36East, 2024: 51East, 2025: 49West, 2024: 29West, 2025: 41North 42South 38East 51West 2955 North36 South49 East41 West
Revenue by region, 2024 and 2025Slope chart of 4 series from 2024 to 2025: North 42 → 55 (+13); South 38 → 36 (−2); East 51 → 49 (−2); West 29 → 41 (+12). Largest rise: North (+13). Largest fall: South (−2).20242025North, 2024: 42North, 2025: 55South, 2024: 38South, 2025: 36East, 2024: 51East, 2025: 49West, 2024: 29West, 2025: 41North 42South 38East 51West 2955 North36 South49 East41 West

Source: Illustrative figures, millions of euros

Show chart data
Data for Revenue by region, 2024 and 2025
CategoryNorthSouthEastWest
202442385129
202555364941
  • Slope chart
  • Compare two moments, series by series

Ticket volume by channel, ranked per quarter

examples/support-rank.jsonDetail: Ticket volume by channel, ranked per quarter →
{
  "schemaVersion": 1,
  "type": "line",
  "rank": true,
  "title": "Ticket volume by channel, ranked per quarter",
  "source": "Illustrative counts; rank 1 is the busiest channel",
  "width": 720,
  "height": 400,
  "categories": [
    "Q1",
    "Q2",
    "Q3",
    "Q4"
  ],
  "series": [
    {
      "name": "Email",
      "values": [
        820,
        780,
        700,
        650
      ]
    },
    {
      "name": "Chat",
      "values": [
        610,
        700,
        790,
        860
      ]
    },
    {
      "name": "Phone",
      "values": [
        540,
        520,
        560,
        530
      ]
    },
    {
      "name": "Forum",
      "values": [
        300,
        340,
        410,
        590
      ]
    }
  ],
  "mobile": {
    "width": 380,
    "height": 460
  }
}
Series
Ticket volume by channel, ranked per quarter
Ticket volume by channel, ranked per quarterRank chart of 4 series in 4 categories from Q1 to Q4; rank 1 is the largest value. Ranks per category: Email: 1, 1, 2, 2; Chat: 2, 2, 1, 1; Phone: 3, 3, 3, 4; Forum: 4, 4, 4, 3. Largest rise in rank: Chat (2 → 1). Largest fall in rank: Email (1 → 2).Q1Q2Q3Q4Email, Q1: Rank 1 (820)Email, Q2: Rank 1 (780)Email, Q3: Rank 2 (700)Email, Q4: Rank 2 (650)Chat, Q1: Rank 2 (610)Chat, Q2: Rank 2 (700)Chat, Q3: Rank 1 (790)Chat, Q4: Rank 1 (860)Phone, Q1: Rank 3 (540)Phone, Q2: Rank 3 (520)Phone, Q3: Rank 3 (560)Phone, Q4: Rank 4 (530)Forum, Q1: Rank 4 (300)Forum, Q2: Rank 4 (340)Forum, Q3: Rank 4 (410)Forum, Q4: Rank 3 (590)Email #1Chat #2Phone #3Forum #4#2 Email#1 Chat#4 Phone#3 Forum
Ticket volume by channel, ranked per quarterRank chart of 4 series in 4 categories from Q1 to Q4; rank 1 is the largest value. Ranks per category: Email: 1, 1, 2, 2; Chat: 2, 2, 1, 1; Phone: 3, 3, 3, 4; Forum: 4, 4, 4, 3. Largest rise in rank: Chat (2 → 1). Largest fall in rank: Email (1 → 2).Q1Q2Q3Q4Email, Q1: Rank 1 (820)Email, Q2: Rank 1 (780)Email, Q3: Rank 2 (700)Email, Q4: Rank 2 (650)Chat, Q1: Rank 2 (610)Chat, Q2: Rank 2 (700)Chat, Q3: Rank 1 (790)Chat, Q4: Rank 1 (860)Phone, Q1: Rank 3 (540)Phone, Q2: Rank 3 (520)Phone, Q3: Rank 3 (560)Phone, Q4: Rank 4 (530)Forum, Q1: Rank 4 (300)Forum, Q2: Rank 4 (340)Forum, Q3: Rank 4 (410)Forum, Q4: Rank 3 (590)Email #1Chat #2Phone #3Forum #4#2 Email#1 Chat#4 Phone#3 Forum

Source: Illustrative counts; rank 1 is the busiest channel

Show chart data
Data for Ticket volume by channel, ranked per quarter
CategoryEmailChatPhoneForum
Q1820610540300
Q2780700520340
Q3700790560410
Q4650860530590
  • Rank chart
  • Show who overtakes whom

Time series

Daily orders

examples/daily-orders.jsonDetail: Daily orders →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Daily orders",
  "description": "Orders per day over two weeks; the weekend dips are visible as local minima.",
  "source": "Example data, chartlet",
  "timeAxis": {
    "timezone": "UTC",
    "title": "Day"
  },
  "panes": [
    {
      "heightRatio": 1,
      "valueAxis": {
        "title": "Orders"
      },
      "layers": [
        {
          "mark": "line",
          "name": "Orders",
          "points": [
            {
              "time": "2026-02-02",
              "value": 412
            },
            {
              "time": "2026-02-03",
              "value": 438
            },
            {
              "time": "2026-02-04",
              "value": 455
            },
            {
              "time": "2026-02-05",
              "value": 471
            },
            {
              "time": "2026-02-06",
              "value": 508
            },
            {
              "time": "2026-02-07",
              "value": 201
            },
            {
              "time": "2026-02-08",
              "value": 176
            },
            {
              "time": "2026-02-09",
              "value": 489
            },
            {
              "time": "2026-02-10",
              "value": 512
            },
            {
              "time": "2026-02-11",
              "value": 497
            },
            {
              "time": "2026-02-12",
              "value": 534
            },
            {
              "time": "2026-02-13",
              "value": 561
            },
            {
              "time": "2026-02-14",
              "value": 228
            },
            {
              "time": "2026-02-15",
              "value": 195
            }
          ]
        }
      ]
    }
  ]
}
Daily orders
Daily ordersOrders per day over two weeks; the weekend dips are visible as local minima.1002003004005006002026-02-022026-02-042026-02-062026-02-082026-02-102026-02-122026-02-14Orders2026-02-02 – Orders: 4124122026-02-03 – Orders: 4384382026-02-04 – Orders: 4554552026-02-05 – Orders: 4714712026-02-06 – Orders: 5085082026-02-07 – Orders: 2012012026-02-08 – Orders: 1761762026-02-09 – Orders: 4894892026-02-10 – Orders: 5125122026-02-11 – Orders: 4974972026-02-12 – Orders: 5345342026-02-13 – Orders: 5615612026-02-14 – Orders: 2282282026-02-15 – Orders: 195195Day

Source: Example data, chartlet

Show chart data
Data for Daily orders
TimeOrders
2026-02-02412
2026-02-03438
2026-02-04455
2026-02-05471
2026-02-06508
2026-02-07201
2026-02-08176
2026-02-09489
2026-02-10512
2026-02-11497
2026-02-12534
2026-02-13561
2026-02-14228
2026-02-15195
  • Time series
  • Plot against a real time axis

Revenue against forecast

examples/revenue-vs-forecast.jsonDetail: Revenue against forecast →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Revenue against forecast",
  "description": "Weekly revenue in thousands next to the forecast band's centre line; both layers name their own color.",
  "source": "Example data, chartlet",
  "theme": "dark",
  "showValues": false,
  "timeAxis": {
    "timezone": "UTC",
    "title": "Week starting"
  },
  "panes": [
    {
      "valueAxis": {
        "title": "Revenue in thousands"
      },
      "layers": [
        {
          "mark": "line",
          "name": "Revenue",
          "color": "#7ea6ff",
          "points": [
            {
              "time": 1769990400,
              "value": 96
            },
            {
              "time": 1770595200,
              "value": 104
            },
            {
              "time": 1771200000,
              "value": 99
            },
            {
              "time": 1771804800,
              "value": 118
            },
            {
              "time": 1772409600,
              "value": 131
            },
            {
              "time": 1773014400,
              "value": 127
            },
            {
              "time": 1773619200,
              "value": 140
            },
            {
              "time": 1774224000,
              "value": 152
            }
          ]
        },
        {
          "mark": "line",
          "name": "Forecast",
          "color": "var(--chart-forecast)",
          "points": [
            {
              "time": 1769990400,
              "value": 100
            },
            {
              "time": 1770595200,
              "value": 102
            },
            {
              "time": 1771200000,
              "value": 108
            },
            {
              "time": 1771804800,
              "value": 112
            },
            {
              "time": 1772409600,
              "value": 120
            },
            {
              "time": 1773014400,
              "value": 126
            },
            {
              "time": 1773619200,
              "value": 134
            },
            {
              "time": 1774224000,
              "value": 140
            }
          ]
        }
      ]
    }
  ]
}
Revenue against forecast
Revenue against forecastWeekly revenue in thousands next to the forecast band's centre line; both layers name their own color.801001201401602026-02-022026-02-092026-02-162026-02-232026-03-022026-03-092026-03-162026-03-23Revenue in thousandsRevenueForecast2026-02-02 – Revenue: 962026-02-09 – Revenue: 1042026-02-16 – Revenue: 992026-02-23 – Revenue: 1182026-03-02 – Revenue: 1312026-03-09 – Revenue: 1272026-03-16 – Revenue: 1402026-03-23 – Revenue: 1522026-02-02 – Forecast: 1002026-02-09 – Forecast: 1022026-02-16 – Forecast: 1082026-02-23 – Forecast: 1122026-03-02 – Forecast: 1202026-03-09 – Forecast: 1262026-03-16 – Forecast: 1342026-03-23 – Forecast: 140Week starting

Source: Example data, chartlet

Show chart data
Data for Revenue against forecast
TimeRevenueForecast
2026-02-0296100
2026-02-09104102
2026-02-1699108
2026-02-23118112
2026-03-02131120
2026-03-09127126
2026-03-16140134
2026-03-23152140
  • Time series (dark)
  • Compare two series over time

Warming to 2100 in two scenarios

examples/temperature-projection.jsonDetail: Warming to 2100 in two scenarios →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Warming to 2100 in two scenarios",
  "source": "Illustrative values, chartlet",
  "showValues": false,
  "timeAxis": {
    "title": "Year"
  },
  "panes": [
    {
      "valueAxis": {
        "title": "Temperature anomaly in °C"
      },
      "layers": [
        {
          "mark": "line",
          "name": "Measured",
          "points": [
            {
              "time": "1950",
              "value": -0.23
            },
            {
              "time": "1951",
              "value": -0.27
            },
            {
              "time": "1952",
              "value": -0.12
            },
            {
              "time": "1953",
              "value": -0.16
            },
            {
              "time": "1954",
              "value": -0.34
            },
            {
              "time": "1955",
              "value": -0.26
            },
            {
              "time": "1956",
              "value": -0.09
            },
            {
              "time": "1957",
              "value": -0.18
            },
            {
              "time": "1958",
              "value": -0.27
            },
            {
              "time": "1959",
              "value": -0.09
            },
            {
              "time": "1960",
              "value": 0.03
            },
            {
              "time": "1961",
              "value": -0.12
            },
            {
              "time": "1962",
              "value": -0.16
            },
            {
              "time": "1963",
              "value": 0.01
            },
            {
              "time": "1964",
              "value": 0
            },
            {
              "time": "1965",
              "value": -0.21
            },
            {
              "time": "1966",
              "value": -0.18
            },
            {
              "time": "1967",
              "value": -0.04
            },
            {
              "time": "1968",
              "value": -0.14
            },
            {
              "time": "1969",
              "value": -0.29
            },
            {
              "time": "1970",
              "value": -0.15
            },
            {
              "time": "1971",
              "value": -0.01
            },
            {
              "time": "1972",
              "value": -0.14
            },
            {
              "time": "1973",
              "value": -0.17
            },
            {
              "time": "1974",
              "value": 0.03
            },
            {
              "time": "1975",
              "value": 0.09
            },
            {
              "time": "1976",
              "value": -0.08
            },
            {
              "time": "1977",
              "value": -0.05
            },
            {
              "time": "1978",
              "value": 0.11
            },
            {
              "time": "1979",
              "value": 0.03
            },
            {
              "time": "1980",
              "value": -0.16
            },
            {
              "time": "1981",
              "value": -0.07
            },
            {
              "time": "1982",
              "value": 0.04
            },
            {
              "time": "1983",
              "value": -0.11
            },
            {
              "time": "1984",
              "value": -0.2
            },
            {
              "time": "1985",
              "value": -0.01
            },
            {
              "time": "1986",
              "value": 0.07
            },
            {
              "time": "1987",
              "value": -0.08
            },
            {
              "time": "1988",
              "value": -0.05
            },
            {
              "time": "1989",
              "value": 0.16
            },
            {
              "time": "1990",
              "value": 0.15
            },
            {
              "time": "1991",
              "value": -0.01
            },
            {
              "time": "1992",
              "value": 0.07
            },
            {
              "time": "1993",
              "value": 0.21
            },
            {
              "time": "1994",
              "value": 0.07
            },
            {
              "time": "1995",
              "value": -0.07
            },
            {
              "time": "1996",
              "value": 0.06
            },
            {
              "time": "1997",
              "value": 0.12
            },
            {
              "time": "1998",
              "value": -0.05
            },
            {
              "time": "1999",
              "value": -0.07
            },
            {
              "time": "2000",
              "value": 0.13
            },
            {
              "time": "2001",
              "value": 0.15
            },
            {
              "time": "2002",
              "value": 0.01
            },
            {
              "time": "2003",
              "value": 0.1
            },
            {
              "time": "2004",
              "value": 0.3
            },
            {
              "time": "2005",
              "value": 0.21
            },
            {
              "time": "2006",
              "value": 0.09
            },
            {
              "time": "2007",
              "value": 0.22
            },
            {
              "time": "2008",
              "value": 0.3
            },
            {
              "time": "2009",
              "value": 0.12
            },
            {
              "time": "2010",
              "value": 0.04
            },
            {
              "time": "2011",
              "value": 0.2
            },
            {
              "time": "2012",
              "value": 0.21
            },
            {
              "time": "2013",
              "value": 0.03
            },
            {
              "time": "2014",
              "value": 0.08
            },
            {
              "time": "2015",
              "value": 0.28
            },
            {
              "time": "2016",
              "value": 0.24
            },
            {
              "time": "2017",
              "value": 0.12
            },
            {
              "time": "2018",
              "value": 0.28
            },
            {
              "time": "2019",
              "value": 0.43
            },
            {
              "time": "2020",
              "value": 0.29
            },
            {
              "time": "2021",
              "value": 0.21
            },
            {
              "time": "2022",
              "value": 0.38
            },
            {
              "time": "2023",
              "value": 0.4
            },
            {
              "time": "2024",
              "value": 0.2
            }
          ]
        },
        {
          "mark": "line",
          "name": "Low emissions",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 0.2,
              "lower": 0.12,
              "upper": 0.29
            },
            {
              "time": "2030",
              "value": 0.23,
              "lower": 0.13,
              "upper": 0.33
            },
            {
              "time": "2035",
              "value": 0.26,
              "lower": 0.15,
              "upper": 0.38
            },
            {
              "time": "2040",
              "value": 0.29,
              "lower": 0.16,
              "upper": 0.43
            },
            {
              "time": "2045",
              "value": 0.32,
              "lower": 0.17,
              "upper": 0.47
            },
            {
              "time": "2050",
              "value": 0.35,
              "lower": 0.19,
              "upper": 0.52
            },
            {
              "time": "2055",
              "value": 0.38,
              "lower": 0.2,
              "upper": 0.56
            },
            {
              "time": "2060",
              "value": 0.41,
              "lower": 0.21,
              "upper": 0.61
            },
            {
              "time": "2065",
              "value": 0.44,
              "lower": 0.23,
              "upper": 0.66
            },
            {
              "time": "2070",
              "value": 0.47,
              "lower": 0.24,
              "upper": 0.7
            },
            {
              "time": "2075",
              "value": 0.5,
              "lower": 0.25,
              "upper": 0.75
            },
            {
              "time": "2080",
              "value": 0.53,
              "lower": 0.27,
              "upper": 0.79
            },
            {
              "time": "2085",
              "value": 0.56,
              "lower": 0.28,
              "upper": 0.84
            },
            {
              "time": "2090",
              "value": 0.59,
              "lower": 0.29,
              "upper": 0.89
            },
            {
              "time": "2095",
              "value": 0.62,
              "lower": 0.31,
              "upper": 0.93
            },
            {
              "time": "2100",
              "value": 0.65,
              "lower": 0.32,
              "upper": 0.98
            }
          ]
        },
        {
          "mark": "line",
          "name": "High emissions",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 0.24,
              "lower": 0.15,
              "upper": 0.33
            },
            {
              "time": "2030",
              "value": 0.43,
              "lower": 0.29,
              "upper": 0.56
            },
            {
              "time": "2035",
              "value": 0.62,
              "lower": 0.44,
              "upper": 0.8
            },
            {
              "time": "2040",
              "value": 0.81,
              "lower": 0.58,
              "upper": 1.04
            },
            {
              "time": "2045",
              "value": 1,
              "lower": 0.73,
              "upper": 1.27
            },
            {
              "time": "2050",
              "value": 1.19,
              "lower": 0.87,
              "upper": 1.51
            },
            {
              "time": "2055",
              "value": 1.38,
              "lower": 1.02,
              "upper": 1.75
            },
            {
              "time": "2060",
              "value": 1.57,
              "lower": 1.16,
              "upper": 1.98
            },
            {
              "time": "2065",
              "value": 1.76,
              "lower": 1.31,
              "upper": 2.22
            },
            {
              "time": "2070",
              "value": 1.95,
              "lower": 1.45,
              "upper": 2.46
            },
            {
              "time": "2075",
              "value": 2.15,
              "lower": 1.6,
              "upper": 2.69
            },
            {
              "time": "2080",
              "value": 2.34,
              "lower": 1.74,
              "upper": 2.93
            },
            {
              "time": "2085",
              "value": 2.53,
              "lower": 1.88,
              "upper": 3.17
            },
            {
              "time": "2090",
              "value": 2.72,
              "lower": 2.03,
              "upper": 3.41
            },
            {
              "time": "2095",
              "value": 2.91,
              "lower": 2.17,
              "upper": 3.64
            },
            {
              "time": "2100",
              "value": 3.1,
              "lower": 2.32,
              "upper": 3.88
            }
          ]
        }
      ]
    }
  ]
}
Warming to 2100 in two scenarios
Warming to 2100 in two scenariosTime chart with 91 points from 1950 to 2100 and 3 series (Measured, Low emissions (modelled), High emissions (modelled)). Highest: 3.1 (High emissions in 2100). Lowest: −0.34 (Measured in 1954). Lines have a shaded band from their lower to their upper bound, hatched where modelled; the data table lists both.−101234519601980200020202040206020802100Temperature anomaly in °CMeasuredLow emissions (modelled)High emissions (modelled)1950 – Measured: −0.231951 – Measured: −0.271952 – Measured: −0.121953 – Measured: −0.161954 – Measured: −0.341955 – Measured: −0.261956 – Measured: −0.091957 – Measured: −0.181958 – Measured: −0.271959 – Measured: −0.091960 – Measured: 0.031961 – Measured: −0.121962 – Measured: −0.161963 – Measured: 0.011964 – Measured: 01965 – Measured: −0.211966 – Measured: −0.181967 – Measured: −0.041968 – Measured: −0.141969 – Measured: −0.291970 – Measured: −0.151971 – Measured: −0.011972 – Measured: −0.141973 – Measured: −0.171974 – Measured: 0.031975 – Measured: 0.091976 – Measured: −0.081977 – Measured: −0.051978 – Measured: 0.111979 – Measured: 0.031980 – Measured: −0.161981 – Measured: −0.071982 – Measured: 0.041983 – Measured: −0.111984 – Measured: −0.21985 – Measured: −0.011986 – Measured: 0.071987 – Measured: −0.081988 – Measured: −0.051989 – Measured: 0.161990 – Measured: 0.151991 – Measured: −0.011992 – Measured: 0.071993 – Measured: 0.211994 – Measured: 0.071995 – Measured: −0.071996 – Measured: 0.061997 – Measured: 0.121998 – Measured: −0.051999 – Measured: −0.072000 – Measured: 0.132001 – Measured: 0.152002 – Measured: 0.012003 – Measured: 0.12004 – Measured: 0.32005 – Measured: 0.212006 – Measured: 0.092007 – Measured: 0.222008 – Measured: 0.32009 – Measured: 0.122010 – Measured: 0.042011 – Measured: 0.22012 – Measured: 0.212013 – Measured: 0.032014 – Measured: 0.082015 – Measured: 0.282016 – Measured: 0.242017 – Measured: 0.122018 – Measured: 0.282019 – Measured: 0.432020 – Measured: 0.292021 – Measured: 0.212022 – Measured: 0.382023 – Measured: 0.42024 – Measured: 0.22025 – Low emissions: 0.2 (range 0.12 to 0.29)2030 – Low emissions: 0.23 (range 0.13 to 0.33)2035 – Low emissions: 0.26 (range 0.15 to 0.38)2040 – Low emissions: 0.29 (range 0.16 to 0.43)2045 – Low emissions: 0.32 (range 0.17 to 0.47)2050 – Low emissions: 0.35 (range 0.19 to 0.52)2055 – Low emissions: 0.38 (range 0.2 to 0.56)2060 – Low emissions: 0.41 (range 0.21 to 0.61)2065 – Low emissions: 0.44 (range 0.23 to 0.66)2070 – Low emissions: 0.47 (range 0.24 to 0.7)2075 – Low emissions: 0.5 (range 0.25 to 0.75)2080 – Low emissions: 0.53 (range 0.27 to 0.79)2085 – Low emissions: 0.56 (range 0.28 to 0.84)2090 – Low emissions: 0.59 (range 0.29 to 0.89)2095 – Low emissions: 0.62 (range 0.31 to 0.93)2100 – Low emissions: 0.65 (range 0.32 to 0.98)2025 – High emissions: 0.24 (range 0.15 to 0.33)2030 – High emissions: 0.43 (range 0.29 to 0.56)2035 – High emissions: 0.62 (range 0.44 to 0.8)2040 – High emissions: 0.81 (range 0.58 to 1.04)2045 – High emissions: 1 (range 0.73 to 1.27)2050 – High emissions: 1.19 (range 0.87 to 1.51)2055 – High emissions: 1.38 (range 1.02 to 1.75)2060 – High emissions: 1.57 (range 1.16 to 1.98)2065 – High emissions: 1.76 (range 1.31 to 2.22)2070 – High emissions: 1.95 (range 1.45 to 2.46)2075 – High emissions: 2.15 (range 1.6 to 2.69)2080 – High emissions: 2.34 (range 1.74 to 2.93)2085 – High emissions: 2.53 (range 1.88 to 3.17)2090 – High emissions: 2.72 (range 2.03 to 3.41)2095 – High emissions: 2.91 (range 2.17 to 3.64)2100 – High emissions: 3.1 (range 2.32 to 3.88)Year

Source: Illustrative values, chartlet

Show chart data
Data for Warming to 2100 in two scenarios
TimeMeasuredLow emissionsLow emissions (lower)Low emissions (upper)High emissionsHigh emissions (lower)High emissions (upper)
1950−0.23MissingMissingMissingMissingMissingMissing
1951−0.27MissingMissingMissingMissingMissingMissing
1952−0.12MissingMissingMissingMissingMissingMissing
1953−0.16MissingMissingMissingMissingMissingMissing
1954−0.34MissingMissingMissingMissingMissingMissing
1955−0.26MissingMissingMissingMissingMissingMissing
1956−0.09MissingMissingMissingMissingMissingMissing
1957−0.18MissingMissingMissingMissingMissingMissing
1958−0.27MissingMissingMissingMissingMissingMissing
1959−0.09MissingMissingMissingMissingMissingMissing
19600.03MissingMissingMissingMissingMissingMissing
1961−0.12MissingMissingMissingMissingMissingMissing
1962−0.16MissingMissingMissingMissingMissingMissing
19630.01MissingMissingMissingMissingMissingMissing
19640MissingMissingMissingMissingMissingMissing
1965−0.21MissingMissingMissingMissingMissingMissing
1966−0.18MissingMissingMissingMissingMissingMissing
1967−0.04MissingMissingMissingMissingMissingMissing
1968−0.14MissingMissingMissingMissingMissingMissing
1969−0.29MissingMissingMissingMissingMissingMissing
1970−0.15MissingMissingMissingMissingMissingMissing
1971−0.01MissingMissingMissingMissingMissingMissing
1972−0.14MissingMissingMissingMissingMissingMissing
1973−0.17MissingMissingMissingMissingMissingMissing
19740.03MissingMissingMissingMissingMissingMissing
19750.09MissingMissingMissingMissingMissingMissing
1976−0.08MissingMissingMissingMissingMissingMissing
1977−0.05MissingMissingMissingMissingMissingMissing
19780.11MissingMissingMissingMissingMissingMissing
19790.03MissingMissingMissingMissingMissingMissing
1980−0.16MissingMissingMissingMissingMissingMissing
1981−0.07MissingMissingMissingMissingMissingMissing
19820.04MissingMissingMissingMissingMissingMissing
1983−0.11MissingMissingMissingMissingMissingMissing
1984−0.2MissingMissingMissingMissingMissingMissing
1985−0.01MissingMissingMissingMissingMissingMissing
19860.07MissingMissingMissingMissingMissingMissing
1987−0.08MissingMissingMissingMissingMissingMissing
1988−0.05MissingMissingMissingMissingMissingMissing
19890.16MissingMissingMissingMissingMissingMissing
19900.15MissingMissingMissingMissingMissingMissing
1991−0.01MissingMissingMissingMissingMissingMissing
19920.07MissingMissingMissingMissingMissingMissing
19930.21MissingMissingMissingMissingMissingMissing
19940.07MissingMissingMissingMissingMissingMissing
1995−0.07MissingMissingMissingMissingMissingMissing
19960.06MissingMissingMissingMissingMissingMissing
19970.12MissingMissingMissingMissingMissingMissing
1998−0.05MissingMissingMissingMissingMissingMissing
1999−0.07MissingMissingMissingMissingMissingMissing
20000.13MissingMissingMissingMissingMissingMissing
20010.15MissingMissingMissingMissingMissingMissing
20020.01MissingMissingMissingMissingMissingMissing
20030.1MissingMissingMissingMissingMissingMissing
20040.3MissingMissingMissingMissingMissingMissing
20050.21MissingMissingMissingMissingMissingMissing
20060.09MissingMissingMissingMissingMissingMissing
20070.22MissingMissingMissingMissingMissingMissing
20080.3MissingMissingMissingMissingMissingMissing
20090.12MissingMissingMissingMissingMissingMissing
20100.04MissingMissingMissingMissingMissingMissing
20110.2MissingMissingMissingMissingMissingMissing
20120.21MissingMissingMissingMissingMissingMissing
20130.03MissingMissingMissingMissingMissingMissing
20140.08MissingMissingMissingMissingMissingMissing
20150.28MissingMissingMissingMissingMissingMissing
20160.24MissingMissingMissingMissingMissingMissing
20170.12MissingMissingMissingMissingMissingMissing
20180.28MissingMissingMissingMissingMissingMissing
20190.43MissingMissingMissingMissingMissingMissing
20200.29MissingMissingMissingMissingMissingMissing
20210.21MissingMissingMissingMissingMissingMissing
20220.38MissingMissingMissingMissingMissingMissing
20230.4MissingMissingMissingMissingMissingMissing
20240.2MissingMissingMissingMissingMissingMissing
2025Missing0.20.120.290.240.150.33
2030Missing0.230.130.330.430.290.56
2035Missing0.260.150.380.620.440.8
2040Missing0.290.160.430.810.581.04
2045Missing0.320.170.4710.731.27
2050Missing0.350.190.521.190.871.51
2055Missing0.380.20.561.381.021.75
2060Missing0.410.210.611.571.161.98
2065Missing0.440.230.661.761.312.22
2070Missing0.470.240.71.951.452.46
2075Missing0.50.250.752.151.62.69
2080Missing0.530.270.792.341.742.93
2085Missing0.560.280.842.531.883.17
2090Missing0.590.290.892.722.033.41
2095Missing0.620.310.932.912.173.64
2100Missing0.650.320.983.12.323.88
  • Time series with uncertainty
  • Separate measurement from projection

Single years and the 20-year mean

examples/annual-mean-threshold.jsonDetail: Single years and the 20-year mean →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Single years and the 20-year mean",
  "source": "Illustrative values, chartlet",
  "showValues": false,
  "timeAxis": {
    "title": "Year"
  },
  "panes": [
    {
      "valueAxis": {
        "title": "Warming since pre-industrial in °C"
      },
      "layers": [
        {
          "mark": "line",
          "name": "Single years",
          "color": "#98a2b3",
          "points": [
            {
              "time": "1940",
              "value": -0.11
            },
            {
              "time": "1941",
              "value": 0.08
            },
            {
              "time": "1942",
              "value": 0.05
            },
            {
              "time": "1943",
              "value": -0.08
            },
            {
              "time": "1944",
              "value": 0.05
            },
            {
              "time": "1945",
              "value": 0.22
            },
            {
              "time": "1946",
              "value": 0.11
            },
            {
              "time": "1947",
              "value": 0.01
            },
            {
              "time": "1948",
              "value": 0.17
            },
            {
              "time": "1949",
              "value": 0.22
            },
            {
              "time": "1950",
              "value": 0.02
            },
            {
              "time": "1951",
              "value": -0.02
            },
            {
              "time": "1952",
              "value": 0.13
            },
            {
              "time": "1953",
              "value": 0.09
            },
            {
              "time": "1954",
              "value": -0.09
            },
            {
              "time": "1955",
              "value": -0.01
            },
            {
              "time": "1956",
              "value": 0.16
            },
            {
              "time": "1957",
              "value": 0.07
            },
            {
              "time": "1958",
              "value": -0.02
            },
            {
              "time": "1959",
              "value": 0.16
            },
            {
              "time": "1960",
              "value": 0.28
            },
            {
              "time": "1961",
              "value": 0.13
            },
            {
              "time": "1962",
              "value": 0.09
            },
            {
              "time": "1963",
              "value": 0.26
            },
            {
              "time": "1964",
              "value": 0.25
            },
            {
              "time": "1965",
              "value": 0.04
            },
            {
              "time": "1966",
              "value": 0.07
            },
            {
              "time": "1967",
              "value": 0.21
            },
            {
              "time": "1968",
              "value": 0.11
            },
            {
              "time": "1969",
              "value": -0.04
            },
            {
              "time": "1970",
              "value": 0.1
            },
            {
              "time": "1971",
              "value": 0.24
            },
            {
              "time": "1972",
              "value": 0.11
            },
            {
              "time": "1973",
              "value": 0.08
            },
            {
              "time": "1974",
              "value": 0.28
            },
            {
              "time": "1975",
              "value": 0.34
            },
            {
              "time": "1976",
              "value": 0.17
            },
            {
              "time": "1977",
              "value": 0.2
            },
            {
              "time": "1978",
              "value": 0.36
            },
            {
              "time": "1979",
              "value": 0.28
            },
            {
              "time": "1980",
              "value": 0.09
            },
            {
              "time": "1981",
              "value": 0.18
            },
            {
              "time": "1982",
              "value": 0.29
            },
            {
              "time": "1983",
              "value": 0.14
            },
            {
              "time": "1984",
              "value": 0.05
            },
            {
              "time": "1985",
              "value": 0.24
            },
            {
              "time": "1986",
              "value": 0.32
            },
            {
              "time": "1987",
              "value": 0.17
            },
            {
              "time": "1988",
              "value": 0.2
            },
            {
              "time": "1989",
              "value": 0.41
            },
            {
              "time": "1990",
              "value": 0.4
            },
            {
              "time": "1991",
              "value": 0.24
            },
            {
              "time": "1992",
              "value": 0.32
            },
            {
              "time": "1993",
              "value": 0.46
            },
            {
              "time": "1994",
              "value": 0.32
            },
            {
              "time": "1995",
              "value": 0.18
            },
            {
              "time": "1996",
              "value": 0.31
            },
            {
              "time": "1997",
              "value": 0.37
            },
            {
              "time": "1998",
              "value": 0.2
            },
            {
              "time": "1999",
              "value": 0.18
            },
            {
              "time": "2000",
              "value": 0.38
            },
            {
              "time": "2001",
              "value": 0.4
            },
            {
              "time": "2002",
              "value": 0.26
            },
            {
              "time": "2003",
              "value": 0.35
            },
            {
              "time": "2004",
              "value": 0.55
            },
            {
              "time": "2005",
              "value": 0.46
            },
            {
              "time": "2006",
              "value": 0.34
            },
            {
              "time": "2007",
              "value": 0.47
            },
            {
              "time": "2008",
              "value": 0.55
            },
            {
              "time": "2009",
              "value": 0.37
            },
            {
              "time": "2010",
              "value": 0.29
            },
            {
              "time": "2011",
              "value": 0.45
            },
            {
              "time": "2012",
              "value": 0.46
            },
            {
              "time": "2013",
              "value": 0.28
            },
            {
              "time": "2014",
              "value": 0.33
            },
            {
              "time": "2015",
              "value": 0.53
            },
            {
              "time": "2016",
              "value": 0.49
            },
            {
              "time": "2017",
              "value": 0.37
            },
            {
              "time": "2018",
              "value": 0.53
            },
            {
              "time": "2019",
              "value": 0.68
            },
            {
              "time": "2020",
              "value": 0.54
            },
            {
              "time": "2021",
              "value": 0.46
            },
            {
              "time": "2022",
              "value": 0.63
            },
            {
              "time": "2023",
              "value": 0.65
            },
            {
              "time": "2024",
              "value": 0.45
            }
          ]
        },
        {
          "mark": "line",
          "name": "20-year mean",
          "points": [
            {
              "time": "1959",
              "value": 0.06
            },
            {
              "time": "1960",
              "value": 0.08
            },
            {
              "time": "1961",
              "value": 0.08
            },
            {
              "time": "1962",
              "value": 0.08
            },
            {
              "time": "1963",
              "value": 0.1
            },
            {
              "time": "1964",
              "value": 0.11
            },
            {
              "time": "1965",
              "value": 0.1
            },
            {
              "time": "1966",
              "value": 0.1
            },
            {
              "time": "1967",
              "value": 0.11
            },
            {
              "time": "1968",
              "value": 0.11
            },
            {
              "time": "1969",
              "value": 0.09
            },
            {
              "time": "1970",
              "value": 0.1
            },
            {
              "time": "1971",
              "value": 0.11
            },
            {
              "time": "1972",
              "value": 0.11
            },
            {
              "time": "1973",
              "value": 0.11
            },
            {
              "time": "1974",
              "value": 0.13
            },
            {
              "time": "1975",
              "value": 0.15
            },
            {
              "time": "1976",
              "value": 0.15
            },
            {
              "time": "1977",
              "value": 0.15
            },
            {
              "time": "1978",
              "value": 0.17
            },
            {
              "time": "1979",
              "value": 0.18
            },
            {
              "time": "1980",
              "value": 0.17
            },
            {
              "time": "1981",
              "value": 0.17
            },
            {
              "time": "1982",
              "value": 0.18
            },
            {
              "time": "1983",
              "value": 0.18
            },
            {
              "time": "1984",
              "value": 0.17
            },
            {
              "time": "1985",
              "value": 0.18
            },
            {
              "time": "1986",
              "value": 0.19
            },
            {
              "time": "1987",
              "value": 0.19
            },
            {
              "time": "1988",
              "value": 0.19
            },
            {
              "time": "1989",
              "value": 0.21
            },
            {
              "time": "1990",
              "value": 0.23
            },
            {
              "time": "1991",
              "value": 0.23
            },
            {
              "time": "1992",
              "value": 0.24
            },
            {
              "time": "1993",
              "value": 0.26
            },
            {
              "time": "1994",
              "value": 0.26
            },
            {
              "time": "1995",
              "value": 0.25
            },
            {
              "time": "1996",
              "value": 0.26
            },
            {
              "time": "1997",
              "value": 0.27
            },
            {
              "time": "1998",
              "value": 0.26
            },
            {
              "time": "1999",
              "value": 0.25
            },
            {
              "time": "2000",
              "value": 0.27
            },
            {
              "time": "2001",
              "value": 0.28
            },
            {
              "time": "2002",
              "value": 0.28
            },
            {
              "time": "2003",
              "value": 0.29
            },
            {
              "time": "2004",
              "value": 0.31
            },
            {
              "time": "2005",
              "value": 0.32
            },
            {
              "time": "2006",
              "value": 0.32
            },
            {
              "time": "2007",
              "value": 0.34
            },
            {
              "time": "2008",
              "value": 0.36
            },
            {
              "time": "2009",
              "value": 0.35
            },
            {
              "time": "2010",
              "value": 0.35
            },
            {
              "time": "2011",
              "value": 0.36
            },
            {
              "time": "2012",
              "value": 0.37
            },
            {
              "time": "2013",
              "value": 0.36
            },
            {
              "time": "2014",
              "value": 0.36
            },
            {
              "time": "2015",
              "value": 0.38
            },
            {
              "time": "2016",
              "value": 0.38
            },
            {
              "time": "2017",
              "value": 0.39
            },
            {
              "time": "2018",
              "value": 0.4
            },
            {
              "time": "2019",
              "value": 0.43
            },
            {
              "time": "2020",
              "value": 0.43
            },
            {
              "time": "2021",
              "value": 0.44
            },
            {
              "time": "2022",
              "value": 0.46
            },
            {
              "time": "2023",
              "value": 0.47
            },
            {
              "time": "2024",
              "value": 0.47
            }
          ]
        },
        {
          "mark": "annotation",
          "value": 1.5,
          "label": "1.5 °C limit"
        },
        {
          "mark": "annotation",
          "time": "2015-12-12",
          "label": "Paris Agreement"
        }
      ]
    }
  ]
}
Single years and the 20-year mean
Single years and the 20-year meanTime chart with 85 points from 1940 to 2024 and 2 series (Single years, 20-year mean). Highest: 0.68 (Single years in 2019). Lowest: −0.11 (Single years in 1940). Reference lines: 1.5 °C limit at 1.5; Paris Agreement at 2015-12-12.−0.50.00.51.01.52.0194019501960197019801990200020102020Warming since pre-industrial in °CSingle years20-year mean1.5 °C limit: 1.5Paris Agreement: 2015-12-121940 – Single years: −0.111941 – Single years: 0.081942 – Single years: 0.051943 – Single years: −0.081944 – Single years: 0.051945 – Single years: 0.221946 – Single years: 0.111947 – Single years: 0.011948 – Single years: 0.171949 – Single years: 0.221950 – Single years: 0.021951 – Single years: −0.021952 – Single years: 0.131953 – Single years: 0.091954 – Single years: −0.091955 – Single years: −0.011956 – Single years: 0.161957 – Single years: 0.071958 – Single years: −0.021959 – Single years: 0.161960 – Single years: 0.281961 – Single years: 0.131962 – Single years: 0.091963 – Single years: 0.261964 – Single years: 0.251965 – Single years: 0.041966 – Single years: 0.071967 – Single years: 0.211968 – Single years: 0.111969 – Single years: −0.041970 – Single years: 0.11971 – Single years: 0.241972 – Single years: 0.111973 – Single years: 0.081974 – Single years: 0.281975 – Single years: 0.341976 – Single years: 0.171977 – Single years: 0.21978 – Single years: 0.361979 – Single years: 0.281980 – Single years: 0.091981 – Single years: 0.181982 – Single years: 0.291983 – Single years: 0.141984 – Single years: 0.051985 – Single years: 0.241986 – Single years: 0.321987 – Single years: 0.171988 – Single years: 0.21989 – Single years: 0.411990 – Single years: 0.41991 – Single years: 0.241992 – Single years: 0.321993 – Single years: 0.461994 – Single years: 0.321995 – Single years: 0.181996 – Single years: 0.311997 – Single years: 0.371998 – Single years: 0.21999 – Single years: 0.182000 – Single years: 0.382001 – Single years: 0.42002 – Single years: 0.262003 – Single years: 0.352004 – Single years: 0.552005 – Single years: 0.462006 – Single years: 0.342007 – Single years: 0.472008 – Single years: 0.552009 – Single years: 0.372010 – Single years: 0.292011 – Single years: 0.452012 – Single years: 0.462013 – Single years: 0.282014 – Single years: 0.332015 – Single years: 0.532016 – Single years: 0.492017 – Single years: 0.372018 – Single years: 0.532019 – Single years: 0.682020 – Single years: 0.542021 – Single years: 0.462022 – Single years: 0.632023 – Single years: 0.652024 – Single years: 0.451959 – 20-year mean: 0.061960 – 20-year mean: 0.081961 – 20-year mean: 0.081962 – 20-year mean: 0.081963 – 20-year mean: 0.11964 – 20-year mean: 0.111965 – 20-year mean: 0.11966 – 20-year mean: 0.11967 – 20-year mean: 0.111968 – 20-year mean: 0.111969 – 20-year mean: 0.091970 – 20-year mean: 0.11971 – 20-year mean: 0.111972 – 20-year mean: 0.111973 – 20-year mean: 0.111974 – 20-year mean: 0.131975 – 20-year mean: 0.151976 – 20-year mean: 0.151977 – 20-year mean: 0.151978 – 20-year mean: 0.171979 – 20-year mean: 0.181980 – 20-year mean: 0.171981 – 20-year mean: 0.171982 – 20-year mean: 0.181983 – 20-year mean: 0.181984 – 20-year mean: 0.171985 – 20-year mean: 0.181986 – 20-year mean: 0.191987 – 20-year mean: 0.191988 – 20-year mean: 0.191989 – 20-year mean: 0.211990 – 20-year mean: 0.231991 – 20-year mean: 0.231992 – 20-year mean: 0.241993 – 20-year mean: 0.261994 – 20-year mean: 0.261995 – 20-year mean: 0.251996 – 20-year mean: 0.261997 – 20-year mean: 0.271998 – 20-year mean: 0.261999 – 20-year mean: 0.252000 – 20-year mean: 0.272001 – 20-year mean: 0.282002 – 20-year mean: 0.282003 – 20-year mean: 0.292004 – 20-year mean: 0.312005 – 20-year mean: 0.322006 – 20-year mean: 0.322007 – 20-year mean: 0.342008 – 20-year mean: 0.362009 – 20-year mean: 0.352010 – 20-year mean: 0.352011 – 20-year mean: 0.362012 – 20-year mean: 0.372013 – 20-year mean: 0.362014 – 20-year mean: 0.362015 – 20-year mean: 0.382016 – 20-year mean: 0.382017 – 20-year mean: 0.392018 – 20-year mean: 0.42019 – 20-year mean: 0.432020 – 20-year mean: 0.432021 – 20-year mean: 0.442022 – 20-year mean: 0.462023 – 20-year mean: 0.472024 – 20-year mean: 0.471.5 °C limitParis AgreementYear

Source: Illustrative values, chartlet

Show chart data
Data for Single years and the 20-year mean
TimeSingle years20-year mean
1940−0.11Missing
19410.08Missing
19420.05Missing
1943−0.08Missing
19440.05Missing
19450.22Missing
19460.11Missing
19470.01Missing
19480.17Missing
19490.22Missing
19500.02Missing
1951−0.02Missing
19520.13Missing
19530.09Missing
1954−0.09Missing
1955−0.01Missing
19560.16Missing
19570.07Missing
1958−0.02Missing
19590.160.06
19600.280.08
19610.130.08
19620.090.08
19630.260.1
19640.250.11
19650.040.1
19660.070.1
19670.210.11
19680.110.11
1969−0.040.09
19700.10.1
19710.240.11
19720.110.11
19730.080.11
19740.280.13
19750.340.15
19760.170.15
19770.20.15
19780.360.17
19790.280.18
19800.090.17
19810.180.17
19820.290.18
19830.140.18
19840.050.17
19850.240.18
19860.320.19
19870.170.19
19880.20.19
19890.410.21
19900.40.23
19910.240.23
19920.320.24
19930.460.26
19940.320.26
19950.180.25
19960.310.26
19970.370.27
19980.20.26
19990.180.25
20000.380.27
20010.40.28
20020.260.28
20030.350.29
20040.550.31
20050.460.32
20060.340.32
20070.470.34
20080.550.36
20090.370.35
20100.290.35
20110.450.36
20120.460.37
20130.280.36
20140.330.36
20150.530.38
20160.490.38
20170.370.39
20180.530.4
20190.680.43
20200.540.43
20210.460.44
20220.630.46
20230.650.47
20240.450.47
  • Time series with reference line
  • Measure against a threshold

Data hall power draw

examples/sensor-readings.jsonDetail: Data hall power draw →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Data hall power draw",
  "source": "Illustrative values, chartlet",
  "showValues": false,
  "timeAxis": {
    "timezone": "UTC",
    "title": "Day"
  },
  "panes": [
    {
      "valueAxis": {
        "title": "Power (kW)",
        "decimals": 1
      },
      "layers": [
        {
          "mark": "area",
          "name": "Total",
          "points": [
            {
              "time": "2026-03-01",
              "value": 44.6
            },
            {
              "time": "2026-03-02",
              "value": 46.1
            },
            {
              "time": "2026-03-03",
              "value": 47.2
            },
            {
              "time": "2026-03-04",
              "value": 48.1
            },
            {
              "time": "2026-03-05",
              "value": 48.3
            },
            {
              "time": "2026-03-06",
              "value": 46.5
            },
            {
              "time": "2026-03-07",
              "value": 45.8
            },
            {
              "time": "2026-03-08",
              "value": 46.8
            },
            {
              "time": "2026-03-09",
              "value": 45.5
            },
            {
              "time": "2026-03-10",
              "value": null
            },
            {
              "time": "2026-03-11",
              "value": null
            },
            {
              "time": "2026-03-12",
              "value": 41.4
            },
            {
              "time": "2026-03-13",
              "value": 38.4
            },
            {
              "time": "2026-03-14",
              "value": 37.8
            },
            {
              "time": "2026-03-15",
              "value": 39.3
            },
            {
              "time": "2026-03-16",
              "value": 39.6
            },
            {
              "time": "2026-03-17",
              "value": 40.2
            },
            {
              "time": "2026-03-18",
              "value": 41.4
            },
            {
              "time": "2026-03-19",
              "value": 42.7
            },
            {
              "time": "2026-03-20",
              "value": 42.7
            },
            {
              "time": "2026-03-21",
              "value": 44.2
            },
            {
              "time": "2026-03-22",
              "value": 47.9
            },
            {
              "time": "2026-03-23",
              "value": 49.2
            },
            {
              "time": "2026-03-24",
              "value": 50.4
            },
            {
              "time": "2026-03-25",
              "value": 50.9
            },
            {
              "time": "2026-03-26",
              "value": 51.4
            },
            {
              "time": "2026-03-27",
              "value": 49.1
            },
            {
              "time": "2026-03-28",
              "value": 48.7
            }
          ]
        },
        {
          "mark": "line",
          "name": "Servers",
          "stroke": "bold",
          "points": [
            {
              "time": "2026-03-01",
              "value": 22
            },
            {
              "time": "2026-03-02",
              "value": 23.1
            },
            {
              "time": "2026-03-03",
              "value": 24
            },
            {
              "time": "2026-03-04",
              "value": 24.8
            },
            {
              "time": "2026-03-05",
              "value": 25.2
            },
            {
              "time": "2026-03-06",
              "value": 25.4
            },
            {
              "time": "2026-03-07",
              "value": 25.2
            },
            {
              "time": "2026-03-08",
              "value": 24.7
            },
            {
              "time": "2026-03-09",
              "value": 24
            },
            {
              "time": "2026-03-10",
              "value": 23.1
            },
            {
              "time": "2026-03-11",
              "value": 22.2
            },
            {
              "time": "2026-03-12",
              "value": 21.4
            },
            {
              "time": "2026-03-13",
              "value": 20.7
            },
            {
              "time": "2026-03-14",
              "value": 20.3
            },
            {
              "time": "2026-03-15",
              "value": 20.1
            },
            {
              "time": "2026-03-16",
              "value": 20.3
            },
            {
              "time": "2026-03-17",
              "value": 20.8
            },
            {
              "time": "2026-03-18",
              "value": 21.6
            },
            {
              "time": "2026-03-19",
              "value": 22.6
            },
            {
              "time": "2026-03-20",
              "value": 23.7
            },
            {
              "time": "2026-03-21",
              "value": 24.7
            },
            {
              "time": "2026-03-22",
              "value": 25.7
            },
            {
              "time": "2026-03-23",
              "value": 26.4
            },
            {
              "time": "2026-03-24",
              "value": 26.8
            },
            {
              "time": "2026-03-25",
              "value": 26.9
            },
            {
              "time": "2026-03-26",
              "value": 26.7
            },
            {
              "time": "2026-03-27",
              "value": 26.1
            },
            {
              "time": "2026-03-28",
              "value": 25.4
            }
          ]
        },
        {
          "mark": "line",
          "name": "Cooling",
          "points": [
            {
              "time": "2026-03-01",
              "value": 13.1
            },
            {
              "time": "2026-03-02",
              "value": 13.4
            },
            {
              "time": "2026-03-03",
              "value": 13.6
            },
            {
              "time": "2026-03-04",
              "value": 13.6
            },
            {
              "time": "2026-03-05",
              "value": 13.5
            },
            {
              "time": "2026-03-06",
              "value": 13.2
            },
            {
              "time": "2026-03-07",
              "value": 12.8
            },
            {
              "time": "2026-03-08",
              "value": 12.3
            },
            {
              "time": "2026-03-09",
              "value": 11.8
            },
            {
              "time": "2026-03-10",
              "value": null
            },
            {
              "time": "2026-03-11",
              "value": null
            },
            {
              "time": "2026-03-12",
              "value": 10.1
            },
            {
              "time": "2026-03-13",
              "value": 9.7
            },
            {
              "time": "2026-03-14",
              "value": 9.4
            },
            {
              "time": "2026-03-15",
              "value": 9.3
            },
            {
              "time": "2026-03-16",
              "value": 9.3
            },
            {
              "time": "2026-03-17",
              "value": 9.4
            },
            {
              "time": "2026-03-18",
              "value": 9.7
            },
            {
              "time": "2026-03-19",
              "value": 10.1
            },
            {
              "time": "2026-03-20",
              "value": 10.7
            },
            {
              "time": "2026-03-21",
              "value": 11.3
            },
            {
              "time": "2026-03-22",
              "value": 12
            },
            {
              "time": "2026-03-23",
              "value": 12.6
            },
            {
              "time": "2026-03-24",
              "value": 13.3
            },
            {
              "time": "2026-03-25",
              "value": 13.8
            },
            {
              "time": "2026-03-26",
              "value": 14.3
            },
            {
              "time": "2026-03-27",
              "value": 14.6
            },
            {
              "time": "2026-03-28",
              "value": 14.8
            }
          ]
        },
        {
          "mark": "line",
          "name": "Lighting",
          "dash": "dotted",
          "points": [
            {
              "time": "2026-03-01",
              "value": 6.3
            },
            {
              "time": "2026-03-02",
              "value": 6.4
            },
            {
              "time": "2026-03-03",
              "value": 6.4
            },
            {
              "time": "2026-03-04",
              "value": 6.5
            },
            {
              "time": "2026-03-05",
              "value": 6.4
            },
            {
              "time": "2026-03-06",
              "value": 4.7
            },
            {
              "time": "2026-03-07",
              "value": 4.6
            },
            {
              "time": "2026-03-08",
              "value": 6.6
            },
            {
              "time": "2026-03-09",
              "value": 6.5
            },
            {
              "time": "2026-03-10",
              "value": 6.7
            },
            {
              "time": "2026-03-11",
              "value": 6.6
            },
            {
              "time": "2026-03-12",
              "value": 6.7
            },
            {
              "time": "2026-03-13",
              "value": 4.8
            },
            {
              "time": "2026-03-14",
              "value": 4.9
            },
            {
              "time": "2026-03-15",
              "value": 6.7
            },
            {
              "time": "2026-03-16",
              "value": 6.8
            },
            {
              "time": "2026-03-17",
              "value": 6.8
            },
            {
              "time": "2026-03-18",
              "value": 6.9
            },
            {
              "time": "2026-03-19",
              "value": 6.8
            },
            {
              "time": "2026-03-20",
              "value": 5.1
            },
            {
              "time": "2026-03-21",
              "value": 5
            },
            {
              "time": "2026-03-22",
              "value": 7
            },
            {
              "time": "2026-03-23",
              "value": 7
            },
            {
              "time": "2026-03-24",
              "value": 7.1
            },
            {
              "time": "2026-03-25",
              "value": 7
            },
            {
              "time": "2026-03-26",
              "value": 7.2
            },
            {
              "time": "2026-03-27",
              "value": 5.2
            },
            {
              "time": "2026-03-28",
              "value": 5.3
            }
          ]
        },
        {
          "mark": "line",
          "name": "Total forecast",
          "color": "#7c3aed",
          "dash": "dashed",
          "points": [
            {
              "time": "2026-03-21",
              "value": 44.2
            },
            {
              "time": "2026-03-22",
              "value": 44.6
            },
            {
              "time": "2026-03-23",
              "value": 44.9
            },
            {
              "time": "2026-03-24",
              "value": 45.2
            },
            {
              "time": "2026-03-25",
              "value": 45.6
            },
            {
              "time": "2026-03-26",
              "value": 46
            },
            {
              "time": "2026-03-27",
              "value": 46.3
            },
            {
              "time": "2026-03-28",
              "value": 46.7
            }
          ]
        }
      ]
    }
  ],
  "zoomSteps": [
    {
      "label": "Four weeks",
      "from": "2026-03-01",
      "to": "2026-03-28"
    },
    {
      "label": "Last week",
      "from": "2026-03-22",
      "to": "2026-03-28"
    }
  ]
}
View
Data hall power draw
Data hall power drawTime chart with 28 points from 2026-03-01 to 2026-03-28 and 5 series (Total, Servers, Cooling, Lighting, Total forecast). Highest: 51.4 (Total in 2026-03-26). Lowest: 4.6 (Lighting in 2026-03-07). 4 values are missing. The area below Total is filled down to zero.02040602026-03-022026-03-092026-03-162026-03-23Power (kW)TotalServersCoolingLightingTotal forecast2026-03-01 – Total: 44.62026-03-02 – Total: 46.12026-03-03 – Total: 47.22026-03-04 – Total: 48.12026-03-05 – Total: 48.32026-03-06 – Total: 46.52026-03-07 – Total: 45.82026-03-08 – Total: 46.82026-03-09 – Total: 45.52026-03-12 – Total: 41.42026-03-13 – Total: 38.42026-03-14 – Total: 37.82026-03-15 – Total: 39.32026-03-16 – Total: 39.62026-03-17 – Total: 40.22026-03-18 – Total: 41.42026-03-19 – Total: 42.72026-03-20 – Total: 42.72026-03-21 – Total: 44.22026-03-22 – Total: 47.92026-03-23 – Total: 49.22026-03-24 – Total: 50.42026-03-25 – Total: 50.92026-03-26 – Total: 51.42026-03-27 – Total: 49.12026-03-28 – Total: 48.72026-03-01 – Servers: 22.02026-03-02 – Servers: 23.12026-03-03 – Servers: 24.02026-03-04 – Servers: 24.82026-03-05 – Servers: 25.22026-03-06 – Servers: 25.42026-03-07 – Servers: 25.22026-03-08 – Servers: 24.72026-03-09 – Servers: 24.02026-03-10 – Servers: 23.12026-03-11 – Servers: 22.22026-03-12 – Servers: 21.42026-03-13 – Servers: 20.72026-03-14 – Servers: 20.32026-03-15 – Servers: 20.12026-03-16 – Servers: 20.32026-03-17 – Servers: 20.82026-03-18 – Servers: 21.62026-03-19 – Servers: 22.62026-03-20 – Servers: 23.72026-03-21 – Servers: 24.72026-03-22 – Servers: 25.72026-03-23 – Servers: 26.42026-03-24 – Servers: 26.82026-03-25 – Servers: 26.92026-03-26 – Servers: 26.72026-03-27 – Servers: 26.12026-03-28 – Servers: 25.42026-03-01 – Cooling: 13.12026-03-02 – Cooling: 13.42026-03-03 – Cooling: 13.62026-03-04 – Cooling: 13.62026-03-05 – Cooling: 13.52026-03-06 – Cooling: 13.22026-03-07 – Cooling: 12.82026-03-08 – Cooling: 12.32026-03-09 – Cooling: 11.82026-03-12 – Cooling: 10.12026-03-13 – Cooling: 9.72026-03-14 – Cooling: 9.42026-03-15 – Cooling: 9.32026-03-16 – Cooling: 9.32026-03-17 – Cooling: 9.42026-03-18 – Cooling: 9.72026-03-19 – Cooling: 10.12026-03-20 – Cooling: 10.72026-03-21 – Cooling: 11.32026-03-22 – Cooling: 12.02026-03-23 – Cooling: 12.62026-03-24 – Cooling: 13.32026-03-25 – Cooling: 13.82026-03-26 – Cooling: 14.32026-03-27 – Cooling: 14.62026-03-28 – Cooling: 14.82026-03-01 – Lighting: 6.32026-03-02 – Lighting: 6.42026-03-03 – Lighting: 6.42026-03-04 – Lighting: 6.52026-03-05 – Lighting: 6.42026-03-06 – Lighting: 4.72026-03-07 – Lighting: 4.62026-03-08 – Lighting: 6.62026-03-09 – Lighting: 6.52026-03-10 – Lighting: 6.72026-03-11 – Lighting: 6.62026-03-12 – Lighting: 6.72026-03-13 – Lighting: 4.82026-03-14 – Lighting: 4.92026-03-15 – Lighting: 6.72026-03-16 – Lighting: 6.82026-03-17 – Lighting: 6.82026-03-18 – Lighting: 6.92026-03-19 – Lighting: 6.82026-03-20 – Lighting: 5.12026-03-21 – Lighting: 5.02026-03-22 – Lighting: 7.02026-03-23 – Lighting: 7.02026-03-24 – Lighting: 7.12026-03-25 – Lighting: 7.02026-03-26 – Lighting: 7.22026-03-27 – Lighting: 5.22026-03-28 – Lighting: 5.32026-03-21 – Total forecast: 44.22026-03-22 – Total forecast: 44.62026-03-23 – Total forecast: 44.92026-03-24 – Total forecast: 45.22026-03-25 – Total forecast: 45.62026-03-26 – Total forecast: 46.02026-03-27 – Total forecast: 46.32026-03-28 – Total forecast: 46.7Day
Data hall power drawTime chart with 7 points from 2026-03-22 to 2026-03-28 and 5 series (Total, Servers, Cooling, Lighting, Total forecast). Highest: 51.4 (Total in 2026-03-26). Lowest: 5.2 (Lighting in 2026-03-27). The area below Total is filled down to zero.02040602026-03-222026-03-232026-03-242026-03-252026-03-262026-03-272026-03-28Power (kW)TotalServersCoolingLightingTotal forecast2026-03-22 – Total: 47.92026-03-23 – Total: 49.22026-03-24 – Total: 50.42026-03-25 – Total: 50.92026-03-26 – Total: 51.42026-03-27 – Total: 49.12026-03-28 – Total: 48.72026-03-22 – Servers: 25.72026-03-23 – Servers: 26.42026-03-24 – Servers: 26.82026-03-25 – Servers: 26.92026-03-26 – Servers: 26.72026-03-27 – Servers: 26.12026-03-28 – Servers: 25.42026-03-22 – Cooling: 12.02026-03-23 – Cooling: 12.62026-03-24 – Cooling: 13.32026-03-25 – Cooling: 13.82026-03-26 – Cooling: 14.32026-03-27 – Cooling: 14.62026-03-28 – Cooling: 14.82026-03-22 – Lighting: 7.02026-03-23 – Lighting: 7.02026-03-24 – Lighting: 7.12026-03-25 – Lighting: 7.02026-03-26 – Lighting: 7.22026-03-27 – Lighting: 5.22026-03-28 – Lighting: 5.32026-03-22 – Total forecast: 44.62026-03-23 – Total forecast: 44.92026-03-24 – Total forecast: 45.22026-03-25 – Total forecast: 45.62026-03-26 – Total forecast: 46.02026-03-27 – Total forecast: 46.32026-03-28 – Total forecast: 46.7Day

Source: Illustrative values, chartlet

Show chart data
Data for Data hall power draw
TimeTotalServersCoolingLightingTotal forecast
2026-03-0144.622.013.16.3Missing
2026-03-0246.123.113.46.4Missing
2026-03-0347.224.013.66.4Missing
2026-03-0448.124.813.66.5Missing
2026-03-0548.325.213.56.4Missing
2026-03-0646.525.413.24.7Missing
2026-03-0745.825.212.84.6Missing
2026-03-0846.824.712.36.6Missing
2026-03-0945.524.011.86.5Missing
2026-03-10Missing23.1Missing6.7Missing
2026-03-11Missing22.2Missing6.6Missing
2026-03-1241.421.410.16.7Missing
2026-03-1338.420.79.74.8Missing
2026-03-1437.820.39.44.9Missing
2026-03-1539.320.19.36.7Missing
2026-03-1639.620.39.36.8Missing
2026-03-1740.220.89.46.8Missing
2026-03-1841.421.69.76.9Missing
2026-03-1942.722.610.16.8Missing
2026-03-2042.723.710.75.1Missing
2026-03-2144.224.711.35.044.2
2026-03-2247.925.712.07.044.6
2026-03-2349.226.412.67.044.9
2026-03-2450.426.813.37.145.2
2026-03-2550.926.913.87.045.6
2026-03-2651.426.714.37.246.0
2026-03-2749.126.114.65.246.3
2026-03-2848.725.414.85.346.7
  • Time series with area and gaps
  • Show several measures and their outages

Electricity generation by source

examples/generation-mix.jsonDetail: Electricity generation by source →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Electricity generation by source",
  "source": "Sample data, rounded",
  "showValues": false,
  "legend": "end",
  "panes": [
    {
      "valueAxis": {
        "title": "TWh per year",
        "thousandsSeparator": true
      },
      "stack": "normal",
      "layers": [
        {
          "mark": "area",
          "name": "Fossil",
          "points": [
            {
              "time": "2000",
              "value": 1450
            },
            {
              "time": "2004",
              "value": 1520
            },
            {
              "time": "2008",
              "value": 1500
            },
            {
              "time": "2012",
              "value": 1350
            },
            {
              "time": "2016",
              "value": 1250
            },
            {
              "time": "2020",
              "value": 1000
            },
            {
              "time": "2024",
              "value": 800
            }
          ]
        },
        {
          "mark": "area",
          "name": "Nuclear",
          "points": [
            {
              "time": "2000",
              "value": 860
            },
            {
              "time": "2004",
              "value": 900
            },
            {
              "time": "2008",
              "value": 870
            },
            {
              "time": "2012",
              "value": 800
            },
            {
              "time": "2016",
              "value": 780
            },
            {
              "time": "2020",
              "value": 690
            },
            {
              "time": "2024",
              "value": 620
            }
          ]
        },
        {
          "mark": "area",
          "name": "Hydro and other",
          "points": [
            {
              "time": "2000",
              "value": 400
            },
            {
              "time": "2004",
              "value": 400
            },
            {
              "time": "2008",
              "value": 420
            },
            {
              "time": "2012",
              "value": 450
            },
            {
              "time": "2016",
              "value": 470
            },
            {
              "time": "2020",
              "value": 500
            },
            {
              "time": "2024",
              "value": 480
            }
          ]
        },
        {
          "mark": "area",
          "name": "Wind and solar",
          "points": [
            {
              "time": "2000",
              "value": 25
            },
            {
              "time": "2004",
              "value": 65
            },
            {
              "time": "2008",
              "value": 130
            },
            {
              "time": "2012",
              "value": 290
            },
            {
              "time": "2016",
              "value": 420
            },
            {
              "time": "2020",
              "value": 560
            },
            {
              "time": "2024",
              "value": 760
            }
          ]
        }
      ]
    }
  ]
}
Electricity generation by source
Electricity generation by sourceTime chart with 7 points from 2000 to 2024 and 4 series (Fossil, Nuclear, Hydro and other, Wind and solar). Highest: 1,520 (Fossil in 2004). Lowest: 25 (Wind and solar in 2000). Stacked areas, from the bottom up: Fossil, Nuclear, Hydro and other, Wind and solar; the top edge shows their total.01,0002,0003,00020002005201020152020TWh per year2000 – Fossil: 1,4502004 – Fossil: 1,5202008 – Fossil: 1,5002012 – Fossil: 1,3502016 – Fossil: 1,2502020 – Fossil: 1,0002024 – Fossil: 8002000 – Nuclear: 8602004 – Nuclear: 9002008 – Nuclear: 8702012 – Nuclear: 8002016 – Nuclear: 7802020 – Nuclear: 6902024 – Nuclear: 6202000 – Hydro and other: 4002004 – Hydro and other: 4002008 – Hydro and other: 4202012 – Hydro and other: 4502016 – Hydro and other: 4702020 – Hydro and other: 5002024 – Hydro and other: 4802000 – Wind and solar: 252004 – Wind and solar: 652008 – Wind and solar: 1302012 – Wind and solar: 2902016 – Wind and solar: 4202020 – Wind and solar: 5602024 – Wind and solar: 760Wind and solarHydro and otherNuclearFossil

Source: Sample data, rounded

Show chart data
Data for Electricity generation by source
TimeFossilNuclearHydro and otherWind and solar
20001,45086040025
20041,52090040065
20081,500870420130
20121,350800450290
20161,250780470420
20201,000690500560
2024800620480760
  • Time series (stacked areas)
  • Show a total and its parts over time

Resting heart rate during training

examples/resting-heart-rate.jsonDetail: Resting heart rate during training →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Resting heart rate during training",
  "source": "Sample data",
  "showValues": false,
  "panes": [
    {
      "valueAxis": {
        "title": "Beats per minute"
      },
      "layers": [
        {
          "mark": "point",
          "name": "Morning reading",
          "points": [
            {
              "time": "2026-03-03",
              "value": 65
            },
            {
              "time": "2026-03-04",
              "value": 63
            },
            {
              "time": "2026-03-06",
              "value": 64
            },
            {
              "time": "2026-03-09",
              "value": 65
            },
            {
              "time": "2026-03-10",
              "value": 62
            },
            {
              "time": "2026-03-12",
              "value": 61
            },
            {
              "time": "2026-03-15",
              "value": 63
            },
            {
              "time": "2026-03-16",
              "value": 62
            },
            {
              "time": "2026-03-18",
              "value": 60
            },
            {
              "time": "2026-03-21",
              "value": 63
            },
            {
              "time": "2026-03-23",
              "value": 62
            },
            {
              "time": "2026-03-24",
              "value": 60
            },
            {
              "time": "2026-03-27",
              "value": 63
            },
            {
              "time": "2026-03-29",
              "value": 60
            },
            {
              "time": "2026-03-31",
              "value": 60
            },
            {
              "time": "2026-04-03",
              "value": 61
            },
            {
              "time": "2026-04-05",
              "value": 58
            },
            {
              "time": "2026-04-06",
              "value": 60
            },
            {
              "time": "2026-04-09",
              "value": 58
            },
            {
              "time": "2026-04-11",
              "value": 61
            },
            {
              "time": "2026-04-13",
              "value": 58
            },
            {
              "time": "2026-04-16",
              "value": 58
            },
            {
              "time": "2026-04-18",
              "value": 59
            },
            {
              "time": "2026-04-20",
              "value": 57
            },
            {
              "time": "2026-04-23",
              "value": 58
            },
            {
              "time": "2026-04-25",
              "value": 56
            },
            {
              "time": "2026-04-26",
              "value": 58
            }
          ]
        },
        {
          "mark": "line",
          "name": "Weekly mean",
          "points": [
            {
              "time": "2026-03-04",
              "value": 64
            },
            {
              "time": "2026-03-11",
              "value": 62.7
            },
            {
              "time": "2026-03-18",
              "value": 62
            },
            {
              "time": "2026-03-25",
              "value": 61.7
            },
            {
              "time": "2026-04-01",
              "value": 60.3
            },
            {
              "time": "2026-04-08",
              "value": 59.2
            },
            {
              "time": "2026-04-15",
              "value": 58.3
            },
            {
              "time": "2026-04-22",
              "value": 57
            }
          ]
        }
      ]
    }
  ]
}
Resting heart rate during training
Resting heart rate during trainingTime chart with 33 points from 2026-03-03 to 2026-04-26 and 2 series (Morning reading, Weekly mean). Highest: 65 (Morning reading in 2026-03-03, Morning reading in 2026-03-09). Lowest: 56 (Morning reading in 2026-04-25).545658606264662026-03-092026-03-162026-03-232026-03-302026-04-062026-04-132026-04-20Beats per minuteMorning readingWeekly mean2026-03-03 – Morning reading: 652026-03-04 – Morning reading: 632026-03-06 – Morning reading: 642026-03-09 – Morning reading: 652026-03-10 – Morning reading: 622026-03-12 – Morning reading: 612026-03-15 – Morning reading: 632026-03-16 – Morning reading: 622026-03-18 – Morning reading: 602026-03-21 – Morning reading: 632026-03-23 – Morning reading: 622026-03-24 – Morning reading: 602026-03-27 – Morning reading: 632026-03-29 – Morning reading: 602026-03-31 – Morning reading: 602026-04-03 – Morning reading: 612026-04-05 – Morning reading: 582026-04-06 – Morning reading: 602026-04-09 – Morning reading: 582026-04-11 – Morning reading: 612026-04-13 – Morning reading: 582026-04-16 – Morning reading: 582026-04-18 – Morning reading: 592026-04-20 – Morning reading: 572026-04-23 – Morning reading: 582026-04-25 – Morning reading: 562026-04-26 – Morning reading: 582026-03-04 – Weekly mean: 642026-03-11 – Weekly mean: 62.72026-03-18 – Weekly mean: 622026-03-25 – Weekly mean: 61.72026-04-01 – Weekly mean: 60.32026-04-08 – Weekly mean: 59.22026-04-15 – Weekly mean: 58.32026-04-22 – Weekly mean: 57

Source: Sample data

Show chart data
Data for Resting heart rate during training
TimeMorning readingWeekly mean
2026-03-0365Missing
2026-03-046364
2026-03-0664Missing
2026-03-0965Missing
2026-03-1062Missing
2026-03-11Missing62.7
2026-03-1261Missing
2026-03-1563Missing
2026-03-1662Missing
2026-03-186062
2026-03-2163Missing
2026-03-2362Missing
2026-03-2460Missing
2026-03-25Missing61.7
2026-03-2763Missing
2026-03-2960Missing
2026-03-3160Missing
2026-04-01Missing60.3
2026-04-0361Missing
2026-04-0558Missing
2026-04-0660Missing
2026-04-08Missing59.2
2026-04-0958Missing
2026-04-1161Missing
2026-04-1358Missing
2026-04-15Missing58.3
2026-04-1658Missing
2026-04-1859Missing
2026-04-2057Missing
2026-04-22Missing57
2026-04-2358Missing
2026-04-2556Missing
2026-04-2658Missing
  • Time series (points and line)
  • Show readings around a trend

Checkout API error rate

examples/release-incidents.jsonDetail: Checkout API error rate →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Checkout API error rate",
  "source": "Illustrative values, chartlet",
  "timeAxis": {
    "timezone": "UTC",
    "title": "Day"
  },
  "showValues": false,
  "panes": [
    {
      "valueAxis": {
        "title": "Errors per 100 requests",
        "decimals": 2
      },
      "layers": [
        {
          "mark": "band",
          "label": "Above the error budget",
          "bottom": 1,
          "top": 2.5
        },
        {
          "mark": "band",
          "label": "Maintenance",
          "from": "2026-02-16",
          "to": "2026-02-19"
        },
        {
          "mark": "line",
          "name": "Error rate",
          "points": [
            {
              "time": "2026-02-02",
              "value": 0.36
            },
            {
              "time": "2026-02-03",
              "value": 0.41
            },
            {
              "time": "2026-02-04",
              "value": 0.36
            },
            {
              "time": "2026-02-05",
              "value": 0.26
            },
            {
              "time": "2026-02-06",
              "value": 0.23
            },
            {
              "time": "2026-02-07",
              "value": 0.3
            },
            {
              "time": "2026-02-08",
              "value": 0.36
            },
            {
              "time": "2026-02-09",
              "value": 0.35
            },
            {
              "time": "2026-02-10",
              "value": 0.3
            },
            {
              "time": "2026-02-11",
              "value": 0.31
            },
            {
              "time": "2026-02-12",
              "value": 0.38
            },
            {
              "time": "2026-02-13",
              "value": 0.39
            },
            {
              "time": "2026-02-14",
              "value": 0.31
            },
            {
              "time": "2026-02-15",
              "value": 0.23
            },
            {
              "time": "2026-02-16",
              "value": 0.25
            },
            {
              "time": "2026-02-17",
              "value": null
            },
            {
              "time": "2026-02-18",
              "value": 0.38
            },
            {
              "time": "2026-02-19",
              "value": 0.34
            },
            {
              "time": "2026-02-20",
              "value": 0.3
            },
            {
              "time": "2026-02-21",
              "value": 0.32
            },
            {
              "time": "2026-02-22",
              "value": 0.37
            },
            {
              "time": "2026-02-23",
              "value": 0.35
            },
            {
              "time": "2026-02-24",
              "value": 2.14
            },
            {
              "time": "2026-02-25",
              "value": 1.62
            },
            {
              "time": "2026-02-26",
              "value": 1.18
            },
            {
              "time": "2026-02-27",
              "value": 0.61
            },
            {
              "time": "2026-02-28",
              "value": 0.66
            },
            {
              "time": "2026-03-01",
              "value": 0.67
            },
            {
              "time": "2026-03-02",
              "value": 0.63
            },
            {
              "time": "2026-03-03",
              "value": 0.59
            },
            {
              "time": "2026-03-04",
              "value": 0.57
            },
            {
              "time": "2026-03-05",
              "value": 0.6
            },
            {
              "time": "2026-03-06",
              "value": 0.24
            },
            {
              "time": "2026-03-07",
              "value": 0.25
            },
            {
              "time": "2026-03-08",
              "value": 0.34
            },
            {
              "time": "2026-03-09",
              "value": 0.41
            },
            {
              "time": "2026-03-10",
              "value": 0.38
            },
            {
              "time": "2026-03-11",
              "value": 0.3
            },
            {
              "time": "2026-03-12",
              "value": 0.28
            },
            {
              "time": "2026-03-13",
              "value": 0.32
            },
            {
              "time": "2026-03-14",
              "value": 0.34
            },
            {
              "time": "2026-03-15",
              "value": 0.29
            }
          ]
        },
        {
          "mark": "annotation",
          "label": "Release 2.4",
          "time": "2026-02-24",
          "value": 2.14,
          "shape": "triangle-up"
        },
        {
          "mark": "annotation",
          "label": "Rollback",
          "time": "2026-02-26",
          "value": 1.18,
          "shape": "triangle-down"
        },
        {
          "mark": "annotation",
          "label": "Hotfix",
          "time": "2026-03-06",
          "value": 0.36,
          "shape": "diamond"
        }
      ]
    }
  ]
}
Checkout API error rate
Checkout API error rateTime chart with 42 points from 2026-02-02 to 2026-03-15. Highest: 2.14 (2026-02-24). Lowest: 0.23 (2026-02-06, 2026-02-15). 1 value is missing. Zones: Above the error budget, values 1.00 to 2.50; Maintenance, 2026-02-16 to 2026-02-19. Markers: Release 2.4 at 2026-02-24, 2.14; Rollback at 2026-02-26, 1.18; Hotfix at 2026-03-06, 0.36.0.00.51.01.52.02.53.02026-02-022026-02-092026-02-162026-02-232026-03-022026-03-09Errors per 100 requestsAbove the error budget: values 1.00 to 2.50Maintenance: 2026-02-16 to 2026-02-192026-02-02 – Error rate: 0.362026-02-03 – Error rate: 0.412026-02-04 – Error rate: 0.362026-02-05 – Error rate: 0.262026-02-06 – Error rate: 0.232026-02-07 – Error rate: 0.302026-02-08 – Error rate: 0.362026-02-09 – Error rate: 0.352026-02-10 – Error rate: 0.302026-02-11 – Error rate: 0.312026-02-12 – Error rate: 0.382026-02-13 – Error rate: 0.392026-02-14 – Error rate: 0.312026-02-15 – Error rate: 0.232026-02-16 – Error rate: 0.252026-02-18 – Error rate: 0.382026-02-19 – Error rate: 0.342026-02-20 – Error rate: 0.302026-02-21 – Error rate: 0.322026-02-22 – Error rate: 0.372026-02-23 – Error rate: 0.352026-02-24 – Error rate: 2.142026-02-25 – Error rate: 1.622026-02-26 – Error rate: 1.182026-02-27 – Error rate: 0.612026-02-28 – Error rate: 0.662026-03-01 – Error rate: 0.672026-03-02 – Error rate: 0.632026-03-03 – Error rate: 0.592026-03-04 – Error rate: 0.572026-03-05 – Error rate: 0.602026-03-06 – Error rate: 0.242026-03-07 – Error rate: 0.252026-03-08 – Error rate: 0.342026-03-09 – Error rate: 0.412026-03-10 – Error rate: 0.382026-03-11 – Error rate: 0.302026-03-12 – Error rate: 0.282026-03-13 – Error rate: 0.322026-03-14 – Error rate: 0.342026-03-15 – Error rate: 0.29Release 2.4: 2026-02-24, 2.14Rollback: 2026-02-26, 1.18Hotfix: 2026-03-06, 0.36Above the error budgetMaintenanceRelease 2.4RollbackHotfixDay

Source: Illustrative values, chartlet

Show chart data
Data for Checkout API error rate
TimeError rate
2026-02-020.36
2026-02-030.41
2026-02-040.36
2026-02-050.26
2026-02-060.23
2026-02-070.30
2026-02-080.36
2026-02-090.35
2026-02-100.30
2026-02-110.31
2026-02-120.38
2026-02-130.39
2026-02-140.31
2026-02-150.23
2026-02-160.25
2026-02-17Missing
2026-02-180.38
2026-02-190.34
2026-02-200.30
2026-02-210.32
2026-02-220.37
2026-02-230.35
2026-02-242.14
2026-02-251.62
2026-02-261.18
2026-02-270.61
2026-02-280.66
2026-03-010.67
2026-03-020.63
2026-03-030.59
2026-03-040.57
2026-03-050.60
2026-03-060.24
2026-03-070.25
2026-03-080.34
2026-03-090.41
2026-03-100.38
2026-03-110.30
2026-03-120.28
2026-03-130.32
2026-03-140.34
2026-03-150.29
  • Time series with zones and markers
  • Mark events and ranges on a timeline

Kestrel Instruments (KSTL), daily share price

examples/share-price.jsonDetail: Kestrel Instruments (KSTL), daily share price →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Kestrel Instruments (KSTL), daily share price",
  "source": "Illustrative values, chartlet",
  "height": 560,
  "timeAxis": {
    "title": "Trading day",
    "gaps": "collapse"
  },
  "panes": [
    {
      "heightRatio": 3,
      "valueAxis": {
        "title": "Price (USD)",
        "decimals": 2
      },
      "layers": [
        {
          "mark": "ohlc",
          "name": "KSTL",
          "data": [
            {
              "time": "2026-01-07",
              "open": 49.24,
              "high": 51.09,
              "low": 48.93,
              "close": 50.2
            },
            {
              "time": "2026-01-08",
              "open": 50.43,
              "high": 50.84,
              "low": 49.8,
              "close": 50.77
            },
            {
              "time": "2026-01-09",
              "open": 51.14,
              "high": 51.15,
              "low": 50.33,
              "close": 50.81
            },
            {
              "time": "2026-01-12",
              "open": 50.66,
              "high": 52.79,
              "low": 50.58,
              "close": 52.03
            },
            {
              "time": "2026-01-13",
              "open": 52.52,
              "high": 53.08,
              "low": 51.61,
              "close": 52.3
            },
            {
              "time": "2026-01-14",
              "open": 52.52,
              "high": 53.14,
              "low": 51.39,
              "close": 51.86
            },
            {
              "time": "2026-01-15",
              "open": 51.92,
              "high": 52.41,
              "low": 51.82,
              "close": 52.1
            },
            {
              "time": "2026-01-16",
              "open": 52.1,
              "high": 53.08,
              "low": 51.78,
              "close": 52.66
            },
            {
              "time": "2026-01-20",
              "open": 52.51,
              "high": 53.06,
              "low": 52.5,
              "close": 52.85
            },
            {
              "time": "2026-01-21",
              "open": 52.99,
              "high": 54,
              "low": 51.33,
              "close": 52.74
            },
            {
              "time": "2026-01-22",
              "open": 52.88,
              "high": 53.28,
              "low": 52.64,
              "close": 53.14
            },
            {
              "time": "2026-01-23",
              "open": 52.96,
              "high": 54.6,
              "low": 52.77,
              "close": 53.27
            },
            {
              "time": "2026-01-26",
              "open": 53.19,
              "high": 53.22,
              "low": 51.65,
              "close": 53.15
            },
            {
              "time": "2026-01-27",
              "open": 52.74,
              "high": 53.73,
              "low": 52.21,
              "close": 53.7
            },
            {
              "time": "2026-01-28",
              "open": 53.1,
              "high": 54.69,
              "low": 52.91,
              "close": 54.49
            },
            {
              "time": "2026-01-29",
              "open": 53.55,
              "high": 55.18,
              "low": 52.76,
              "close": 54.59
            },
            {
              "time": "2026-01-30",
              "open": 54.65,
              "high": 55.3,
              "low": 53.27,
              "close": 53.35
            },
            {
              "time": "2026-02-02",
              "open": 53.4,
              "high": 54.22,
              "low": 52.56,
              "close": 54.17
            },
            {
              "time": "2026-02-03",
              "open": 55.13,
              "high": 55.76,
              "low": 54.42,
              "close": 54.92
            },
            {
              "time": "2026-02-04",
              "open": 55.16,
              "high": 55.46,
              "low": 54.81,
              "close": 55.33
            },
            {
              "time": "2026-02-05",
              "open": 55.55,
              "high": 56.08,
              "low": 53.68,
              "close": 54.24
            },
            {
              "time": "2026-02-06",
              "open": 54.5,
              "high": 56.5,
              "low": 53.99,
              "close": 55.69
            },
            {
              "time": "2026-02-09",
              "open": 55.96,
              "high": 56.83,
              "low": 54.49,
              "close": 54.98
            },
            {
              "time": "2026-02-10",
              "open": 54.92,
              "high": 56.95,
              "low": 54.15,
              "close": 55.86
            },
            {
              "time": "2026-02-11",
              "open": 56,
              "high": 56.23,
              "low": 54.68,
              "close": 55.51
            },
            {
              "time": "2026-02-12",
              "open": 56.03,
              "high": 57.9,
              "low": 55.93,
              "close": 57.1
            },
            {
              "time": "2026-02-13",
              "open": 57.14,
              "high": 58.18,
              "low": 56.36,
              "close": 58.11
            },
            {
              "time": "2026-02-17",
              "open": 57.97,
              "high": 63.24,
              "low": 57.52,
              "close": 62.22
            },
            {
              "time": "2026-02-18",
              "open": 62.22,
              "high": 62.68,
              "low": 61.68,
              "close": 61.72
            },
            {
              "time": "2026-02-19",
              "open": 62.08,
              "high": 62.9,
              "low": 61.19,
              "close": 62.08
            },
            {
              "time": "2026-02-20",
              "open": 61.42,
              "high": 62.86,
              "low": 60.34,
              "close": 62.26
            },
            {
              "time": "2026-02-23",
              "open": 62.26,
              "high": 62.36,
              "low": 61.18,
              "close": 61.2
            },
            {
              "time": "2026-02-24",
              "open": 61.83,
              "high": 62.11,
              "low": 61.54,
              "close": 62.09
            },
            {
              "time": "2026-02-25",
              "open": 61.65,
              "high": 61.95,
              "low": 60.93,
              "close": 61.52
            },
            {
              "time": "2026-02-26",
              "open": 61.87,
              "high": 62.31,
              "low": 61.38,
              "close": 61.38
            },
            {
              "time": "2026-02-27",
              "open": 60.97,
              "high": 62.03,
              "low": 60.62,
              "close": 61.17
            },
            {
              "time": "2026-03-02",
              "open": 60.85,
              "high": 61.28,
              "low": 59.55,
              "close": 60.39
            },
            {
              "time": "2026-03-03",
              "open": 60.52,
              "high": 61.82,
              "low": 59.33,
              "close": 59.51
            },
            {
              "time": "2026-03-04",
              "open": 59.76,
              "high": 59.92,
              "low": 56.84,
              "close": 58.07
            },
            {
              "time": "2026-03-05",
              "open": 57.91,
              "high": 58.65,
              "low": 57.49,
              "close": 58.22
            },
            {
              "time": "2026-03-06",
              "open": 58.68,
              "high": 59.39,
              "low": 58.44,
              "close": 59.03
            },
            {
              "time": "2026-03-09",
              "open": 59.49,
              "high": 60.51,
              "low": 59.23,
              "close": 60.34
            },
            {
              "time": "2026-03-10",
              "open": 60.51,
              "high": 61.84,
              "low": 58.47,
              "close": 58.98
            },
            {
              "time": "2026-03-11",
              "open": 58.93,
              "high": 60.99,
              "low": 58.44,
              "close": 60.68
            },
            {
              "time": "2026-03-12",
              "open": 60.78,
              "high": 61.24,
              "low": 60.73,
              "close": 60.75
            },
            {
              "time": "2026-03-13",
              "open": 60.63,
              "high": 61.12,
              "low": 59.71,
              "close": 59.76
            },
            {
              "time": "2026-03-16",
              "open": 60.7,
              "high": 61.32,
              "low": 59.64,
              "close": 59.99
            },
            {
              "time": "2026-03-17",
              "open": 60.16,
              "high": 61.69,
              "low": 59.92,
              "close": 60.77
            },
            {
              "time": "2026-03-18",
              "open": 60.09,
              "high": 61.17,
              "low": 59.91,
              "close": 60.61
            },
            {
              "time": "2026-03-19",
              "open": 61.24,
              "high": 63.25,
              "low": 60.87,
              "close": 62.48
            },
            {
              "time": "2026-03-20",
              "open": 62.34,
              "high": 63.09,
              "low": 61.18,
              "close": 62.56
            },
            {
              "time": "2026-03-23",
              "open": 62.09,
              "high": 63.02,
              "low": 60.52,
              "close": 61.06
            },
            {
              "time": "2026-03-24",
              "open": 60.76,
              "high": 61.68,
              "low": 59.57,
              "close": 61.54
            },
            {
              "time": "2026-03-25",
              "open": 61.72,
              "high": 62.12,
              "low": 61.65,
              "close": 61.72
            },
            {
              "time": "2026-03-26",
              "open": 61.94,
              "high": 62.44,
              "low": 61.76,
              "close": 62.33
            },
            {
              "time": "2026-03-27",
              "open": 62.04,
              "high": 62.48,
              "low": 62.04,
              "close": 62.13
            },
            {
              "time": "2026-03-30",
              "open": 62.13,
              "high": 62.42,
              "low": 62.06,
              "close": 62.33
            },
            {
              "time": "2026-03-31",
              "open": 62.69,
              "high": 63.36,
              "low": 62.59,
              "close": 63.12
            },
            {
              "time": "2026-04-01",
              "open": 62.46,
              "high": 62.49,
              "low": 61.13,
              "close": 61.64
            },
            {
              "time": "2026-04-02",
              "open": 60.72,
              "high": 61.29,
              "low": 58.93,
              "close": 59.8
            },
            {
              "time": "2026-04-03",
              "open": 59.53,
              "high": 59.81,
              "low": 58.07,
              "close": 58.35
            },
            {
              "time": "2026-04-06",
              "open": 58.59,
              "high": 59.99,
              "low": 58.26,
              "close": 59.98
            },
            {
              "time": "2026-04-07",
              "open": 60.34,
              "high": 61.86,
              "low": 60.25,
              "close": 61.26
            },
            {
              "time": "2026-04-08",
              "open": 61.63,
              "high": 61.96,
              "low": 60.92,
              "close": 61.42
            },
            {
              "time": "2026-04-09",
              "open": 61.85,
              "high": 64.31,
              "low": 61.8,
              "close": 64.19
            }
          ]
        },
        {
          "mark": "line",
          "name": "20-day average",
          "points": [
            {
              "time": "2026-01-07",
              "value": 49.59
            },
            {
              "time": "2026-01-08",
              "value": 49.73
            },
            {
              "time": "2026-01-09",
              "value": 49.86
            },
            {
              "time": "2026-01-12",
              "value": 50.02
            },
            {
              "time": "2026-01-13",
              "value": 50.2
            },
            {
              "time": "2026-01-14",
              "value": 50.35
            },
            {
              "time": "2026-01-15",
              "value": 50.5
            },
            {
              "time": "2026-01-16",
              "value": 50.72
            },
            {
              "time": "2026-01-20",
              "value": 50.94
            },
            {
              "time": "2026-01-21",
              "value": 51.18
            },
            {
              "time": "2026-01-22",
              "value": 51.42
            },
            {
              "time": "2026-01-23",
              "value": 51.64
            },
            {
              "time": "2026-01-26",
              "value": 51.78
            },
            {
              "time": "2026-01-27",
              "value": 51.94
            },
            {
              "time": "2026-01-28",
              "value": 52.13
            },
            {
              "time": "2026-01-29",
              "value": 52.24
            },
            {
              "time": "2026-01-30",
              "value": 52.35
            },
            {
              "time": "2026-02-02",
              "value": 52.48
            },
            {
              "time": "2026-02-03",
              "value": 52.64
            },
            {
              "time": "2026-02-04",
              "value": 52.92
            },
            {
              "time": "2026-02-05",
              "value": 53.12
            },
            {
              "time": "2026-02-06",
              "value": 53.37
            },
            {
              "time": "2026-02-09",
              "value": 53.58
            },
            {
              "time": "2026-02-10",
              "value": 53.77
            },
            {
              "time": "2026-02-11",
              "value": 53.93
            },
            {
              "time": "2026-02-12",
              "value": 54.19
            },
            {
              "time": "2026-02-13",
              "value": 54.49
            },
            {
              "time": "2026-02-17",
              "value": 54.97
            },
            {
              "time": "2026-02-18",
              "value": 55.41
            },
            {
              "time": "2026-02-19",
              "value": 55.88
            },
            {
              "time": "2026-02-20",
              "value": 56.34
            },
            {
              "time": "2026-02-23",
              "value": 56.73
            },
            {
              "time": "2026-02-24",
              "value": 57.18
            },
            {
              "time": "2026-02-25",
              "value": 57.57
            },
            {
              "time": "2026-02-26",
              "value": 57.92
            },
            {
              "time": "2026-02-27",
              "value": 58.25
            },
            {
              "time": "2026-03-02",
              "value": 58.6
            },
            {
              "time": "2026-03-03",
              "value": 58.86
            },
            {
              "time": "2026-03-04",
              "value": 59.02
            },
            {
              "time": "2026-03-05",
              "value": 59.17
            },
            {
              "time": "2026-03-06",
              "value": 59.41
            },
            {
              "time": "2026-03-09",
              "value": 59.64
            },
            {
              "time": "2026-03-10",
              "value": 59.84
            },
            {
              "time": "2026-03-11",
              "value": 60.08
            },
            {
              "time": "2026-03-12",
              "value": 60.34
            },
            {
              "time": "2026-03-13",
              "value": 60.47
            },
            {
              "time": "2026-03-16",
              "value": 60.57
            },
            {
              "time": "2026-03-17",
              "value": 60.5
            },
            {
              "time": "2026-03-18",
              "value": 60.44
            },
            {
              "time": "2026-03-19",
              "value": 60.46
            },
            {
              "time": "2026-03-20",
              "value": 60.48
            },
            {
              "time": "2026-03-23",
              "value": 60.47
            },
            {
              "time": "2026-03-24",
              "value": 60.44
            },
            {
              "time": "2026-03-25",
              "value": 60.45
            },
            {
              "time": "2026-03-26",
              "value": 60.5
            },
            {
              "time": "2026-03-27",
              "value": 60.55
            },
            {
              "time": "2026-03-30",
              "value": 60.64
            },
            {
              "time": "2026-03-31",
              "value": 60.82
            },
            {
              "time": "2026-04-01",
              "value": 61
            },
            {
              "time": "2026-04-02",
              "value": 61.08
            },
            {
              "time": "2026-04-03",
              "value": 61.05
            },
            {
              "time": "2026-04-06",
              "value": 61.03
            },
            {
              "time": "2026-04-07",
              "value": 61.14
            },
            {
              "time": "2026-04-08",
              "value": 61.18
            },
            {
              "time": "2026-04-09",
              "value": 61.35
            }
          ]
        },
        {
          "mark": "annotation",
          "label": "Quarterly results",
          "time": "2026-02-17",
          "value": 64.44,
          "shape": "triangle-down"
        }
      ]
    },
    {
      "heightRatio": 1,
      "valueAxis": {
        "title": "Volume (million shares)",
        "decimals": 1
      },
      "layers": [
        {
          "mark": "area",
          "name": "Volume",
          "stroke": "thin",
          "points": [
            {
              "time": "2026-01-07",
              "value": 2.26
            },
            {
              "time": "2026-01-08",
              "value": 1.88
            },
            {
              "time": "2026-01-09",
              "value": 2.62
            },
            {
              "time": "2026-01-12",
              "value": 2.36
            },
            {
              "time": "2026-01-13",
              "value": 1.6
            },
            {
              "time": "2026-01-14",
              "value": 2.43
            },
            {
              "time": "2026-01-15",
              "value": 2.26
            },
            {
              "time": "2026-01-16",
              "value": 3.13
            },
            {
              "time": "2026-01-20",
              "value": 2.59
            },
            {
              "time": "2026-01-21",
              "value": 1.67
            },
            {
              "time": "2026-01-22",
              "value": 2.45
            },
            {
              "time": "2026-01-23",
              "value": 1.91
            },
            {
              "time": "2026-01-26",
              "value": 1.9
            },
            {
              "time": "2026-01-27",
              "value": 2.71
            },
            {
              "time": "2026-01-28",
              "value": 2.72
            },
            {
              "time": "2026-01-29",
              "value": 2.65
            },
            {
              "time": "2026-01-30",
              "value": 2.52
            },
            {
              "time": "2026-02-02",
              "value": 2.75
            },
            {
              "time": "2026-02-03",
              "value": 2.05
            },
            {
              "time": "2026-02-04",
              "value": 1.44
            },
            {
              "time": "2026-02-05",
              "value": 1.78
            },
            {
              "time": "2026-02-06",
              "value": 2.39
            },
            {
              "time": "2026-02-09",
              "value": 3.06
            },
            {
              "time": "2026-02-10",
              "value": 2.28
            },
            {
              "time": "2026-02-11",
              "value": 1.78
            },
            {
              "time": "2026-02-12",
              "value": 2.02
            },
            {
              "time": "2026-02-13",
              "value": 2.21
            },
            {
              "time": "2026-02-17",
              "value": 6.79
            },
            {
              "time": "2026-02-18",
              "value": 4.03
            },
            {
              "time": "2026-02-19",
              "value": 1.81
            },
            {
              "time": "2026-02-20",
              "value": 2.78
            },
            {
              "time": "2026-02-23",
              "value": 2.11
            },
            {
              "time": "2026-02-24",
              "value": 2.6
            },
            {
              "time": "2026-02-25",
              "value": 1.4
            },
            {
              "time": "2026-02-26",
              "value": 2.6
            },
            {
              "time": "2026-02-27",
              "value": 2.55
            },
            {
              "time": "2026-03-02",
              "value": 2.17
            },
            {
              "time": "2026-03-03",
              "value": 2.08
            },
            {
              "time": "2026-03-04",
              "value": 2.14
            },
            {
              "time": "2026-03-05",
              "value": 2.47
            },
            {
              "time": "2026-03-06",
              "value": 1.24
            },
            {
              "time": "2026-03-09",
              "value": 3.17
            },
            {
              "time": "2026-03-10",
              "value": 2.81
            },
            {
              "time": "2026-03-11",
              "value": 2.12
            },
            {
              "time": "2026-03-12",
              "value": 2.03
            },
            {
              "time": "2026-03-13",
              "value": 1.94
            },
            {
              "time": "2026-03-16",
              "value": 1.12
            },
            {
              "time": "2026-03-17",
              "value": 2.21
            },
            {
              "time": "2026-03-18",
              "value": 1.9
            },
            {
              "time": "2026-03-19",
              "value": 2.53
            },
            {
              "time": "2026-03-20",
              "value": 2.61
            },
            {
              "time": "2026-03-23",
              "value": 3.19
            },
            {
              "time": "2026-03-24",
              "value": 1.95
            },
            {
              "time": "2026-03-25",
              "value": 2.32
            },
            {
              "time": "2026-03-26",
              "value": 2.54
            },
            {
              "time": "2026-03-27",
              "value": 2.06
            },
            {
              "time": "2026-03-30",
              "value": 1.57
            },
            {
              "time": "2026-03-31",
              "value": 2.4
            },
            {
              "time": "2026-04-01",
              "value": 2.65
            },
            {
              "time": "2026-04-02",
              "value": 2.17
            },
            {
              "time": "2026-04-03",
              "value": 2.49
            },
            {
              "time": "2026-04-06",
              "value": 3.18
            },
            {
              "time": "2026-04-07",
              "value": 2.65
            },
            {
              "time": "2026-04-08",
              "value": 2.07
            },
            {
              "time": "2026-04-09",
              "value": 3.84
            }
          ]
        }
      ]
    }
  ]
}
Kestrel Instruments (KSTL), daily share price
Kestrel Instruments (KSTL), daily share priceTime chart with 65 points from 2026-01-07 to 2026-04-09 and 3 series (KSTL, 20-day average, Volume). 2 stacked panes on one time axis: Price (USD), Volume (million shares). KSTL: opened at 49.24 on 2026-01-07 and closed at 64.19 on 2026-04-09, a change of +14.95 (+30.4%); high 64.31 on 2026-04-09, low 48.93 on 2026-01-07. Price (USD) – Highest: 61.35 (20-day average in 2026-04-09). Lowest: 49.59 (20-day average in 2026-01-07). Volume (million shares) – Highest: 6.8 (Volume in 2026-02-17). Lowest: 1.1 (Volume in 2026-03-16). Gaps in time are closed up. The area below Volume is filled down to zero. Markers: Quarterly results at 2026-02-17, 64.44.455055606570Price (USD)024682026-01-122026-01-262026-02-092026-02-232026-03-092026-03-232026-04-06Volume (million shares)KSTL (hollow: rising, filled: falling)20-day averageVolume2026-01-07 – KSTL: open 49.24, high 51.09, low 48.93, close 50.202026-01-08 – KSTL: open 50.43, high 50.84, low 49.80, close 50.772026-01-09 – KSTL: open 51.14, high 51.15, low 50.33, close 50.812026-01-12 – KSTL: open 50.66, high 52.79, low 50.58, close 52.032026-01-13 – KSTL: open 52.52, high 53.08, low 51.61, close 52.302026-01-14 – KSTL: open 52.52, high 53.14, low 51.39, close 51.862026-01-15 – KSTL: open 51.92, high 52.41, low 51.82, close 52.102026-01-16 – KSTL: open 52.10, high 53.08, low 51.78, close 52.662026-01-20 – KSTL: open 52.51, high 53.06, low 52.50, close 52.852026-01-21 – KSTL: open 52.99, high 54.00, low 51.33, close 52.742026-01-22 – KSTL: open 52.88, high 53.28, low 52.64, close 53.142026-01-23 – KSTL: open 52.96, high 54.60, low 52.77, close 53.272026-01-26 – KSTL: open 53.19, high 53.22, low 51.65, close 53.152026-01-27 – KSTL: open 52.74, high 53.73, low 52.21, close 53.702026-01-28 – KSTL: open 53.10, high 54.69, low 52.91, close 54.492026-01-29 – KSTL: open 53.55, high 55.18, low 52.76, close 54.592026-01-30 – KSTL: open 54.65, high 55.30, low 53.27, close 53.352026-02-02 – KSTL: open 53.40, high 54.22, low 52.56, close 54.172026-02-03 – KSTL: open 55.13, high 55.76, low 54.42, close 54.922026-02-04 – KSTL: open 55.16, high 55.46, low 54.81, close 55.332026-02-05 – KSTL: open 55.55, high 56.08, low 53.68, close 54.242026-02-06 – KSTL: open 54.50, high 56.50, low 53.99, close 55.692026-02-09 – KSTL: open 55.96, high 56.83, low 54.49, close 54.982026-02-10 – KSTL: open 54.92, high 56.95, low 54.15, close 55.862026-02-11 – KSTL: open 56.00, high 56.23, low 54.68, close 55.512026-02-12 – KSTL: open 56.03, high 57.90, low 55.93, close 57.102026-02-13 – KSTL: open 57.14, high 58.18, low 56.36, close 58.112026-02-17 – KSTL: open 57.97, high 63.24, low 57.52, close 62.222026-02-18 – KSTL: open 62.22, high 62.68, low 61.68, close 61.722026-02-19 – KSTL: open 62.08, high 62.90, low 61.19, close 62.082026-02-20 – KSTL: open 61.42, high 62.86, low 60.34, close 62.262026-02-23 – KSTL: open 62.26, high 62.36, low 61.18, close 61.202026-02-24 – KSTL: open 61.83, high 62.11, low 61.54, close 62.092026-02-25 – KSTL: open 61.65, high 61.95, low 60.93, close 61.522026-02-26 – KSTL: open 61.87, high 62.31, low 61.38, close 61.382026-02-27 – KSTL: open 60.97, high 62.03, low 60.62, close 61.172026-03-02 – KSTL: open 60.85, high 61.28, low 59.55, close 60.392026-03-03 – KSTL: open 60.52, high 61.82, low 59.33, close 59.512026-03-04 – KSTL: open 59.76, high 59.92, low 56.84, close 58.072026-03-05 – KSTL: open 57.91, high 58.65, low 57.49, close 58.222026-03-06 – KSTL: open 58.68, high 59.39, low 58.44, close 59.032026-03-09 – KSTL: open 59.49, high 60.51, low 59.23, close 60.342026-03-10 – KSTL: open 60.51, high 61.84, low 58.47, close 58.982026-03-11 – KSTL: open 58.93, high 60.99, low 58.44, close 60.682026-03-12 – KSTL: open 60.78, high 61.24, low 60.73, close 60.752026-03-13 – KSTL: open 60.63, high 61.12, low 59.71, close 59.762026-03-16 – KSTL: open 60.70, high 61.32, low 59.64, close 59.992026-03-17 – KSTL: open 60.16, high 61.69, low 59.92, close 60.772026-03-18 – KSTL: open 60.09, high 61.17, low 59.91, close 60.612026-03-19 – KSTL: open 61.24, high 63.25, low 60.87, close 62.482026-03-20 – KSTL: open 62.34, high 63.09, low 61.18, close 62.562026-03-23 – KSTL: open 62.09, high 63.02, low 60.52, close 61.062026-03-24 – KSTL: open 60.76, high 61.68, low 59.57, close 61.542026-03-25 – KSTL: open 61.72, high 62.12, low 61.65, close 61.722026-03-26 – KSTL: open 61.94, high 62.44, low 61.76, close 62.332026-03-27 – KSTL: open 62.04, high 62.48, low 62.04, close 62.132026-03-30 – KSTL: open 62.13, high 62.42, low 62.06, close 62.332026-03-31 – KSTL: open 62.69, high 63.36, low 62.59, close 63.122026-04-01 – KSTL: open 62.46, high 62.49, low 61.13, close 61.642026-04-02 – KSTL: open 60.72, high 61.29, low 58.93, close 59.802026-04-03 – KSTL: open 59.53, high 59.81, low 58.07, close 58.352026-04-06 – KSTL: open 58.59, high 59.99, low 58.26, close 59.982026-04-07 – KSTL: open 60.34, high 61.86, low 60.25, close 61.262026-04-08 – KSTL: open 61.63, high 61.96, low 60.92, close 61.422026-04-09 – KSTL: open 61.85, high 64.31, low 61.80, close 64.192026-01-07 – 20-day average: 49.592026-01-08 – 20-day average: 49.732026-01-09 – 20-day average: 49.862026-01-12 – 20-day average: 50.022026-01-13 – 20-day average: 50.202026-01-14 – 20-day average: 50.352026-01-15 – 20-day average: 50.502026-01-16 – 20-day average: 50.722026-01-20 – 20-day average: 50.942026-01-21 – 20-day average: 51.182026-01-22 – 20-day average: 51.422026-01-23 – 20-day average: 51.642026-01-26 – 20-day average: 51.782026-01-27 – 20-day average: 51.942026-01-28 – 20-day average: 52.132026-01-29 – 20-day average: 52.242026-01-30 – 20-day average: 52.352026-02-02 – 20-day average: 52.482026-02-03 – 20-day average: 52.642026-02-04 – 20-day average: 52.922026-02-05 – 20-day average: 53.122026-02-06 – 20-day average: 53.372026-02-09 – 20-day average: 53.582026-02-10 – 20-day average: 53.772026-02-11 – 20-day average: 53.932026-02-12 – 20-day average: 54.192026-02-13 – 20-day average: 54.492026-02-17 – 20-day average: 54.972026-02-18 – 20-day average: 55.412026-02-19 – 20-day average: 55.882026-02-20 – 20-day average: 56.342026-02-23 – 20-day average: 56.732026-02-24 – 20-day average: 57.182026-02-25 – 20-day average: 57.572026-02-26 – 20-day average: 57.922026-02-27 – 20-day average: 58.252026-03-02 – 20-day average: 58.602026-03-03 – 20-day average: 58.862026-03-04 – 20-day average: 59.022026-03-05 – 20-day average: 59.172026-03-06 – 20-day average: 59.412026-03-09 – 20-day average: 59.642026-03-10 – 20-day average: 59.842026-03-11 – 20-day average: 60.082026-03-12 – 20-day average: 60.342026-03-13 – 20-day average: 60.472026-03-16 – 20-day average: 60.572026-03-17 – 20-day average: 60.502026-03-18 – 20-day average: 60.442026-03-19 – 20-day average: 60.462026-03-20 – 20-day average: 60.482026-03-23 – 20-day average: 60.472026-03-24 – 20-day average: 60.442026-03-25 – 20-day average: 60.452026-03-26 – 20-day average: 60.502026-03-27 – 20-day average: 60.552026-03-30 – 20-day average: 60.642026-03-31 – 20-day average: 60.822026-04-01 – 20-day average: 61.002026-04-02 – 20-day average: 61.082026-04-03 – 20-day average: 61.052026-04-06 – 20-day average: 61.032026-04-07 – 20-day average: 61.142026-04-08 – 20-day average: 61.182026-04-09 – 20-day average: 61.35Quarterly results: 2026-02-17, 64.44Quarterly results2026-01-07 – Volume: 2.32026-01-08 – Volume: 1.92026-01-09 – Volume: 2.62026-01-12 – Volume: 2.42026-01-13 – Volume: 1.62026-01-14 – Volume: 2.42026-01-15 – Volume: 2.32026-01-16 – Volume: 3.12026-01-20 – Volume: 2.62026-01-21 – Volume: 1.72026-01-22 – Volume: 2.52026-01-23 – Volume: 1.92026-01-26 – Volume: 1.92026-01-27 – Volume: 2.72026-01-28 – Volume: 2.72026-01-29 – Volume: 2.62026-01-30 – Volume: 2.52026-02-02 – Volume: 2.82026-02-03 – Volume: 2.02026-02-04 – Volume: 1.42026-02-05 – Volume: 1.82026-02-06 – Volume: 2.42026-02-09 – Volume: 3.12026-02-10 – Volume: 2.32026-02-11 – Volume: 1.82026-02-12 – Volume: 2.02026-02-13 – Volume: 2.22026-02-17 – Volume: 6.82026-02-18 – Volume: 4.02026-02-19 – Volume: 1.82026-02-20 – Volume: 2.82026-02-23 – Volume: 2.12026-02-24 – Volume: 2.62026-02-25 – Volume: 1.42026-02-26 – Volume: 2.62026-02-27 – Volume: 2.52026-03-02 – Volume: 2.22026-03-03 – Volume: 2.12026-03-04 – Volume: 2.12026-03-05 – Volume: 2.52026-03-06 – Volume: 1.22026-03-09 – Volume: 3.22026-03-10 – Volume: 2.82026-03-11 – Volume: 2.12026-03-12 – Volume: 2.02026-03-13 – Volume: 1.92026-03-16 – Volume: 1.12026-03-17 – Volume: 2.22026-03-18 – Volume: 1.92026-03-19 – Volume: 2.52026-03-20 – Volume: 2.62026-03-23 – Volume: 3.22026-03-24 – Volume: 1.92026-03-25 – Volume: 2.32026-03-26 – Volume: 2.52026-03-27 – Volume: 2.12026-03-30 – Volume: 1.62026-03-31 – Volume: 2.42026-04-01 – Volume: 2.62026-04-02 – Volume: 2.22026-04-03 – Volume: 2.52026-04-06 – Volume: 3.22026-04-07 – Volume: 2.62026-04-08 – Volume: 2.12026-04-09 – Volume: 3.8Trading day

Source: Illustrative values, chartlet

Show chart data
Data for Kestrel Instruments (KSTL), daily share price
TimeKSTL (open)KSTL (high)KSTL (low)KSTL (close)20-day averageVolume
2026-01-0749.2451.0948.9350.2049.592.3
2026-01-0850.4350.8449.8050.7749.731.9
2026-01-0951.1451.1550.3350.8149.862.6
2026-01-1250.6652.7950.5852.0350.022.4
2026-01-1352.5253.0851.6152.3050.201.6
2026-01-1452.5253.1451.3951.8650.352.4
2026-01-1551.9252.4151.8252.1050.502.3
2026-01-1652.1053.0851.7852.6650.723.1
2026-01-2052.5153.0652.5052.8550.942.6
2026-01-2152.9954.0051.3352.7451.181.7
2026-01-2252.8853.2852.6453.1451.422.5
2026-01-2352.9654.6052.7753.2751.641.9
2026-01-2653.1953.2251.6553.1551.781.9
2026-01-2752.7453.7352.2153.7051.942.7
2026-01-2853.1054.6952.9154.4952.132.7
2026-01-2953.5555.1852.7654.5952.242.6
2026-01-3054.6555.3053.2753.3552.352.5
2026-02-0253.4054.2252.5654.1752.482.8
2026-02-0355.1355.7654.4254.9252.642.0
2026-02-0455.1655.4654.8155.3352.921.4
2026-02-0555.5556.0853.6854.2453.121.8
2026-02-0654.5056.5053.9955.6953.372.4
2026-02-0955.9656.8354.4954.9853.583.1
2026-02-1054.9256.9554.1555.8653.772.3
2026-02-1156.0056.2354.6855.5153.931.8
2026-02-1256.0357.9055.9357.1054.192.0
2026-02-1357.1458.1856.3658.1154.492.2
2026-02-1757.9763.2457.5262.2254.976.8
2026-02-1862.2262.6861.6861.7255.414.0
2026-02-1962.0862.9061.1962.0855.881.8
2026-02-2061.4262.8660.3462.2656.342.8
2026-02-2362.2662.3661.1861.2056.732.1
2026-02-2461.8362.1161.5462.0957.182.6
2026-02-2561.6561.9560.9361.5257.571.4
2026-02-2661.8762.3161.3861.3857.922.6
2026-02-2760.9762.0360.6261.1758.252.5
2026-03-0260.8561.2859.5560.3958.602.2
2026-03-0360.5261.8259.3359.5158.862.1
2026-03-0459.7659.9256.8458.0759.022.1
2026-03-0557.9158.6557.4958.2259.172.5
2026-03-0658.6859.3958.4459.0359.411.2
2026-03-0959.4960.5159.2360.3459.643.2
2026-03-1060.5161.8458.4758.9859.842.8
2026-03-1158.9360.9958.4460.6860.082.1
2026-03-1260.7861.2460.7360.7560.342.0
2026-03-1360.6361.1259.7159.7660.471.9
2026-03-1660.7061.3259.6459.9960.571.1
2026-03-1760.1661.6959.9260.7760.502.2
2026-03-1860.0961.1759.9160.6160.441.9
2026-03-1961.2463.2560.8762.4860.462.5
2026-03-2062.3463.0961.1862.5660.482.6
2026-03-2362.0963.0260.5261.0660.473.2
2026-03-2460.7661.6859.5761.5460.441.9
2026-03-2561.7262.1261.6561.7260.452.3
2026-03-2661.9462.4461.7662.3360.502.5
2026-03-2762.0462.4862.0462.1360.552.1
2026-03-3062.1362.4262.0662.3360.641.6
2026-03-3162.6963.3662.5963.1260.822.4
2026-04-0162.4662.4961.1361.6461.002.6
2026-04-0260.7261.2958.9359.8061.082.2
2026-04-0359.5359.8158.0758.3561.052.5
2026-04-0658.5959.9958.2659.9861.033.2
2026-04-0760.3461.8660.2561.2661.142.6
2026-04-0861.6361.9660.9261.4261.182.1
2026-04-0961.8564.3161.8064.1961.353.8
  • Candlesticks with stacked panes
  • Show prices and trading volume on one time axis

Deep-sea oxygen isotopes since the end of the dinosaurs

examples/deep-sea-isotopes.jsonDetail: Deep-sea oxygen isotopes since the end of the dinosaurs →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Deep-sea oxygen isotopes since the end of the dinosaurs",
  "source": "Sample data, simplified",
  "timeAxis": {
    "kind": "number",
    "reverse": true,
    "title": "Million years ago"
  },
  "panes": [
    {
      "valueAxis": {
        "title": "δ18O (‰), warmer up",
        "reverse": true,
        "decimals": 1
      },
      "layers": [
        {
          "mark": "line",
          "name": "δ18O",
          "points": [
            {
              "time": 0,
              "value": 3.3
            },
            {
              "time": 2.6,
              "value": 3.5
            },
            {
              "time": 5,
              "value": 2.8
            },
            {
              "time": 15,
              "value": 1.5
            },
            {
              "time": 23,
              "value": 2
            },
            {
              "time": 34,
              "value": 1.5
            },
            {
              "time": 50,
              "value": 0
            },
            {
              "time": 56,
              "value": -0.5
            },
            {
              "time": 66,
              "value": 0.5
            }
          ]
        },
        {
          "mark": "band",
          "label": "Ice sheets on Antarctica",
          "from": 0,
          "to": 34
        }
      ]
    }
  ]
}
Deep-sea oxygen isotopes since the end of the dinosaurs
Deep-sea oxygen isotopes since the end of the dinosaursLine chart with 9 points from 0.0 to 66.0. Highest: 3.5 (2.6). Lowest: −0.5 (56.0). Zones: Ice sheets on Antarctica, 0.0 to 34.0.−1012340102030405060δ18O (‰), warmer upIce sheets on Antarctica: 0.0 to 34.00.0 – δ18O: 3.33.32.6 – δ18O: 3.55.0 – δ18O: 2.815.0 – δ18O: 1.523.0 – δ18O: 2.034.0 – δ18O: 1.550.0 – δ18O: 0.056.0 – δ18O: −0.566.0 – δ18O: 0.5Ice sheets on AntarcticaMillion years ago

Source: Sample data, simplified

Show chart data
Data for Deep-sea oxygen isotopes since the end of the dinosaurs
Million years agoδ18O
0.03.3
2.63.5
5.02.8
15.01.5
23.02.0
34.01.5
50.00.0
56.0−0.5
66.00.5
  • Time series (numeric axis)
  • Show deep time or a profile

Support tickets by topic

examples/topic-streams.jsonDetail: Support tickets by topic →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Support tickets by topic",
  "source": "Illustrative fortnightly averages of tickets per week",
  "showValues": false,
  "width": 760,
  "height": 400,
  "panes": [
    {
      "valueAxis": {
        "title": "Tickets per week"
      },
      "stack": "stream",
      "layers": [
        {
          "mark": "area",
          "name": "Billing",
          "points": [
            {
              "time": "2026-01-05",
              "value": 48
            },
            {
              "time": "2026-01-19",
              "value": 51
            },
            {
              "time": "2026-02-02",
              "value": 54
            },
            {
              "time": "2026-02-16",
              "value": 56
            },
            {
              "time": "2026-03-02",
              "value": 58
            },
            {
              "time": "2026-03-16",
              "value": 59
            },
            {
              "time": "2026-03-30",
              "value": 59
            },
            {
              "time": "2026-04-13",
              "value": 59
            },
            {
              "time": "2026-04-27",
              "value": 58
            },
            {
              "time": "2026-05-11",
              "value": 56
            },
            {
              "time": "2026-05-25",
              "value": 53
            },
            {
              "time": "2026-06-08",
              "value": 50
            },
            {
              "time": "2026-06-22",
              "value": 47
            },
            {
              "time": "2026-07-06",
              "value": 43
            },
            {
              "time": "2026-07-20",
              "value": 39
            },
            {
              "time": "2026-08-03",
              "value": 35
            },
            {
              "time": "2026-08-17",
              "value": 32
            },
            {
              "time": "2026-08-31",
              "value": 30
            },
            {
              "time": "2026-09-14",
              "value": 28
            },
            {
              "time": "2026-09-28",
              "value": 27
            },
            {
              "time": "2026-10-12",
              "value": 26
            },
            {
              "time": "2026-10-26",
              "value": 27
            },
            {
              "time": "2026-11-09",
              "value": 28
            },
            {
              "time": "2026-11-23",
              "value": 30
            },
            {
              "time": "2026-12-07",
              "value": 32
            },
            {
              "time": "2026-12-21",
              "value": 35
            }
          ]
        },
        {
          "mark": "area",
          "name": "Login",
          "points": [
            {
              "time": "2026-01-05",
              "value": 38
            },
            {
              "time": "2026-01-19",
              "value": 38
            },
            {
              "time": "2026-02-02",
              "value": 38
            },
            {
              "time": "2026-02-16",
              "value": 37
            },
            {
              "time": "2026-03-02",
              "value": 37
            },
            {
              "time": "2026-03-16",
              "value": 35
            },
            {
              "time": "2026-03-30",
              "value": 34
            },
            {
              "time": "2026-04-13",
              "value": 32
            },
            {
              "time": "2026-04-27",
              "value": 30
            },
            {
              "time": "2026-05-11",
              "value": 29
            },
            {
              "time": "2026-05-25",
              "value": 28
            },
            {
              "time": "2026-06-08",
              "value": 27
            },
            {
              "time": "2026-06-22",
              "value": 26
            },
            {
              "time": "2026-07-06",
              "value": 26
            },
            {
              "time": "2026-07-20",
              "value": 26
            },
            {
              "time": "2026-08-03",
              "value": 27
            },
            {
              "time": "2026-08-17",
              "value": 28
            },
            {
              "time": "2026-08-31",
              "value": 30
            },
            {
              "time": "2026-09-14",
              "value": 32
            },
            {
              "time": "2026-09-28",
              "value": 34
            },
            {
              "time": "2026-10-12",
              "value": 36
            },
            {
              "time": "2026-10-26",
              "value": 38
            },
            {
              "time": "2026-11-09",
              "value": 40
            },
            {
              "time": "2026-11-23",
              "value": 42
            },
            {
              "time": "2026-12-07",
              "value": 44
            },
            {
              "time": "2026-12-21",
              "value": 45
            }
          ]
        },
        {
          "mark": "area",
          "name": "Mobile app",
          "points": [
            {
              "time": "2026-01-05",
              "value": 15
            },
            {
              "time": "2026-01-19",
              "value": 15
            },
            {
              "time": "2026-02-02",
              "value": 15
            },
            {
              "time": "2026-02-16",
              "value": 15
            },
            {
              "time": "2026-03-02",
              "value": 16
            },
            {
              "time": "2026-03-16",
              "value": 16
            },
            {
              "time": "2026-03-30",
              "value": 17
            },
            {
              "time": "2026-04-13",
              "value": 18
            },
            {
              "time": "2026-04-27",
              "value": 19
            },
            {
              "time": "2026-05-11",
              "value": 21
            },
            {
              "time": "2026-05-25",
              "value": 23
            },
            {
              "time": "2026-06-08",
              "value": 25
            },
            {
              "time": "2026-06-22",
              "value": 28
            },
            {
              "time": "2026-07-06",
              "value": 31
            },
            {
              "time": "2026-07-20",
              "value": 34
            },
            {
              "time": "2026-08-03",
              "value": 36
            },
            {
              "time": "2026-08-17",
              "value": 39
            },
            {
              "time": "2026-08-31",
              "value": 42
            },
            {
              "time": "2026-09-14",
              "value": 44
            },
            {
              "time": "2026-09-28",
              "value": 46
            },
            {
              "time": "2026-10-12",
              "value": 48
            },
            {
              "time": "2026-10-26",
              "value": 49
            },
            {
              "time": "2026-11-09",
              "value": 50
            },
            {
              "time": "2026-11-23",
              "value": 51
            },
            {
              "time": "2026-12-07",
              "value": 52
            },
            {
              "time": "2026-12-21",
              "value": 52
            }
          ]
        },
        {
          "mark": "area",
          "name": "Exports",
          "points": [
            {
              "time": "2026-01-05",
              "value": 15
            },
            {
              "time": "2026-01-19",
              "value": 14
            },
            {
              "time": "2026-02-02",
              "value": 13
            },
            {
              "time": "2026-02-16",
              "value": 14
            },
            {
              "time": "2026-03-02",
              "value": 15
            },
            {
              "time": "2026-03-16",
              "value": 17
            },
            {
              "time": "2026-03-30",
              "value": 19
            },
            {
              "time": "2026-04-13",
              "value": 21
            },
            {
              "time": "2026-04-27",
              "value": 24
            },
            {
              "time": "2026-05-11",
              "value": 26
            },
            {
              "time": "2026-05-25",
              "value": 29
            },
            {
              "time": "2026-06-08",
              "value": 31
            },
            {
              "time": "2026-06-22",
              "value": 32
            },
            {
              "time": "2026-07-06",
              "value": 33
            },
            {
              "time": "2026-07-20",
              "value": 34
            },
            {
              "time": "2026-08-03",
              "value": 33
            },
            {
              "time": "2026-08-17",
              "value": 32
            },
            {
              "time": "2026-08-31",
              "value": 31
            },
            {
              "time": "2026-09-14",
              "value": 29
            },
            {
              "time": "2026-09-28",
              "value": 26
            },
            {
              "time": "2026-10-12",
              "value": 23
            },
            {
              "time": "2026-10-26",
              "value": 20
            },
            {
              "time": "2026-11-09",
              "value": 17
            },
            {
              "time": "2026-11-23",
              "value": 14
            },
            {
              "time": "2026-12-07",
              "value": 11
            },
            {
              "time": "2026-12-21",
              "value": 9
            }
          ]
        }
      ]
    }
  ],
  "mobile": {
    "width": 380,
    "height": 440
  }
}
Support tickets by topic
Support tickets by topicTime chart with 26 points from 2026-01-05 to 2026-12-21 and 4 series (Billing, Login, Mobile app, Exports). Highest: 59 (Billing in 2026-03-16, Billing in 2026-03-30, Billing in 2026-04-13). Lowest: 9 (Exports in 2026-12-21). Streamgraph, from the bottom up: Billing, Login, Mobile app, Exports; the areas are centered on a moving baseline, so thickness shows the value and position does not; the scale bar marks one step.502026-042026-072026-10Tickets per week2026-01-05 – Billing: 482026-01-19 – Billing: 512026-02-02 – Billing: 542026-02-16 – Billing: 562026-03-02 – Billing: 582026-03-16 – Billing: 592026-03-30 – Billing: 592026-04-13 – Billing: 592026-04-27 – Billing: 582026-05-11 – Billing: 562026-05-25 – Billing: 532026-06-08 – Billing: 502026-06-22 – Billing: 472026-07-06 – Billing: 432026-07-20 – Billing: 392026-08-03 – Billing: 352026-08-17 – Billing: 322026-08-31 – Billing: 302026-09-14 – Billing: 282026-09-28 – Billing: 272026-10-12 – Billing: 262026-10-26 – Billing: 272026-11-09 – Billing: 282026-11-23 – Billing: 302026-12-07 – Billing: 322026-12-21 – Billing: 352026-01-05 – Login: 382026-01-19 – Login: 382026-02-02 – Login: 382026-02-16 – Login: 372026-03-02 – Login: 372026-03-16 – Login: 352026-03-30 – Login: 342026-04-13 – Login: 322026-04-27 – Login: 302026-05-11 – Login: 292026-05-25 – Login: 282026-06-08 – Login: 272026-06-22 – Login: 262026-07-06 – Login: 262026-07-20 – Login: 262026-08-03 – Login: 272026-08-17 – Login: 282026-08-31 – Login: 302026-09-14 – Login: 322026-09-28 – Login: 342026-10-12 – Login: 362026-10-26 – Login: 382026-11-09 – Login: 402026-11-23 – Login: 422026-12-07 – Login: 442026-12-21 – Login: 452026-01-05 – Mobile app: 152026-01-19 – Mobile app: 152026-02-02 – Mobile app: 152026-02-16 – Mobile app: 152026-03-02 – Mobile app: 162026-03-16 – Mobile app: 162026-03-30 – Mobile app: 172026-04-13 – Mobile app: 182026-04-27 – Mobile app: 192026-05-11 – Mobile app: 212026-05-25 – Mobile app: 232026-06-08 – Mobile app: 252026-06-22 – Mobile app: 282026-07-06 – Mobile app: 312026-07-20 – Mobile app: 342026-08-03 – Mobile app: 362026-08-17 – Mobile app: 392026-08-31 – Mobile app: 422026-09-14 – Mobile app: 442026-09-28 – Mobile app: 462026-10-12 – Mobile app: 482026-10-26 – Mobile app: 492026-11-09 – Mobile app: 502026-11-23 – Mobile app: 512026-12-07 – Mobile app: 522026-12-21 – Mobile app: 522026-01-05 – Exports: 152026-01-19 – Exports: 142026-02-02 – Exports: 132026-02-16 – Exports: 142026-03-02 – Exports: 152026-03-16 – Exports: 172026-03-30 – Exports: 192026-04-13 – Exports: 212026-04-27 – Exports: 242026-05-11 – Exports: 262026-05-25 – Exports: 292026-06-08 – Exports: 312026-06-22 – Exports: 322026-07-06 – Exports: 332026-07-20 – Exports: 342026-08-03 – Exports: 332026-08-17 – Exports: 322026-08-31 – Exports: 312026-09-14 – Exports: 292026-09-28 – Exports: 262026-10-12 – Exports: 232026-10-26 – Exports: 202026-11-09 – Exports: 172026-11-23 – Exports: 142026-12-07 – Exports: 112026-12-21 – Exports: 9ExportsMobile appLoginBilling
Support tickets by topicTime chart with 26 points from 2026-01-05 to 2026-12-21 and 4 series (Billing, Login, Mobile app, Exports). Highest: 59 (Billing in 2026-03-16, Billing in 2026-03-30, Billing in 2026-04-13). Lowest: 9 (Exports in 2026-12-21). Streamgraph, from the bottom up: Billing, Login, Mobile app, Exports; the areas are centered on a moving baseline, so thickness shows the value and position does not; the scale bar marks one step.502026-07Tickets per week2026-01-05 – Billing: 482026-01-19 – Billing: 512026-02-02 – Billing: 542026-02-16 – Billing: 562026-03-02 – Billing: 582026-03-16 – Billing: 592026-03-30 – Billing: 592026-04-13 – Billing: 592026-04-27 – Billing: 582026-05-11 – Billing: 562026-05-25 – Billing: 532026-06-08 – Billing: 502026-06-22 – Billing: 472026-07-06 – Billing: 432026-07-20 – Billing: 392026-08-03 – Billing: 352026-08-17 – Billing: 322026-08-31 – Billing: 302026-09-14 – Billing: 282026-09-28 – Billing: 272026-10-12 – Billing: 262026-10-26 – Billing: 272026-11-09 – Billing: 282026-11-23 – Billing: 302026-12-07 – Billing: 322026-12-21 – Billing: 352026-01-05 – Login: 382026-01-19 – Login: 382026-02-02 – Login: 382026-02-16 – Login: 372026-03-02 – Login: 372026-03-16 – Login: 352026-03-30 – Login: 342026-04-13 – Login: 322026-04-27 – Login: 302026-05-11 – Login: 292026-05-25 – Login: 282026-06-08 – Login: 272026-06-22 – Login: 262026-07-06 – Login: 262026-07-20 – Login: 262026-08-03 – Login: 272026-08-17 – Login: 282026-08-31 – Login: 302026-09-14 – Login: 322026-09-28 – Login: 342026-10-12 – Login: 362026-10-26 – Login: 382026-11-09 – Login: 402026-11-23 – Login: 422026-12-07 – Login: 442026-12-21 – Login: 452026-01-05 – Mobile app: 152026-01-19 – Mobile app: 152026-02-02 – Mobile app: 152026-02-16 – Mobile app: 152026-03-02 – Mobile app: 162026-03-16 – Mobile app: 162026-03-30 – Mobile app: 172026-04-13 – Mobile app: 182026-04-27 – Mobile app: 192026-05-11 – Mobile app: 212026-05-25 – Mobile app: 232026-06-08 – Mobile app: 252026-06-22 – Mobile app: 282026-07-06 – Mobile app: 312026-07-20 – Mobile app: 342026-08-03 – Mobile app: 362026-08-17 – Mobile app: 392026-08-31 – Mobile app: 422026-09-14 – Mobile app: 442026-09-28 – Mobile app: 462026-10-12 – Mobile app: 482026-10-26 – Mobile app: 492026-11-09 – Mobile app: 502026-11-23 – Mobile app: 512026-12-07 – Mobile app: 522026-12-21 – Mobile app: 522026-01-05 – Exports: 152026-01-19 – Exports: 142026-02-02 – Exports: 132026-02-16 – Exports: 142026-03-02 – Exports: 152026-03-16 – Exports: 172026-03-30 – Exports: 192026-04-13 – Exports: 212026-04-27 – Exports: 242026-05-11 – Exports: 262026-05-25 – Exports: 292026-06-08 – Exports: 312026-06-22 – Exports: 322026-07-06 – Exports: 332026-07-20 – Exports: 342026-08-03 – Exports: 332026-08-17 – Exports: 322026-08-31 – Exports: 312026-09-14 – Exports: 292026-09-28 – Exports: 262026-10-12 – Exports: 232026-10-26 – Exports: 202026-11-09 – Exports: 172026-11-23 – Exports: 142026-12-07 – Exports: 112026-12-21 – Exports: 9ExportsMobile appLoginBilling

Source: Illustrative fortnightly averages of tickets per week

Show chart data
Data for Support tickets by topic
TimeBillingLoginMobile appExports
2026-01-0548381515
2026-01-1951381514
2026-02-0254381513
2026-02-1656371514
2026-03-0258371615
2026-03-1659351617
2026-03-3059341719
2026-04-1359321821
2026-04-2758301924
2026-05-1156292126
2026-05-2553282329
2026-06-0850272531
2026-06-2247262832
2026-07-0643263133
2026-07-2039263434
2026-08-0335273633
2026-08-1732283932
2026-08-3130304231
2026-09-1428324429
2026-09-2827344626
2026-10-1226364823
2026-10-2627384920
2026-11-0928405017
2026-11-2330425114
2026-12-0732445211
2026-12-213545529
  • Streamgraph
  • Show how the mix of a total shifts over time

Small multiples

Emission pathways by sector

examples/emission-pathways.jsonDetail: Emission pathways by sector →
{
  "schemaVersion": 1,
  "type": "multiples",
  "title": "Emission pathways by sector",
  "source": "Illustrative values, chartlet",
  "height": 560,
  "columns": 2,
  "valueAxis": {
    "title": "Gt CO₂ per year"
  },
  "timeAxis": {
    "title": "Year"
  },
  "panes": [
    {
      "title": "Energy",
      "layers": [
        {
          "mark": "line",
          "name": "History",
          "points": [
            {
              "time": "1990",
              "value": 13.7
            },
            {
              "time": "1993",
              "value": 14.6
            },
            {
              "time": "1996",
              "value": 14.67
            },
            {
              "time": "1999",
              "value": 14.91
            },
            {
              "time": "2002",
              "value": 15.73
            },
            {
              "time": "2005",
              "value": 15.54
            },
            {
              "time": "2008",
              "value": 16.24
            },
            {
              "time": "2011",
              "value": 16.66
            },
            {
              "time": "2014",
              "value": 16.59
            },
            {
              "time": "2017",
              "value": 17.51
            },
            {
              "time": "2020",
              "value": 17.49
            },
            {
              "time": "2023",
              "value": 17.85
            }
          ]
        },
        {
          "mark": "line",
          "name": "Low pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 17.96,
              "lower": 17.76,
              "upper": 18.16
            },
            {
              "time": "2040",
              "value": 14.47,
              "lower": 14.07,
              "upper": 14.87
            },
            {
              "time": "2055",
              "value": 10.98,
              "lower": 10.38,
              "upper": 11.58
            },
            {
              "time": "2070",
              "value": 7.48,
              "lower": 6.68,
              "upper": 8.28
            },
            {
              "time": "2085",
              "value": 3.99,
              "lower": 2.99,
              "upper": 4.99
            },
            {
              "time": "2100",
              "value": 0.5,
              "lower": -0.7,
              "upper": 1.7
            }
          ]
        },
        {
          "mark": "line",
          "name": "High pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 17.96,
              "lower": 17.76,
              "upper": 18.16
            },
            {
              "time": "2040",
              "value": 18.17,
              "lower": 17.57,
              "upper": 18.77
            },
            {
              "time": "2055",
              "value": 18.38,
              "lower": 17.38,
              "upper": 19.38
            },
            {
              "time": "2070",
              "value": 18.58,
              "lower": 17.18,
              "upper": 19.98
            },
            {
              "time": "2085",
              "value": 18.79,
              "lower": 16.99,
              "upper": 20.59
            },
            {
              "time": "2100",
              "value": 19,
              "lower": 16.8,
              "upper": 21.2
            }
          ]
        },
        {
          "mark": "annotation",
          "value": 0,
          "label": "Net zero"
        }
      ]
    },
    {
      "title": "Industry",
      "layers": [
        {
          "mark": "line",
          "name": "History",
          "points": [
            {
              "time": "1990",
              "value": 5.7
            },
            {
              "time": "1993",
              "value": 6.39
            },
            {
              "time": "1996",
              "value": 6.25
            },
            {
              "time": "1999",
              "value": 6.28
            },
            {
              "time": "2002",
              "value": 6.89
            },
            {
              "time": "2005",
              "value": 6.49
            },
            {
              "time": "2008",
              "value": 6.98
            },
            {
              "time": "2011",
              "value": 7.19
            },
            {
              "time": "2014",
              "value": 6.91
            },
            {
              "time": "2017",
              "value": 7.62
            },
            {
              "time": "2020",
              "value": 7.39
            },
            {
              "time": "2023",
              "value": 7.54
            }
          ]
        },
        {
          "mark": "line",
          "name": "Low pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 7.65,
              "lower": 7.45,
              "upper": 7.85
            },
            {
              "time": "2040",
              "value": 6.32,
              "lower": 5.92,
              "upper": 6.72
            },
            {
              "time": "2055",
              "value": 4.99,
              "lower": 4.39,
              "upper": 5.59
            },
            {
              "time": "2070",
              "value": 3.66,
              "lower": 2.86,
              "upper": 4.46
            },
            {
              "time": "2085",
              "value": 2.33,
              "lower": 1.33,
              "upper": 3.33
            },
            {
              "time": "2100",
              "value": 1,
              "lower": -0.2,
              "upper": 2.2
            }
          ]
        },
        {
          "mark": "line",
          "name": "High pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 7.65,
              "lower": 7.45,
              "upper": 7.85
            },
            {
              "time": "2040",
              "value": 7.72,
              "lower": 7.12,
              "upper": 8.32
            },
            {
              "time": "2055",
              "value": 7.79,
              "lower": 6.79,
              "upper": 8.79
            },
            {
              "time": "2070",
              "value": 7.86,
              "lower": 6.46,
              "upper": 9.26
            },
            {
              "time": "2085",
              "value": 7.93,
              "lower": 6.13,
              "upper": 9.73
            },
            {
              "time": "2100",
              "value": 8,
              "lower": 5.8,
              "upper": 10.2
            }
          ]
        },
        {
          "mark": "annotation",
          "value": 0,
          "label": "Net zero"
        }
      ]
    },
    {
      "title": "Transport",
      "layers": [
        {
          "mark": "line",
          "name": "History",
          "points": [
            {
              "time": "1990",
              "value": 3.7
            },
            {
              "time": "1993",
              "value": 4.42
            },
            {
              "time": "1996",
              "value": 4.31
            },
            {
              "time": "1999",
              "value": 4.37
            },
            {
              "time": "2002",
              "value": 5.01
            },
            {
              "time": "2005",
              "value": 4.64
            },
            {
              "time": "2008",
              "value": 5.16
            },
            {
              "time": "2011",
              "value": 5.4
            },
            {
              "time": "2014",
              "value": 5.15
            },
            {
              "time": "2017",
              "value": 5.89
            },
            {
              "time": "2020",
              "value": 5.69
            },
            {
              "time": "2023",
              "value": 5.87
            }
          ]
        },
        {
          "mark": "line",
          "name": "Low pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 5.98,
              "lower": 5.78,
              "upper": 6.18
            },
            {
              "time": "2040",
              "value": 4.84,
              "lower": 4.44,
              "upper": 5.24
            },
            {
              "time": "2055",
              "value": 3.71,
              "lower": 3.11,
              "upper": 4.31
            },
            {
              "time": "2070",
              "value": 2.57,
              "lower": 1.77,
              "upper": 3.37
            },
            {
              "time": "2085",
              "value": 1.44,
              "lower": 0.44,
              "upper": 2.44
            },
            {
              "time": "2100",
              "value": 0.3,
              "lower": -0.9,
              "upper": 1.5
            }
          ]
        },
        {
          "mark": "line",
          "name": "High pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 5.98,
              "lower": 5.78,
              "upper": 6.18
            },
            {
              "time": "2040",
              "value": 6.18,
              "lower": 5.58,
              "upper": 6.78
            },
            {
              "time": "2055",
              "value": 6.39,
              "lower": 5.39,
              "upper": 7.39
            },
            {
              "time": "2070",
              "value": 6.59,
              "lower": 5.19,
              "upper": 7.99
            },
            {
              "time": "2085",
              "value": 6.8,
              "lower": 5,
              "upper": 8.6
            },
            {
              "time": "2100",
              "value": 7,
              "lower": 4.8,
              "upper": 9.2
            }
          ]
        },
        {
          "mark": "annotation",
          "value": 0,
          "label": "Net zero"
        }
      ]
    },
    {
      "title": "Buildings",
      "layers": [
        {
          "mark": "line",
          "name": "History",
          "points": [
            {
              "time": "1990",
              "value": 2.7
            },
            {
              "time": "1993",
              "value": 3.3
            },
            {
              "time": "1996",
              "value": 3.07
            },
            {
              "time": "1999",
              "value": 3.01
            },
            {
              "time": "2002",
              "value": 3.53
            },
            {
              "time": "2005",
              "value": 3.04
            },
            {
              "time": "2008",
              "value": 3.44
            },
            {
              "time": "2011",
              "value": 3.56
            },
            {
              "time": "2014",
              "value": 3.19
            },
            {
              "time": "2017",
              "value": 3.81
            },
            {
              "time": "2020",
              "value": 3.49
            },
            {
              "time": "2023",
              "value": 3.55
            }
          ]
        },
        {
          "mark": "line",
          "name": "Low pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 3.66,
              "lower": 3.46,
              "upper": 3.86
            },
            {
              "time": "2040",
              "value": 2.97,
              "lower": 2.57,
              "upper": 3.37
            },
            {
              "time": "2055",
              "value": 2.28,
              "lower": 1.68,
              "upper": 2.88
            },
            {
              "time": "2070",
              "value": 1.58,
              "lower": 0.78,
              "upper": 2.38
            },
            {
              "time": "2085",
              "value": 0.89,
              "lower": -0.11,
              "upper": 1.89
            },
            {
              "time": "2100",
              "value": 0.2,
              "lower": -1,
              "upper": 1.4
            }
          ]
        },
        {
          "mark": "line",
          "name": "High pathway",
          "modeled": true,
          "points": [
            {
              "time": "2025",
              "value": 3.66,
              "lower": 3.46,
              "upper": 3.86
            },
            {
              "time": "2040",
              "value": 3.63,
              "lower": 3.03,
              "upper": 4.23
            },
            {
              "time": "2055",
              "value": 3.6,
              "lower": 2.6,
              "upper": 4.6
            },
            {
              "time": "2070",
              "value": 3.56,
              "lower": 2.16,
              "upper": 4.96
            },
            {
              "time": "2085",
              "value": 3.53,
              "lower": 1.73,
              "upper": 5.33
            },
            {
              "time": "2100",
              "value": 3.5,
              "lower": 1.3,
              "upper": 5.7
            }
          ]
        },
        {
          "mark": "annotation",
          "value": 0,
          "label": "Net zero"
        }
      ]
    }
  ]
}
Emission pathways by sector
Emission pathways by sectorTime chart in 4 panels (Energy, Industry, Transport, Buildings) with a shared value axis, each from 1990 to 2100, showing History, Low pathway (modelled), High pathway (modelled). Highest: 19 (Energy · High pathway in 2100). Lowest: 0.2 (Buildings · Low pathway in 2100). Lines have a shaded band from their lower to their upper bound, hatched where modelled; the data table lists both. Reference lines: Net zero at 0; Net zero at 0; Net zero at 0; Net zero at 0.HistoryLow pathway (modelled)High pathway (modelled)Gt CO₂ per yearEnergy−5051015202520002025205020752100Net zero: 01990 – Energy · History: 13.71993 – Energy · History: 14.61996 – Energy · History: 14.671999 – Energy · History: 14.912002 – Energy · History: 15.732005 – Energy · History: 15.542008 – Energy · History: 16.242011 – Energy · History: 16.662014 – Energy · History: 16.592017 – Energy · History: 17.512020 – Energy · History: 17.492023 – Energy · History: 17.852025 – Energy · Low pathway: 17.96 (range 17.76 to 18.16)2040 – Energy · Low pathway: 14.47 (range 14.07 to 14.87)2055 – Energy · Low pathway: 10.98 (range 10.38 to 11.58)2070 – Energy · Low pathway: 7.48 (range 6.68 to 8.28)2085 – Energy · Low pathway: 3.99 (range 2.99 to 4.99)2100 – Energy · Low pathway: 0.5 (range −0.7 to 1.7)2025 – Energy · High pathway: 17.96 (range 17.76 to 18.16)2040 – Energy · High pathway: 18.17 (range 17.57 to 18.77)2055 – Energy · High pathway: 18.38 (range 17.38 to 19.38)2070 – Energy · High pathway: 18.58 (range 17.18 to 19.98)2085 – Energy · High pathway: 18.79 (range 16.99 to 20.59)2100 – Energy · High pathway: 19 (range 16.8 to 21.2)Net zeroIndustry−5051015202520002025205020752100Net zero: 01990 – Industry · History: 5.71993 – Industry · History: 6.391996 – Industry · History: 6.251999 – Industry · History: 6.282002 – Industry · History: 6.892005 – Industry · History: 6.492008 – Industry · History: 6.982011 – Industry · History: 7.192014 – Industry · History: 6.912017 – Industry · History: 7.622020 – Industry · History: 7.392023 – Industry · History: 7.542025 – Industry · Low pathway: 7.65 (range 7.45 to 7.85)2040 – Industry · Low pathway: 6.32 (range 5.92 to 6.72)2055 – Industry · Low pathway: 4.99 (range 4.39 to 5.59)2070 – Industry · Low pathway: 3.66 (range 2.86 to 4.46)2085 – Industry · Low pathway: 2.33 (range 1.33 to 3.33)2100 – Industry · Low pathway: 1 (range −0.2 to 2.2)2025 – Industry · High pathway: 7.65 (range 7.45 to 7.85)2040 – Industry · High pathway: 7.72 (range 7.12 to 8.32)2055 – Industry · High pathway: 7.79 (range 6.79 to 8.79)2070 – Industry · High pathway: 7.86 (range 6.46 to 9.26)2085 – Industry · High pathway: 7.93 (range 6.13 to 9.73)2100 – Industry · High pathway: 8 (range 5.8 to 10.2)Net zeroTransport−5051015202520002025205020752100Net zero: 01990 – Transport · History: 3.71993 – Transport · History: 4.421996 – Transport · History: 4.311999 – Transport · History: 4.372002 – Transport · History: 5.012005 – Transport · History: 4.642008 – Transport · History: 5.162011 – Transport · History: 5.42014 – Transport · History: 5.152017 – Transport · History: 5.892020 – Transport · History: 5.692023 – Transport · History: 5.872025 – Transport · Low pathway: 5.98 (range 5.78 to 6.18)2040 – Transport · Low pathway: 4.84 (range 4.44 to 5.24)2055 – Transport · Low pathway: 3.71 (range 3.11 to 4.31)2070 – Transport · Low pathway: 2.57 (range 1.77 to 3.37)2085 – Transport · Low pathway: 1.44 (range 0.44 to 2.44)2100 – Transport · Low pathway: 0.3 (range −0.9 to 1.5)2025 – Transport · High pathway: 5.98 (range 5.78 to 6.18)2040 – Transport · High pathway: 6.18 (range 5.58 to 6.78)2055 – Transport · High pathway: 6.39 (range 5.39 to 7.39)2070 – Transport · High pathway: 6.59 (range 5.19 to 7.99)2085 – Transport · High pathway: 6.8 (range 5 to 8.6)2100 – Transport · High pathway: 7 (range 4.8 to 9.2)Net zeroBuildings−5051015202520002025205020752100Net zero: 01990 – Buildings · History: 2.71993 – Buildings · History: 3.31996 – Buildings · History: 3.071999 – Buildings · History: 3.012002 – Buildings · History: 3.532005 – Buildings · History: 3.042008 – Buildings · History: 3.442011 – Buildings · History: 3.562014 – Buildings · History: 3.192017 – Buildings · History: 3.812020 – Buildings · History: 3.492023 – Buildings · History: 3.552025 – Buildings · Low pathway: 3.66 (range 3.46 to 3.86)2040 – Buildings · Low pathway: 2.97 (range 2.57 to 3.37)2055 – Buildings · Low pathway: 2.28 (range 1.68 to 2.88)2070 – Buildings · Low pathway: 1.58 (range 0.78 to 2.38)2085 – Buildings · Low pathway: 0.89 (range −0.11 to 1.89)2100 – Buildings · Low pathway: 0.2 (range −1 to 1.4)2025 – Buildings · High pathway: 3.66 (range 3.46 to 3.86)2040 – Buildings · High pathway: 3.63 (range 3.03 to 4.23)2055 – Buildings · High pathway: 3.6 (range 2.6 to 4.6)2070 – Buildings · High pathway: 3.56 (range 2.16 to 4.96)2085 – Buildings · High pathway: 3.53 (range 1.73 to 5.33)2100 – Buildings · High pathway: 3.5 (range 1.3 to 5.7)Net zeroYear

Source: Illustrative values, chartlet

Show chart data
Data for Emission pathways by sector
TimeEnergy · HistoryEnergy · Low pathwayEnergy · Low pathway (lower)Energy · Low pathway (upper)Energy · High pathwayEnergy · High pathway (lower)Energy · High pathway (upper)Industry · HistoryIndustry · Low pathwayIndustry · Low pathway (lower)Industry · Low pathway (upper)Industry · High pathwayIndustry · High pathway (lower)Industry · High pathway (upper)Transport · HistoryTransport · Low pathwayTransport · Low pathway (lower)Transport · Low pathway (upper)Transport · High pathwayTransport · High pathway (lower)Transport · High pathway (upper)Buildings · HistoryBuildings · Low pathwayBuildings · Low pathway (lower)Buildings · Low pathway (upper)Buildings · High pathwayBuildings · High pathway (lower)Buildings · High pathway (upper)
199013.7MissingMissingMissingMissingMissingMissing5.7MissingMissingMissingMissingMissingMissing3.7MissingMissingMissingMissingMissingMissing2.7MissingMissingMissingMissingMissingMissing
199314.6MissingMissingMissingMissingMissingMissing6.39MissingMissingMissingMissingMissingMissing4.42MissingMissingMissingMissingMissingMissing3.3MissingMissingMissingMissingMissingMissing
199614.67MissingMissingMissingMissingMissingMissing6.25MissingMissingMissingMissingMissingMissing4.31MissingMissingMissingMissingMissingMissing3.07MissingMissingMissingMissingMissingMissing
199914.91MissingMissingMissingMissingMissingMissing6.28MissingMissingMissingMissingMissingMissing4.37MissingMissingMissingMissingMissingMissing3.01MissingMissingMissingMissingMissingMissing
200215.73MissingMissingMissingMissingMissingMissing6.89MissingMissingMissingMissingMissingMissing5.01MissingMissingMissingMissingMissingMissing3.53MissingMissingMissingMissingMissingMissing
200515.54MissingMissingMissingMissingMissingMissing6.49MissingMissingMissingMissingMissingMissing4.64MissingMissingMissingMissingMissingMissing3.04MissingMissingMissingMissingMissingMissing
200816.24MissingMissingMissingMissingMissingMissing6.98MissingMissingMissingMissingMissingMissing5.16MissingMissingMissingMissingMissingMissing3.44MissingMissingMissingMissingMissingMissing
201116.66MissingMissingMissingMissingMissingMissing7.19MissingMissingMissingMissingMissingMissing5.4MissingMissingMissingMissingMissingMissing3.56MissingMissingMissingMissingMissingMissing
201416.59MissingMissingMissingMissingMissingMissing6.91MissingMissingMissingMissingMissingMissing5.15MissingMissingMissingMissingMissingMissing3.19MissingMissingMissingMissingMissingMissing
201717.51MissingMissingMissingMissingMissingMissing7.62MissingMissingMissingMissingMissingMissing5.89MissingMissingMissingMissingMissingMissing3.81MissingMissingMissingMissingMissingMissing
202017.49MissingMissingMissingMissingMissingMissing7.39MissingMissingMissingMissingMissingMissing5.69MissingMissingMissingMissingMissingMissing3.49MissingMissingMissingMissingMissingMissing
202317.85MissingMissingMissingMissingMissingMissing7.54MissingMissingMissingMissingMissingMissing5.87MissingMissingMissingMissingMissingMissing3.55MissingMissingMissingMissingMissingMissing
2025Missing17.9617.7618.1617.9617.7618.16Missing7.657.457.857.657.457.85Missing5.985.786.185.985.786.18Missing3.663.463.863.663.463.86
2040Missing14.4714.0714.8718.1717.5718.77Missing6.325.926.727.727.128.32Missing4.844.445.246.185.586.78Missing2.972.573.373.633.034.23
2055Missing10.9810.3811.5818.3817.3819.38Missing4.994.395.597.796.798.79Missing3.713.114.316.395.397.39Missing2.281.682.883.62.64.6
2070Missing7.486.688.2818.5817.1819.98Missing3.662.864.467.866.469.26Missing2.571.773.376.595.197.99Missing1.580.782.383.562.164.96
2085Missing3.992.994.9918.7916.9920.59Missing2.331.333.337.936.139.73Missing1.440.442.446.858.6Missing0.89−0.111.893.531.735.33
2100Missing0.5−0.71.71916.821.2Missing1−0.22.285.810.2Missing0.3−0.91.574.89.2Missing0.2−11.43.51.35.7
  • Small multiples
  • Compare the same measure across groups

Indicators of growth since 1900

examples/acceleration-indicators.jsonDetail: Indicators of growth since 1900 →
{
  "schemaVersion": 1,
  "type": "multiples",
  "title": "Indicators of growth since 1900",
  "source": "Sample data, rounded",
  "independentAxes": true,
  "columns": 2,
  "height": 520,
  "valueAxis": {
    "thousandsSeparator": true
  },
  "panes": [
    {
      "title": "Population (millions)",
      "layers": [
        {
          "mark": "line",
          "name": "Value",
          "points": [
            {
              "time": "1900",
              "value": 1650
            },
            {
              "time": "1925",
              "value": 2000
            },
            {
              "time": "1950",
              "value": 2500
            },
            {
              "time": "1975",
              "value": 4060
            },
            {
              "time": "2000",
              "value": 6150
            },
            {
              "time": "2025",
              "value": 8100
            }
          ]
        }
      ]
    },
    {
      "title": "Primary energy (PWh)",
      "layers": [
        {
          "mark": "line",
          "name": "Value",
          "points": [
            {
              "time": "1900",
              "value": 12
            },
            {
              "time": "1925",
              "value": 20
            },
            {
              "time": "1950",
              "value": 28
            },
            {
              "time": "1975",
              "value": 75
            },
            {
              "time": "2000",
              "value": 117
            },
            {
              "time": "2025",
              "value": 180
            }
          ]
        }
      ]
    },
    {
      "title": "Water withdrawal (km³)",
      "layers": [
        {
          "mark": "line",
          "name": "Value",
          "points": [
            {
              "time": "1900",
              "value": 580
            },
            {
              "time": "1925",
              "value": 800
            },
            {
              "time": "1950",
              "value": 1300
            },
            {
              "time": "1975",
              "value": 2600
            },
            {
              "time": "2000",
              "value": 3700
            },
            {
              "time": "2025",
              "value": 4100
            }
          ]
        }
      ]
    },
    {
      "title": "Fertilizer use (Mt)",
      "layers": [
        {
          "mark": "line",
          "name": "Value",
          "points": [
            {
              "time": "1900",
              "value": 1
            },
            {
              "time": "1925",
              "value": 3
            },
            {
              "time": "1950",
              "value": 14
            },
            {
              "time": "1975",
              "value": 95
            },
            {
              "time": "2000",
              "value": 135
            },
            {
              "time": "2025",
              "value": 190
            }
          ]
        }
      ]
    }
  ]
}
Indicators of growth since 1900
Indicators of growth since 1900Time chart in 4 panels (Population (millions), Primary energy (PWh), Water withdrawal (km³), Fertilizer use (Mt)) with a value axis of their own, each from 1900 to 2025.Population (millions)02,0004,0006,0008,00010,0001900195020001900 – Population (millions) · Value: 1,6501925 – Population (millions) · Value: 2,0001950 – Population (millions) · Value: 2,5001975 – Population (millions) · Value: 4,0602000 – Population (millions) · Value: 6,1502025 – Population (millions) · Value: 8,100Primary energy (PWh)0501001502001900195020001900 – Primary energy (PWh) · Value: 121925 – Primary energy (PWh) · Value: 201950 – Primary energy (PWh) · Value: 281975 – Primary energy (PWh) · Value: 752000 – Primary energy (PWh) · Value: 1172025 – Primary energy (PWh) · Value: 180Water withdrawal (km³)01,0002,0003,0004,0005,0001900195020001900 – Water withdrawal (km³) · Value: 5801925 – Water withdrawal (km³) · Value: 8001950 – Water withdrawal (km³) · Value: 1,3001975 – Water withdrawal (km³) · Value: 2,6002000 – Water withdrawal (km³) · Value: 3,7002025 – Water withdrawal (km³) · Value: 4,100Fertilizer use (Mt)0501001502001900195020001900 – Fertilizer use (Mt) · Value: 11925 – Fertilizer use (Mt) · Value: 31950 – Fertilizer use (Mt) · Value: 141975 – Fertilizer use (Mt) · Value: 952000 – Fertilizer use (Mt) · Value: 1352025 – Fertilizer use (Mt) · Value: 190

Source: Sample data, rounded

Show chart data
Data for Indicators of growth since 1900
TimePopulation (millions) · ValuePrimary energy (PWh) · ValueWater withdrawal (km³) · ValueFertilizer use (Mt) · Value
19001,650125801
19252,000208003
19502,500281,30014
19754,060752,60095
20006,1501173,700135
20258,1001804,100190
  • Small multiples (own axes)
  • Compare shapes across units

Web frameworks compared

examples/framework-benchmarks.jsonDetail: Web frameworks compared →
{
  "schemaVersion": 1,
  "type": "multiples",
  "title": "Web frameworks compared",
  "source": "Illustrative values",
  "width": 960,
  "height": 420,
  "showValues": true,
  "columns": 3,
  "categories": [
    "Rust (Axum)",
    "Go (Gin)",
    "Node (Fastify)",
    "Python (FastAPI)"
  ],
  "panes": [
    {
      "title": "Requests per second",
      "note": "higher is better",
      "values": [
        118000,
        96000,
        64000,
        18000
      ],
      "valueAxis": {
        "unit": "req/s",
        "thousandsSeparator": true
      }
    },
    {
      "title": "Memory under load",
      "note": "lower is better",
      "values": [
        24,
        41,
        118,
        96
      ],
      "valueAxis": {
        "unit": "MB"
      }
    },
    {
      "title": "Cold start",
      "note": "lower is better",
      "values": [
        3,
        5,
        45,
        210
      ],
      "valueAxis": {
        "unit": "ms",
        "scale": "log"
      }
    }
  ],
  "mobile": {
    "width": 360,
    "height": 960,
    "columns": 1
  }
}
Web frameworks compared
Web frameworks comparedBar chart in 3 panels over 4 categories, each with its own value axis. Requests per second: Highest 118,000 req/s (Rust (Axum)), Lowest 18,000 req/s (Python (FastAPI)). Memory under load: Highest 118 MB (Node (Fastify)), Lowest 24 MB (Rust (Axum)). Cold start: Highest 210 ms (Python (FastAPI)), Lowest 3 ms (Rust (Axum)). Notes: Requests per second: higher is better; Memory under load: lower is better; Cold start: lower is better.Requests persecondhigher is betterreq/s0100,000Rust (Axum)Rust (Axum) – Requests per second: 118,000118,000Go (Gin)Go (Gin) – Requests per second: 96,00096,000Node (Fastify)Node (Fastify) – Requests per second: 64,00064,000Python (FastAPI)Python (FastAPI) – Requests per second: 18,00018,000Memory under loadlower is betterMB050100150Rust (Axum)Rust (Axum) – Memory under load: 2424Go (Gin)Go (Gin) – Memory under load: 4141Node (Fastify)Node (Fastify) – Memory under load: 118118Python (FastAPI)Python (FastAPI) – Memory under load: 9696Cold startlower is betterms110100Rust (Axum)Rust (Axum) – Cold start: 33Go (Gin)Go (Gin) – Cold start: 55Node (Fastify)Node (Fastify) – Cold start: 4545Python (FastAPI)Python (FastAPI) – Cold start: 210210
Web frameworks comparedBar chart in 3 panels over 4 categories, each with its own value axis. Requests per second: Highest 118,000 req/s (Rust (Axum)), Lowest 18,000 req/s (Python (FastAPI)). Memory under load: Highest 118 MB (Node (Fastify)), Lowest 24 MB (Rust (Axum)). Cold start: Highest 210 ms (Python (FastAPI)), Lowest 3 ms (Rust (Axum)). Notes: Requests per second: higher is better; Memory under load: lower is better; Cold start: lower is better.Requests per secondhigher is betterreq/s0100,000Rust (Axum)Rust (Axum) – Requests per second: 118,000118,000Go (Gin)Go (Gin) – Requests per second: 96,00096,000Node (Fastify)Node (Fastify) – Requests per second: 64,00064,000Python (FastAPI)Python (FastAPI) – Requests per second: 18,00018,000Memory under loadlower is betterMB050100150Rust (Axum)Rust (Axum) – Memory under load: 2424Go (Gin)Go (Gin) – Memory under load: 4141Node (Fastify)Node (Fastify) – Memory under load: 118118Python (FastAPI)Python (FastAPI) – Memory under load: 9696Cold startlower is betterms110100Rust (Axum)Rust (Axum) – Cold start: 33Go (Gin)Go (Gin) – Cold start: 55Node (Fastify)Node (Fastify) – Cold start: 4545Python (FastAPI)Python (FastAPI) – Cold start: 210210

Source: Illustrative values

Show chart data
Data for Web frameworks compared
CategoryRequests per second (req/s)Memory under load (MB)Cold start (ms)
Rust (Axum)118,000243
Go (Gin)96,000415
Node (Fastify)64,00011845
Python (FastAPI)18,00096210
  • Small multiples of bars (phone variant)
  • Compare candidates on unlike measures

Which cause matches the warming?

examples/warming-causes.jsonDetail: Which cause matches the warming? →
{
  "schemaVersion": 1,
  "type": "multiples",
  "title": "Which cause matches the warming?",
  "source": "Sample data, simplified",
  "width": 800,
  "height": 420,
  "columns": 3,
  "showValues": false,
  "valueAxis": {
    "title": "°C",
    "min": -0.5,
    "max": 1.5
  },
  "mobile": {
    "width": 360,
    "height": 760,
    "columns": 1
  },
  "panes": [
    {
      "title": "Sun",
      "note": "Does not match: solar activity has not risen since 1960",
      "layers": [
        {
          "mark": "line",
          "name": "Measured",
          "points": [
            {
              "time": "1900",
              "value": -0.05
            },
            {
              "time": "1910",
              "value": 0.15
            },
            {
              "time": "1920",
              "value": 0.15
            },
            {
              "time": "1930",
              "value": 0.35
            },
            {
              "time": "1940",
              "value": 0.35
            },
            {
              "time": "1950",
              "value": 0.55
            },
            {
              "time": "1960",
              "value": 0.55
            },
            {
              "time": "1970",
              "value": 0.75
            },
            {
              "time": "1980",
              "value": 0.75
            },
            {
              "time": "1990",
              "value": 0.95
            },
            {
              "time": "2000",
              "value": 0.95
            },
            {
              "time": "2010",
              "value": 1.15
            },
            {
              "time": "2020",
              "value": 1.15
            }
          ]
        },
        {
          "mark": "line",
          "name": "Model",
          "points": [
            {
              "time": "1900",
              "value": 0.1
            },
            {
              "time": "1910",
              "value": 0.1
            },
            {
              "time": "1920",
              "value": 0.1
            },
            {
              "time": "1930",
              "value": 0.1
            },
            {
              "time": "1940",
              "value": 0.1
            },
            {
              "time": "1950",
              "value": 0.1
            },
            {
              "time": "1960",
              "value": 0.05
            },
            {
              "time": "1970",
              "value": 0.05
            },
            {
              "time": "1980",
              "value": 0.05
            },
            {
              "time": "1990",
              "value": 0.05
            },
            {
              "time": "2000",
              "value": 0.05
            },
            {
              "time": "2010",
              "value": 0.05
            },
            {
              "time": "2020",
              "value": 0.05
            }
          ]
        }
      ]
    },
    {
      "title": "Volcanoes",
      "note": "Does not match: only short cooling",
      "layers": [
        {
          "mark": "line",
          "name": "Measured",
          "points": [
            {
              "time": "1900",
              "value": -0.05
            },
            {
              "time": "1910",
              "value": 0.15
            },
            {
              "time": "1920",
              "value": 0.15
            },
            {
              "time": "1930",
              "value": 0.35
            },
            {
              "time": "1940",
              "value": 0.35
            },
            {
              "time": "1950",
              "value": 0.55
            },
            {
              "time": "1960",
              "value": 0.55
            },
            {
              "time": "1970",
              "value": 0.75
            },
            {
              "time": "1980",
              "value": 0.75
            },
            {
              "time": "1990",
              "value": 0.95
            },
            {
              "time": "2000",
              "value": 0.95
            },
            {
              "time": "2010",
              "value": 1.15
            },
            {
              "time": "2020",
              "value": 1.15
            }
          ]
        },
        {
          "mark": "line",
          "name": "Model",
          "points": [
            {
              "time": "1900",
              "value": -0.1
            },
            {
              "time": "1910",
              "value": -0.1
            },
            {
              "time": "1920",
              "value": -0.1
            },
            {
              "time": "1930",
              "value": -0.1
            },
            {
              "time": "1940",
              "value": -0.1
            },
            {
              "time": "1950",
              "value": -0.1
            },
            {
              "time": "1960",
              "value": -0.1
            },
            {
              "time": "1970",
              "value": -0.1
            },
            {
              "time": "1980",
              "value": -0.1
            },
            {
              "time": "1990",
              "value": -0.1
            },
            {
              "time": "2000",
              "value": -0.1
            },
            {
              "time": "2010",
              "value": -0.1
            },
            {
              "time": "2020",
              "value": -0.1
            }
          ]
        }
      ]
    },
    {
      "title": "Greenhouse gases",
      "note": "Matches the measured warming",
      "noteEmphasis": true,
      "layers": [
        {
          "mark": "line",
          "name": "Measured",
          "points": [
            {
              "time": "1900",
              "value": -0.05
            },
            {
              "time": "1910",
              "value": 0.15
            },
            {
              "time": "1920",
              "value": 0.15
            },
            {
              "time": "1930",
              "value": 0.35
            },
            {
              "time": "1940",
              "value": 0.35
            },
            {
              "time": "1950",
              "value": 0.55
            },
            {
              "time": "1960",
              "value": 0.55
            },
            {
              "time": "1970",
              "value": 0.75
            },
            {
              "time": "1980",
              "value": 0.75
            },
            {
              "time": "1990",
              "value": 0.95
            },
            {
              "time": "2000",
              "value": 0.95
            },
            {
              "time": "2010",
              "value": 1.15
            },
            {
              "time": "2020",
              "value": 1.15
            }
          ]
        },
        {
          "mark": "line",
          "name": "Model",
          "points": [
            {
              "time": "1900",
              "value": 0
            },
            {
              "time": "1910",
              "value": 0.11
            },
            {
              "time": "1920",
              "value": 0.22
            },
            {
              "time": "1930",
              "value": 0.33
            },
            {
              "time": "1940",
              "value": 0.43
            },
            {
              "time": "1950",
              "value": 0.54
            },
            {
              "time": "1960",
              "value": 0.65
            },
            {
              "time": "1970",
              "value": 0.76
            },
            {
              "time": "1980",
              "value": 0.87
            },
            {
              "time": "1990",
              "value": 0.98
            },
            {
              "time": "2000",
              "value": 1.08
            },
            {
              "time": "2010",
              "value": 1.19
            },
            {
              "time": "2020",
              "value": 1.3
            }
          ]
        }
      ]
    }
  ]
}
Which cause matches the warming?
Which cause matches the warming?Time chart in 3 panels (Sun, Volcanoes, Greenhouse gases) with a shared value axis, each from 1900 to 2020, showing Measured, Model. Notes: Sun: Does not match: solar activity has not risen since 1960; Volcanoes: Does not match: only short cooling; Greenhouse gases: Matches the measured warming. Highest: 1.3 (Greenhouse gases · Model in 2020). Lowest: −0.1 (Volcanoes · Model in 1900, Volcanoes · Model in 1910, Volcanoes · Model in 1920, Volcanoes · Model in 1930, Volcanoes · Model in 1940, Volcanoes · Model in 1950, Volcanoes · Model in 1960, Volcanoes · Model in 1970, Volcanoes · Model in 1980, Volcanoes · Model in 1990, Volcanoes · Model in 2000, Volcanoes · Model in 2010, Volcanoes · Model in 2020).MeasuredModel°CSunDoes not match: solar activityhas not risen since 1960−0.50.00.51.01.51900195020001900 – Sun · Measured: −0.051910 – Sun · Measured: 0.151920 – Sun · Measured: 0.151930 – Sun · Measured: 0.351940 – Sun · Measured: 0.351950 – Sun · Measured: 0.551960 – Sun · Measured: 0.551970 – Sun · Measured: 0.751980 – Sun · Measured: 0.751990 – Sun · Measured: 0.952000 – Sun · Measured: 0.952010 – Sun · Measured: 1.152020 – Sun · Measured: 1.151900 – Sun · Model: 0.11910 – Sun · Model: 0.11920 – Sun · Model: 0.11930 – Sun · Model: 0.11940 – Sun · Model: 0.11950 – Sun · Model: 0.11960 – Sun · Model: 0.051970 – Sun · Model: 0.051980 – Sun · Model: 0.051990 – Sun · Model: 0.052000 – Sun · Model: 0.052010 – Sun · Model: 0.052020 – Sun · Model: 0.05VolcanoesDoes not match: only shortcooling−0.50.00.51.01.51900195020001900 – Volcanoes · Measured: −0.051910 – Volcanoes · Measured: 0.151920 – Volcanoes · Measured: 0.151930 – Volcanoes · Measured: 0.351940 – Volcanoes · Measured: 0.351950 – Volcanoes · Measured: 0.551960 – Volcanoes · Measured: 0.551970 – Volcanoes · Measured: 0.751980 – Volcanoes · Measured: 0.751990 – Volcanoes · Measured: 0.952000 – Volcanoes · Measured: 0.952010 – Volcanoes · Measured: 1.152020 – Volcanoes · Measured: 1.151900 – Volcanoes · Model: −0.11910 – Volcanoes · Model: −0.11920 – Volcanoes · Model: −0.11930 – Volcanoes · Model: −0.11940 – Volcanoes · Model: −0.11950 – Volcanoes · Model: −0.11960 – Volcanoes · Model: −0.11970 – Volcanoes · Model: −0.11980 – Volcanoes · Model: −0.11990 – Volcanoes · Model: −0.12000 – Volcanoes · Model: −0.12010 – Volcanoes · Model: −0.12020 – Volcanoes · Model: −0.1Greenhouse gasesMatches the measured warming−0.50.00.51.01.51900195020001900 – Greenhouse gases · Measured: −0.051910 – Greenhouse gases · Measured: 0.151920 – Greenhouse gases · Measured: 0.151930 – Greenhouse gases · Measured: 0.351940 – Greenhouse gases · Measured: 0.351950 – Greenhouse gases · Measured: 0.551960 – Greenhouse gases · Measured: 0.551970 – Greenhouse gases · Measured: 0.751980 – Greenhouse gases · Measured: 0.751990 – Greenhouse gases · Measured: 0.952000 – Greenhouse gases · Measured: 0.952010 – Greenhouse gases · Measured: 1.152020 – Greenhouse gases · Measured: 1.151900 – Greenhouse gases · Model: 01910 – Greenhouse gases · Model: 0.111920 – Greenhouse gases · Model: 0.221930 – Greenhouse gases · Model: 0.331940 – Greenhouse gases · Model: 0.431950 – Greenhouse gases · Model: 0.541960 – Greenhouse gases · Model: 0.651970 – Greenhouse gases · Model: 0.761980 – Greenhouse gases · Model: 0.871990 – Greenhouse gases · Model: 0.982000 – Greenhouse gases · Model: 1.082010 – Greenhouse gases · Model: 1.192020 – Greenhouse gases · Model: 1.3
Which cause matches the warming?Time chart in 3 panels (Sun, Volcanoes, Greenhouse gases) with a shared value axis, each from 1900 to 2020, showing Measured, Model. Notes: Sun: Does not match: solar activity has not risen since 1960; Volcanoes: Does not match: only short cooling; Greenhouse gases: Matches the measured warming. Highest: 1.3 (Greenhouse gases · Model in 2020). Lowest: −0.1 (Volcanoes · Model in 1900, Volcanoes · Model in 1910, Volcanoes · Model in 1920, Volcanoes · Model in 1930, Volcanoes · Model in 1940, Volcanoes · Model in 1950, Volcanoes · Model in 1960, Volcanoes · Model in 1970, Volcanoes · Model in 1980, Volcanoes · Model in 1990, Volcanoes · Model in 2000, Volcanoes · Model in 2010, Volcanoes · Model in 2020).MeasuredModel°CSunDoes not match: solar activity has not risensince 1960−0.50.00.51.01.51900195020001900 – Sun · Measured: −0.051910 – Sun · Measured: 0.151920 – Sun · Measured: 0.151930 – Sun · Measured: 0.351940 – Sun · Measured: 0.351950 – Sun · Measured: 0.551960 – Sun · Measured: 0.551970 – Sun · Measured: 0.751980 – Sun · Measured: 0.751990 – Sun · Measured: 0.952000 – Sun · Measured: 0.952010 – Sun · Measured: 1.152020 – Sun · Measured: 1.151900 – Sun · Model: 0.11910 – Sun · Model: 0.11920 – Sun · Model: 0.11930 – Sun · Model: 0.11940 – Sun · Model: 0.11950 – Sun · Model: 0.11960 – Sun · Model: 0.051970 – Sun · Model: 0.051980 – Sun · Model: 0.051990 – Sun · Model: 0.052000 – Sun · Model: 0.052010 – Sun · Model: 0.052020 – Sun · Model: 0.05VolcanoesDoes not match: only short cooling−0.50.00.51.01.51900195020001900 – Volcanoes · Measured: −0.051910 – Volcanoes · Measured: 0.151920 – Volcanoes · Measured: 0.151930 – Volcanoes · Measured: 0.351940 – Volcanoes · Measured: 0.351950 – Volcanoes · Measured: 0.551960 – Volcanoes · Measured: 0.551970 – Volcanoes · Measured: 0.751980 – Volcanoes · Measured: 0.751990 – Volcanoes · Measured: 0.952000 – Volcanoes · Measured: 0.952010 – Volcanoes · Measured: 1.152020 – Volcanoes · Measured: 1.151900 – Volcanoes · Model: −0.11910 – Volcanoes · Model: −0.11920 – Volcanoes · Model: −0.11930 – Volcanoes · Model: −0.11940 – Volcanoes · Model: −0.11950 – Volcanoes · Model: −0.11960 – Volcanoes · Model: −0.11970 – Volcanoes · Model: −0.11980 – Volcanoes · Model: −0.11990 – Volcanoes · Model: −0.12000 – Volcanoes · Model: −0.12010 – Volcanoes · Model: −0.12020 – Volcanoes · Model: −0.1Greenhouse gasesMatches the measured warming−0.50.00.51.01.51900195020001900 – Greenhouse gases · Measured: −0.051910 – Greenhouse gases · Measured: 0.151920 – Greenhouse gases · Measured: 0.151930 – Greenhouse gases · Measured: 0.351940 – Greenhouse gases · Measured: 0.351950 – Greenhouse gases · Measured: 0.551960 – Greenhouse gases · Measured: 0.551970 – Greenhouse gases · Measured: 0.751980 – Greenhouse gases · Measured: 0.751990 – Greenhouse gases · Measured: 0.952000 – Greenhouse gases · Measured: 0.952010 – Greenhouse gases · Measured: 1.152020 – Greenhouse gases · Measured: 1.151900 – Greenhouse gases · Model: 01910 – Greenhouse gases · Model: 0.111920 – Greenhouse gases · Model: 0.221930 – Greenhouse gases · Model: 0.331940 – Greenhouse gases · Model: 0.431950 – Greenhouse gases · Model: 0.541960 – Greenhouse gases · Model: 0.651970 – Greenhouse gases · Model: 0.761980 – Greenhouse gases · Model: 0.871990 – Greenhouse gases · Model: 0.982000 – Greenhouse gases · Model: 1.082010 – Greenhouse gases · Model: 1.192020 – Greenhouse gases · Model: 1.3

Source: Sample data, simplified

Show chart data
Data for Which cause matches the warming?
TimeSun · MeasuredSun · ModelVolcanoes · MeasuredVolcanoes · ModelGreenhouse gases · MeasuredGreenhouse gases · Model
1900−0.050.1−0.05−0.1−0.050
19100.150.10.15−0.10.150.11
19200.150.10.15−0.10.150.22
19300.350.10.35−0.10.350.33
19400.350.10.35−0.10.350.43
19500.550.10.55−0.10.550.54
19600.550.050.55−0.10.550.65
19700.750.050.75−0.10.750.76
19800.750.050.75−0.10.750.87
19900.950.050.95−0.10.950.98
20000.950.050.95−0.10.951.08
20101.150.051.15−0.11.151.19
20201.150.051.15−0.11.151.3
  • Small multiples (panel notes)
  • Compare candidates against one measurement

Stripes, calendars and timelines

Warming stripes 1850–2024

examples/warming-stripes.jsonDetail: Warming stripes 1850–2024 →
{
  "schemaVersion": 1,
  "type": "stripes",
  "title": "Warming stripes 1850–2024",
  "source": "Illustrative values, chartlet",
  "height": 240,
  "stripes": {
    "firstYear": 1850,
    "values": [
      -0.38,
      -0.47,
      -0.31,
      -0.27,
      -0.43,
      -0.4,
      null,
      -0.22,
      -0.36,
      -0.25,
      -0.11,
      -0.26,
      -0.39,
      -0.25,
      -0.22,
      -0.42,
      -0.45,
      -0.28,
      -0.3,
      -0.45,
      -0.34,
      -0.16,
      -0.25,
      -0.36,
      -0.2,
      -0.12,
      -0.31,
      -0.38,
      -0.23,
      -0.26,
      -0.46,
      -0.42,
      -0.25,
      -0.33,
      -0.45,
      -0.29,
      -0.15,
      -0.28,
      -0.34,
      -0.16,
      -0.15,
      -0.35,
      -0.36,
      -0.21,
      -0.3,
      -0.48,
      -0.37,
      -0.24,
      -0.36,
      -0.42,
      -0.23,
      -0.15,
      -0.31,
      -0.3,
      -0.12,
      -0.18,
      -0.37,
      -0.32,
      -0.2,
      -0.34,
      -0.47,
      -0.31,
      -0.23,
      -0.37,
      -0.37,
      -0.16,
      -0.15,
      -0.31,
      -0.24,
      -0.09,
      -0.21,
      -0.37,
      -0.26,
      -0.19,
      -0.37,
      -0.43,
      -0.24,
      -0.21,
      -0.37,
      -0.3,
      -0.1,
      -0.15,
      -0.29,
      -0.17,
      -0.06,
      -0.23,
      -0.33,
      -0.19,
      -0.18,
      -0.37,
      -0.36,
      -0.17,
      -0.2,
      -0.33,
      -0.2,
      -0.03,
      -0.14,
      -0.24,
      -0.08,
      -0.03,
      -0.23,
      -0.27,
      -0.12,
      -0.16,
      -0.34,
      -0.26,
      -0.09,
      -0.18,
      -0.27,
      -0.09,
      0.03,
      -0.12,
      -0.16,
      0.01,
      0,
      -0.21,
      -0.18,
      -0.04,
      -0.14,
      -0.29,
      -0.15,
      -0.01,
      -0.14,
      -0.17,
      0.03,
      0.09,
      -0.08,
      -0.05,
      0.11,
      0.03,
      -0.16,
      -0.07,
      0.04,
      -0.11,
      -0.2,
      -0.01,
      0.07,
      -0.08,
      -0.05,
      0.16,
      0.15,
      -0.01,
      0.07,
      0.21,
      0.07,
      -0.07,
      0.06,
      0.12,
      -0.05,
      -0.07,
      0.13,
      0.15,
      0.01,
      0.1,
      0.3,
      0.21,
      0.09,
      0.22,
      0.3,
      0.12,
      0.04,
      0.2,
      0.21,
      0.03,
      0.08,
      0.28,
      0.24,
      0.12,
      0.28,
      0.43,
      0.29,
      0.21,
      0.38,
      0.4,
      0.2
    ],
    "reference": 0,
    "min": -1.6,
    "max": 1.6
  }
}
Warming stripes 1850–2024
Warming stripes 1850–2024Warming stripes from 1850 to 2024, one stripe per year, on a diverging color scale around 0 with its outermost steps at −1.6 and 1.6. Lowest: −0.48 (1895). Highest: 0.43 (2019). 1 year has no value.1850: −0.381851: −0.471852: −0.311853: −0.271854: −0.431855: −0.41857: −0.221858: −0.361859: −0.251860: −0.111861: −0.261862: −0.391863: −0.251864: −0.221865: −0.421866: −0.451867: −0.281868: −0.31869: −0.451870: −0.341871: −0.161872: −0.251873: −0.361874: −0.21875: −0.121876: −0.311877: −0.381878: −0.231879: −0.261880: −0.461881: −0.421882: −0.251883: −0.331884: −0.451885: −0.291886: −0.151887: −0.281888: −0.341889: −0.161890: −0.151891: −0.351892: −0.361893: −0.211894: −0.31895: −0.481896: −0.371897: −0.241898: −0.361899: −0.421900: −0.231901: −0.151902: −0.311903: −0.31904: −0.121905: −0.181906: −0.371907: −0.321908: −0.21909: −0.341910: −0.471911: −0.311912: −0.231913: −0.371914: −0.371915: −0.161916: −0.151917: −0.311918: −0.241919: −0.091920: −0.211921: −0.371922: −0.261923: −0.191924: −0.371925: −0.431926: −0.241927: −0.211928: −0.371929: −0.31930: −0.11931: −0.151932: −0.291933: −0.171934: −0.061935: −0.231936: −0.331937: −0.191938: −0.181939: −0.371940: −0.361941: −0.171942: −0.21943: −0.331944: −0.21945: −0.031946: −0.141947: −0.241948: −0.081949: −0.031950: −0.231951: −0.271952: −0.121953: −0.161954: −0.341955: −0.261956: −0.091957: −0.181958: −0.271959: −0.091960: 0.031961: −0.121962: −0.161963: 0.011964: 01965: −0.211966: −0.181967: −0.041968: −0.141969: −0.291970: −0.151971: −0.011972: −0.141973: −0.171974: 0.031975: 0.091976: −0.081977: −0.051978: 0.111979: 0.031980: −0.161981: −0.071982: 0.041983: −0.111984: −0.21985: −0.011986: 0.071987: −0.081988: −0.051989: 0.161990: 0.151991: −0.011992: 0.071993: 0.211994: 0.071995: −0.071996: 0.061997: 0.121998: −0.051999: −0.072000: 0.132001: 0.152002: 0.012003: 0.12004: 0.32005: 0.212006: 0.092007: 0.222008: 0.32009: 0.122010: 0.042011: 0.22012: 0.212013: 0.032014: 0.082015: 0.282016: 0.242017: 0.122018: 0.282019: 0.432020: 0.292021: 0.212022: 0.382023: 0.42024: 0.218502024

Source: Illustrative values, chartlet

Show chart data
Data for Warming stripes 1850–2024
YearValue
1850−0.38
1851−0.47
1852−0.31
1853−0.27
1854−0.43
1855−0.4
1856Missing
1857−0.22
1858−0.36
1859−0.25
1860−0.11
1861−0.26
1862−0.39
1863−0.25
1864−0.22
1865−0.42
1866−0.45
1867−0.28
1868−0.3
1869−0.45
1870−0.34
1871−0.16
1872−0.25
1873−0.36
1874−0.2
1875−0.12
1876−0.31
1877−0.38
1878−0.23
1879−0.26
1880−0.46
1881−0.42
1882−0.25
1883−0.33
1884−0.45
1885−0.29
1886−0.15
1887−0.28
1888−0.34
1889−0.16
1890−0.15
1891−0.35
1892−0.36
1893−0.21
1894−0.3
1895−0.48
1896−0.37
1897−0.24
1898−0.36
1899−0.42
1900−0.23
1901−0.15
1902−0.31
1903−0.3
1904−0.12
1905−0.18
1906−0.37
1907−0.32
1908−0.2
1909−0.34
1910−0.47
1911−0.31
1912−0.23
1913−0.37
1914−0.37
1915−0.16
1916−0.15
1917−0.31
1918−0.24
1919−0.09
1920−0.21
1921−0.37
1922−0.26
1923−0.19
1924−0.37
1925−0.43
1926−0.24
1927−0.21
1928−0.37
1929−0.3
1930−0.1
1931−0.15
1932−0.29
1933−0.17
1934−0.06
1935−0.23
1936−0.33
1937−0.19
1938−0.18
1939−0.37
1940−0.36
1941−0.17
1942−0.2
1943−0.33
1944−0.2
1945−0.03
1946−0.14
1947−0.24
1948−0.08
1949−0.03
1950−0.23
1951−0.27
1952−0.12
1953−0.16
1954−0.34
1955−0.26
1956−0.09
1957−0.18
1958−0.27
1959−0.09
19600.03
1961−0.12
1962−0.16
19630.01
19640
1965−0.21
1966−0.18
1967−0.04
1968−0.14
1969−0.29
1970−0.15
1971−0.01
1972−0.14
1973−0.17
19740.03
19750.09
1976−0.08
1977−0.05
19780.11
19790.03
1980−0.16
1981−0.07
19820.04
1983−0.11
1984−0.2
1985−0.01
19860.07
1987−0.08
1988−0.05
19890.16
19900.15
1991−0.01
19920.07
19930.21
19940.07
1995−0.07
19960.06
19970.12
1998−0.05
1999−0.07
20000.13
20010.15
20020.01
20030.1
20040.3
20050.21
20060.09
20070.22
20080.3
20090.12
20100.04
20110.2
20120.21
20130.03
20140.08
20150.28
20160.24
20170.12
20180.28
20190.43
20200.29
20210.21
20220.38
20230.4
20240.2
  • Stripes
  • Show a long trend at a glance

Daily temperature anomaly 2024

examples/daily-anomaly-calendar.jsonDetail: Daily temperature anomaly 2024 →
{
  "schemaVersion": 1,
  "type": "calendar",
  "title": "Daily temperature anomaly 2024",
  "source": "Illustrative values, chartlet",
  "height": 420,
  "calendar": {
    "year": 2024,
    "days": [
      {
        "date": "2024-01-01",
        "value": 0.56
      },
      {
        "date": "2024-01-02",
        "value": 0.72
      },
      {
        "date": "2024-01-03",
        "value": 0.87
      },
      {
        "date": "2024-01-04",
        "value": 1.02
      },
      {
        "date": "2024-01-05",
        "value": 1.16
      },
      {
        "date": "2024-01-06",
        "value": 1.3
      },
      {
        "date": "2024-01-07",
        "value": 1.42
      },
      {
        "date": "2024-01-08",
        "value": 1.54
      },
      {
        "date": "2024-01-09",
        "value": 1.64
      },
      {
        "date": "2024-01-10",
        "value": 1.73
      },
      {
        "date": "2024-01-11",
        "value": 1.81
      },
      {
        "date": "2024-01-12",
        "value": 1.87
      },
      {
        "date": "2024-01-13",
        "value": 1.92
      },
      {
        "date": "2024-01-14",
        "value": 1.95
      },
      {
        "date": "2024-01-15",
        "value": 1.97
      },
      {
        "date": "2024-01-16",
        "value": 1.97
      },
      {
        "date": "2024-01-17",
        "value": 1.96
      },
      {
        "date": "2024-01-18",
        "value": 1.93
      },
      {
        "date": "2024-01-19",
        "value": 1.89
      },
      {
        "date": "2024-01-20",
        "value": 1.84
      },
      {
        "date": "2024-01-21",
        "value": 1.77
      },
      {
        "date": "2024-01-22",
        "value": 1.69
      },
      {
        "date": "2024-01-23",
        "value": 1.6
      },
      {
        "date": "2024-01-24",
        "value": 1.51
      },
      {
        "date": "2024-01-25",
        "value": 1.4
      },
      {
        "date": "2024-01-26",
        "value": 1.3
      },
      {
        "date": "2024-01-27",
        "value": 1.18
      },
      {
        "date": "2024-01-28",
        "value": 1.06
      },
      {
        "date": "2024-01-29",
        "value": 0.95
      },
      {
        "date": "2024-01-30",
        "value": 0.83
      },
      {
        "date": "2024-01-31",
        "value": 0.72
      },
      {
        "date": "2024-02-01",
        "value": 0.6
      },
      {
        "date": "2024-02-02",
        "value": 0.5
      },
      {
        "date": "2024-02-03",
        "value": 0.4
      },
      {
        "date": "2024-02-04",
        "value": 0.31
      },
      {
        "date": "2024-02-05",
        "value": 0.23
      },
      {
        "date": "2024-02-06",
        "value": 0.15
      },
      {
        "date": "2024-02-07",
        "value": 0.09
      },
      {
        "date": "2024-02-08",
        "value": 0.05
      },
      {
        "date": "2024-02-09",
        "value": 0.01
      },
      {
        "date": "2024-02-10",
        "value": -0.01
      },
      {
        "date": "2024-02-11",
        "value": -0.02
      },
      {
        "date": "2024-02-12",
        "value": -0.01
      },
      {
        "date": "2024-02-13",
        "value": 0.01
      },
      {
        "date": "2024-02-14",
        "value": 0.04
      },
      {
        "date": "2024-02-15",
        "value": 0.09
      },
      {
        "date": "2024-02-16",
        "value": 0.15
      },
      {
        "date": "2024-02-17",
        "value": 0.22
      },
      {
        "date": "2024-02-18",
        "value": 0.31
      },
      {
        "date": "2024-02-19",
        "value": 0.4
      },
      {
        "date": "2024-02-20",
        "value": 0.5
      },
      {
        "date": "2024-02-21",
        "value": 0.61
      },
      {
        "date": "2024-02-22",
        "value": 0.73
      },
      {
        "date": "2024-02-23",
        "value": 0.85
      },
      {
        "date": "2024-02-24",
        "value": 0.98
      },
      {
        "date": "2024-02-25",
        "value": 1.1
      },
      {
        "date": "2024-02-26",
        "value": 1.23
      },
      {
        "date": "2024-02-27",
        "value": 1.36
      },
      {
        "date": "2024-02-28",
        "value": 1.48
      },
      {
        "date": "2024-02-29",
        "value": 1.6
      },
      {
        "date": "2024-03-01",
        "value": 1.71
      },
      {
        "date": "2024-03-02",
        "value": 1.81
      },
      {
        "date": "2024-03-03",
        "value": 1.9
      },
      {
        "date": "2024-03-04",
        "value": 1.99
      },
      {
        "date": "2024-03-05",
        "value": 2.06
      },
      {
        "date": "2024-03-06",
        "value": 2.12
      },
      {
        "date": "2024-03-07",
        "value": 2.17
      },
      {
        "date": "2024-03-08",
        "value": 2.2
      },
      {
        "date": "2024-03-09",
        "value": 2.21
      },
      {
        "date": "2024-03-10",
        "value": 2.21
      },
      {
        "date": "2024-03-11",
        "value": 2.2
      },
      {
        "date": "2024-03-12",
        "value": 2.17
      },
      {
        "date": "2024-03-13",
        "value": 2.13
      },
      {
        "date": "2024-03-14",
        "value": 2.07
      },
      {
        "date": "2024-03-15",
        "value": 1.99
      },
      {
        "date": "2024-03-16",
        "value": 1.91
      },
      {
        "date": "2024-03-17",
        "value": 1.81
      },
      {
        "date": "2024-03-18",
        "value": 1.69
      },
      {
        "date": "2024-03-19",
        "value": 1.57
      },
      {
        "date": "2024-03-20",
        "value": 1.44
      },
      {
        "date": "2024-03-21",
        "value": 1.3
      },
      {
        "date": "2024-03-22",
        "value": 1.15
      },
      {
        "date": "2024-03-23",
        "value": 1
      },
      {
        "date": "2024-03-24",
        "value": 0.84
      },
      {
        "date": "2024-03-25",
        "value": 0.69
      },
      {
        "date": "2024-03-26",
        "value": 0.53
      },
      {
        "date": "2024-03-27",
        "value": 0.38
      },
      {
        "date": "2024-03-28",
        "value": 0.22
      },
      {
        "date": "2024-03-29",
        "value": 0.08
      },
      {
        "date": "2024-03-30",
        "value": -0.06
      },
      {
        "date": "2024-03-31",
        "value": -0.2
      },
      {
        "date": "2024-04-01",
        "value": -0.32
      },
      {
        "date": "2024-04-02",
        "value": -0.43
      },
      {
        "date": "2024-04-03",
        "value": -0.54
      },
      {
        "date": "2024-04-04",
        "value": -0.62
      },
      {
        "date": "2024-04-05",
        "value": -0.7
      },
      {
        "date": "2024-04-06",
        "value": -0.76
      },
      {
        "date": "2024-04-07",
        "value": -0.81
      },
      {
        "date": "2024-04-08",
        "value": -0.84
      },
      {
        "date": "2024-04-16",
        "value": -0.6
      },
      {
        "date": "2024-04-17",
        "value": -0.51
      },
      {
        "date": "2024-04-18",
        "value": -0.42
      },
      {
        "date": "2024-04-19",
        "value": -0.32
      },
      {
        "date": "2024-04-20",
        "value": -0.22
      },
      {
        "date": "2024-04-21",
        "value": -0.11
      },
      {
        "date": "2024-04-22",
        "value": 0
      },
      {
        "date": "2024-04-23",
        "value": 0.11
      },
      {
        "date": "2024-04-24",
        "value": 0.22
      },
      {
        "date": "2024-04-25",
        "value": 0.33
      },
      {
        "date": "2024-04-26",
        "value": 0.43
      },
      {
        "date": "2024-04-27",
        "value": 0.53
      },
      {
        "date": "2024-04-28",
        "value": 0.62
      },
      {
        "date": "2024-04-29",
        "value": 0.7
      },
      {
        "date": "2024-04-30",
        "value": 0.77
      },
      {
        "date": "2024-05-01",
        "value": 0.83
      },
      {
        "date": "2024-05-02",
        "value": 0.88
      },
      {
        "date": "2024-05-03",
        "value": 0.92
      },
      {
        "date": "2024-05-04",
        "value": 0.94
      },
      {
        "date": "2024-05-05",
        "value": 0.95
      },
      {
        "date": "2024-05-06",
        "value": 0.95
      },
      {
        "date": "2024-05-07",
        "value": 0.93
      },
      {
        "date": "2024-05-08",
        "value": 0.9
      },
      {
        "date": "2024-05-09",
        "value": 0.85
      },
      {
        "date": "2024-05-10",
        "value": 0.79
      },
      {
        "date": "2024-05-11",
        "value": 0.72
      },
      {
        "date": "2024-05-12",
        "value": 0.63
      },
      {
        "date": "2024-05-13",
        "value": 0.54
      },
      {
        "date": "2024-05-14",
        "value": 0.43
      },
      {
        "date": "2024-05-15",
        "value": 0.32
      },
      {
        "date": "2024-05-16",
        "value": 0.19
      },
      {
        "date": "2024-05-17",
        "value": 0.07
      },
      {
        "date": "2024-05-18",
        "value": -0.07
      },
      {
        "date": "2024-05-19",
        "value": -0.2
      },
      {
        "date": "2024-05-20",
        "value": -0.34
      },
      {
        "date": "2024-05-21",
        "value": -0.48
      },
      {
        "date": "2024-05-22",
        "value": -0.61
      },
      {
        "date": "2024-05-23",
        "value": -0.74
      },
      {
        "date": "2024-05-24",
        "value": -0.87
      },
      {
        "date": "2024-05-25",
        "value": -0.99
      },
      {
        "date": "2024-05-26",
        "value": -1.1
      },
      {
        "date": "2024-05-27",
        "value": -1.2
      },
      {
        "date": "2024-05-28",
        "value": -1.3
      },
      {
        "date": "2024-05-29",
        "value": -1.38
      },
      {
        "date": "2024-05-30",
        "value": -1.44
      },
      {
        "date": "2024-05-31",
        "value": -1.5
      },
      {
        "date": "2024-06-01",
        "value": -1.53
      },
      {
        "date": "2024-06-02",
        "value": -1.56
      },
      {
        "date": "2024-06-03",
        "value": -1.57
      },
      {
        "date": "2024-06-04",
        "value": -1.56
      },
      {
        "date": "2024-06-05",
        "value": -1.53
      },
      {
        "date": "2024-06-06",
        "value": -1.5
      },
      {
        "date": "2024-06-07",
        "value": -1.44
      },
      {
        "date": "2024-06-08",
        "value": -1.37
      },
      {
        "date": "2024-06-09",
        "value": -1.29
      },
      {
        "date": "2024-06-10",
        "value": -1.2
      },
      {
        "date": "2024-06-11",
        "value": -1.09
      },
      {
        "date": "2024-06-12",
        "value": -0.97
      },
      {
        "date": "2024-06-13",
        "value": -0.85
      },
      {
        "date": "2024-06-14",
        "value": -0.71
      },
      {
        "date": "2024-06-15",
        "value": -0.57
      },
      {
        "date": "2024-06-16",
        "value": -0.43
      },
      {
        "date": "2024-06-17",
        "value": -0.28
      },
      {
        "date": "2024-06-18",
        "value": -0.13
      },
      {
        "date": "2024-06-19",
        "value": 0.02
      },
      {
        "date": "2024-06-20",
        "value": 0.17
      },
      {
        "date": "2024-06-21",
        "value": 0.32
      },
      {
        "date": "2024-06-22",
        "value": 0.46
      },
      {
        "date": "2024-06-23",
        "value": 0.6
      },
      {
        "date": "2024-06-24",
        "value": 0.72
      },
      {
        "date": "2024-06-25",
        "value": 0.84
      },
      {
        "date": "2024-06-26",
        "value": 0.95
      },
      {
        "date": "2024-06-27",
        "value": 1.04
      },
      {
        "date": "2024-06-28",
        "value": 1.13
      },
      {
        "date": "2024-06-29",
        "value": 1.2
      },
      {
        "date": "2024-06-30",
        "value": 1.26
      },
      {
        "date": "2024-07-01",
        "value": 1.3
      },
      {
        "date": "2024-07-02",
        "value": 1.33
      },
      {
        "date": "2024-07-03",
        "value": 1.34
      },
      {
        "date": "2024-07-04",
        "value": 1.34
      },
      {
        "date": "2024-07-05",
        "value": 1.33
      },
      {
        "date": "2024-07-06",
        "value": 1.3
      },
      {
        "date": "2024-07-07",
        "value": 1.26
      },
      {
        "date": "2024-07-08",
        "value": 1.2
      },
      {
        "date": "2024-07-09",
        "value": 1.14
      },
      {
        "date": "2024-07-10",
        "value": 1.06
      },
      {
        "date": "2024-07-11",
        "value": 0.98
      },
      {
        "date": "2024-07-12",
        "value": 0.89
      },
      {
        "date": "2024-07-13",
        "value": 0.79
      },
      {
        "date": "2024-07-14",
        "value": 0.69
      },
      {
        "date": "2024-07-15",
        "value": 0.58
      },
      {
        "date": "2024-07-16",
        "value": 0.47
      },
      {
        "date": "2024-07-17",
        "value": 0.36
      },
      {
        "date": "2024-07-18",
        "value": 0.26
      },
      {
        "date": "2024-07-19",
        "value": 0.16
      },
      {
        "date": "2024-07-20",
        "value": 0.06
      },
      {
        "date": "2024-07-21",
        "value": -0.03
      },
      {
        "date": "2024-07-22",
        "value": -0.12
      },
      {
        "date": "2024-07-23",
        "value": -0.19
      },
      {
        "date": "2024-07-24",
        "value": -0.26
      },
      {
        "date": "2024-07-25",
        "value": -0.31
      },
      {
        "date": "2024-07-26",
        "value": -0.35
      },
      {
        "date": "2024-07-27",
        "value": -0.38
      },
      {
        "date": "2024-07-28",
        "value": -0.39
      },
      {
        "date": "2024-07-29",
        "value": -0.39
      },
      {
        "date": "2024-07-30",
        "value": -0.38
      },
      {
        "date": "2024-07-31",
        "value": -0.35
      },
      {
        "date": "2024-08-01",
        "value": -0.31
      },
      {
        "date": "2024-08-02",
        "value": -0.25
      },
      {
        "date": "2024-08-03",
        "value": -0.18
      },
      {
        "date": "2024-08-04",
        "value": -0.1
      },
      {
        "date": "2024-08-05",
        "value": 0
      },
      {
        "date": "2024-08-06",
        "value": 0.1
      },
      {
        "date": "2024-08-07",
        "value": 0.22
      },
      {
        "date": "2024-08-08",
        "value": 0.34
      },
      {
        "date": "2024-08-09",
        "value": 0.48
      },
      {
        "date": "2024-08-10",
        "value": 0.61
      },
      {
        "date": "2024-08-11",
        "value": 0.76
      },
      {
        "date": "2024-08-12",
        "value": 0.9
      },
      {
        "date": "2024-08-13",
        "value": 1.05
      },
      {
        "date": "2024-08-14",
        "value": 1.2
      },
      {
        "date": "2024-08-15",
        "value": 1.34
      },
      {
        "date": "2024-08-16",
        "value": 1.48
      },
      {
        "date": "2024-08-17",
        "value": 1.62
      },
      {
        "date": "2024-08-18",
        "value": 1.75
      },
      {
        "date": "2024-08-19",
        "value": 1.87
      },
      {
        "date": "2024-08-20",
        "value": 1.98
      },
      {
        "date": "2024-08-21",
        "value": 2.08
      },
      {
        "date": "2024-08-22",
        "value": 2.17
      },
      {
        "date": "2024-08-23",
        "value": 2.24
      },
      {
        "date": "2024-08-24",
        "value": 2.3
      },
      {
        "date": "2024-08-25",
        "value": 2.35
      },
      {
        "date": "2024-08-26",
        "value": 2.38
      },
      {
        "date": "2024-08-27",
        "value": 2.39
      },
      {
        "date": "2024-08-28",
        "value": 2.39
      },
      {
        "date": "2024-08-29",
        "value": 2.38
      },
      {
        "date": "2024-08-30",
        "value": 2.35
      },
      {
        "date": "2024-08-31",
        "value": 2.3
      },
      {
        "date": "2024-09-01",
        "value": 2.24
      },
      {
        "date": "2024-09-02",
        "value": 2.17
      },
      {
        "date": "2024-09-03",
        "value": 2.08
      },
      {
        "date": "2024-09-04",
        "value": 1.98
      },
      {
        "date": "2024-09-05",
        "value": 1.87
      },
      {
        "date": "2024-09-06",
        "value": 1.75
      },
      {
        "date": "2024-09-07",
        "value": 1.63
      },
      {
        "date": "2024-09-08",
        "value": 1.5
      },
      {
        "date": "2024-09-09",
        "value": 1.36
      },
      {
        "date": "2024-09-10",
        "value": 1.22
      },
      {
        "date": "2024-09-11",
        "value": 1.07
      },
      {
        "date": "2024-09-12",
        "value": 0.93
      },
      {
        "date": "2024-09-13",
        "value": 0.79
      },
      {
        "date": "2024-09-14",
        "value": 0.65
      },
      {
        "date": "2024-09-15",
        "value": 0.52
      },
      {
        "date": "2024-09-16",
        "value": 0.4
      },
      {
        "date": "2024-09-17",
        "value": 0.28
      },
      {
        "date": "2024-09-18",
        "value": 0.17
      },
      {
        "date": "2024-09-19",
        "value": 0.07
      },
      {
        "date": "2024-09-20",
        "value": -0.02
      },
      {
        "date": "2024-09-21",
        "value": -0.09
      },
      {
        "date": "2024-09-22",
        "value": -0.15
      },
      {
        "date": "2024-09-23",
        "value": -0.2
      },
      {
        "date": "2024-09-24",
        "value": -0.23
      },
      {
        "date": "2024-09-25",
        "value": -0.26
      },
      {
        "date": "2024-09-26",
        "value": -0.26
      },
      {
        "date": "2024-09-27",
        "value": -0.25
      },
      {
        "date": "2024-09-28",
        "value": -0.23
      },
      {
        "date": "2024-09-29",
        "value": -0.2
      },
      {
        "date": "2024-09-30",
        "value": -0.15
      },
      {
        "date": "2024-10-01",
        "value": -0.09
      },
      {
        "date": "2024-10-02",
        "value": -0.02
      },
      {
        "date": "2024-10-03",
        "value": 0.06
      },
      {
        "date": "2024-10-04",
        "value": 0.15
      },
      {
        "date": "2024-10-05",
        "value": 0.24
      },
      {
        "date": "2024-10-06",
        "value": 0.35
      },
      {
        "date": "2024-10-07",
        "value": 0.45
      },
      {
        "date": "2024-10-08",
        "value": 0.56
      },
      {
        "date": "2024-10-09",
        "value": 0.67
      },
      {
        "date": "2024-10-10",
        "value": 0.78
      },
      {
        "date": "2024-10-11",
        "value": 0.88
      },
      {
        "date": "2024-10-12",
        "value": 0.98
      },
      {
        "date": "2024-10-13",
        "value": 1.08
      },
      {
        "date": "2024-10-14",
        "value": 1.17
      },
      {
        "date": "2024-10-15",
        "value": 1.25
      },
      {
        "date": "2024-10-16",
        "value": 1.32
      },
      {
        "date": "2024-10-17",
        "value": 1.38
      },
      {
        "date": "2024-10-18",
        "value": 1.43
      },
      {
        "date": "2024-10-19",
        "value": 1.47
      },
      {
        "date": "2024-10-20",
        "value": 1.49
      },
      {
        "date": "2024-10-21",
        "value": 1.5
      },
      {
        "date": "2024-10-22",
        "value": 1.5
      },
      {
        "date": "2024-10-23",
        "value": 1.48
      },
      {
        "date": "2024-10-24",
        "value": 1.44
      },
      {
        "date": "2024-10-25",
        "value": 1.39
      },
      {
        "date": "2024-10-26",
        "value": 1.33
      },
      {
        "date": "2024-10-27",
        "value": 1.25
      },
      {
        "date": "2024-10-28",
        "value": 1.16
      },
      {
        "date": "2024-10-29",
        "value": 1.06
      },
      {
        "date": "2024-10-30",
        "value": 0.95
      },
      {
        "date": "2024-10-31",
        "value": 0.82
      },
      {
        "date": "2024-11-01",
        "value": 0.69
      },
      {
        "date": "2024-11-02",
        "value": 0.55
      },
      {
        "date": "2024-11-03",
        "value": 0.4
      },
      {
        "date": "2024-11-04",
        "value": 0.25
      },
      {
        "date": "2024-11-05",
        "value": 0.1
      },
      {
        "date": "2024-11-06",
        "value": -0.05
      },
      {
        "date": "2024-11-07",
        "value": -0.21
      },
      {
        "date": "2024-11-08",
        "value": -0.36
      },
      {
        "date": "2024-11-09",
        "value": -0.51
      },
      {
        "date": "2024-11-10",
        "value": -0.65
      },
      {
        "date": "2024-11-11",
        "value": -0.79
      },
      {
        "date": "2024-11-12",
        "value": -0.91
      },
      {
        "date": "2024-11-13",
        "value": -1.03
      },
      {
        "date": "2024-11-14",
        "value": -1.14
      },
      {
        "date": "2024-11-15",
        "value": -1.23
      },
      {
        "date": "2024-11-16",
        "value": -1.32
      },
      {
        "date": "2024-11-17",
        "value": -1.38
      },
      {
        "date": "2024-11-18",
        "value": -1.44
      },
      {
        "date": "2024-11-19",
        "value": -1.47
      },
      {
        "date": "2024-11-20",
        "value": -1.5
      },
      {
        "date": "2024-11-21",
        "value": -1.5
      },
      {
        "date": "2024-11-22",
        "value": -1.5
      },
      {
        "date": "2024-11-23",
        "value": -1.47
      },
      {
        "date": "2024-11-24",
        "value": -1.43
      },
      {
        "date": "2024-11-25",
        "value": -1.38
      },
      {
        "date": "2024-11-26",
        "value": -1.32
      },
      {
        "date": "2024-11-27",
        "value": -1.24
      },
      {
        "date": "2024-11-28",
        "value": -1.15
      },
      {
        "date": "2024-11-29",
        "value": -1.05
      },
      {
        "date": "2024-11-30",
        "value": -0.94
      },
      {
        "date": "2024-12-01",
        "value": -0.82
      },
      {
        "date": "2024-12-02",
        "value": -0.7
      },
      {
        "date": "2024-12-03",
        "value": -0.57
      },
      {
        "date": "2024-12-04",
        "value": -0.44
      },
      {
        "date": "2024-12-05",
        "value": -0.31
      },
      {
        "date": "2024-12-06",
        "value": -0.17
      },
      {
        "date": "2024-12-07",
        "value": -0.04
      },
      {
        "date": "2024-12-08",
        "value": 0.08
      },
      {
        "date": "2024-12-09",
        "value": 0.2
      },
      {
        "date": "2024-12-10",
        "value": 0.32
      },
      {
        "date": "2024-12-11",
        "value": 0.42
      },
      {
        "date": "2024-12-12",
        "value": 0.52
      },
      {
        "date": "2024-12-13",
        "value": 0.61
      },
      {
        "date": "2024-12-14",
        "value": 0.68
      },
      {
        "date": "2024-12-15",
        "value": 0.75
      },
      {
        "date": "2024-12-16",
        "value": 0.8
      },
      {
        "date": "2024-12-17",
        "value": 0.84
      },
      {
        "date": "2024-12-18",
        "value": 0.86
      },
      {
        "date": "2024-12-19",
        "value": 0.87
      },
      {
        "date": "2024-12-20",
        "value": 0.86
      },
      {
        "date": "2024-12-21",
        "value": 0.84
      },
      {
        "date": "2024-12-22",
        "value": 0.81
      },
      {
        "date": "2024-12-23",
        "value": 0.77
      },
      {
        "date": "2024-12-24",
        "value": 0.71
      },
      {
        "date": "2024-12-25",
        "value": 0.64
      },
      {
        "date": "2024-12-26",
        "value": 0.56
      },
      {
        "date": "2024-12-27",
        "value": 0.47
      },
      {
        "date": "2024-12-28",
        "value": 0.38
      },
      {
        "date": "2024-12-29",
        "value": 0.28
      },
      {
        "date": "2024-12-30",
        "value": 0.17
      },
      {
        "date": "2024-12-31",
        "value": 0.06
      }
    ],
    "reference": 0,
    "min": -2.4,
    "max": 2.4
  }
}
Daily temperature anomaly 2024
Daily temperature anomaly 2024Calendar of 2024 with one row per month, on a diverging color scale around 0 with its outermost steps at −2.4 and 2.4. 359 of 366 days have a value. Lowest: −1.57 (2024-06-03). Highest: 2.39 (2024-08-28).2024-01-01: 0.562024-01-02: 0.722024-01-03: 0.872024-01-04: 1.022024-01-05: 1.162024-01-06: 1.32024-01-07: 1.422024-01-08: 1.542024-01-09: 1.642024-01-10: 1.732024-01-11: 1.812024-01-12: 1.872024-01-13: 1.922024-01-14: 1.952024-01-15: 1.972024-01-16: 1.972024-01-17: 1.962024-01-18: 1.932024-01-19: 1.892024-01-20: 1.842024-01-21: 1.772024-01-22: 1.692024-01-23: 1.62024-01-24: 1.512024-01-25: 1.42024-01-26: 1.32024-01-27: 1.182024-01-28: 1.062024-01-29: 0.952024-01-30: 0.832024-01-31: 0.722024-02-01: 0.62024-02-02: 0.52024-02-03: 0.42024-02-04: 0.312024-02-05: 0.232024-02-06: 0.152024-02-07: 0.092024-02-08: 0.052024-02-09: 0.012024-02-10: −0.012024-02-11: −0.022024-02-12: −0.012024-02-13: 0.012024-02-14: 0.042024-02-15: 0.092024-02-16: 0.152024-02-17: 0.222024-02-18: 0.312024-02-19: 0.42024-02-20: 0.52024-02-21: 0.612024-02-22: 0.732024-02-23: 0.852024-02-24: 0.982024-02-25: 1.12024-02-26: 1.232024-02-27: 1.362024-02-28: 1.482024-02-29: 1.62024-03-01: 1.712024-03-02: 1.812024-03-03: 1.92024-03-04: 1.992024-03-05: 2.062024-03-06: 2.122024-03-07: 2.172024-03-08: 2.22024-03-09: 2.212024-03-10: 2.212024-03-11: 2.22024-03-12: 2.172024-03-13: 2.132024-03-14: 2.072024-03-15: 1.992024-03-16: 1.912024-03-17: 1.812024-03-18: 1.692024-03-19: 1.572024-03-20: 1.442024-03-21: 1.32024-03-22: 1.152024-03-23: 12024-03-24: 0.842024-03-25: 0.692024-03-26: 0.532024-03-27: 0.382024-03-28: 0.222024-03-29: 0.082024-03-30: −0.062024-03-31: −0.22024-04-01: −0.322024-04-02: −0.432024-04-03: −0.542024-04-04: −0.622024-04-05: −0.72024-04-06: −0.762024-04-07: −0.812024-04-08: −0.842024-04-09: no value2024-04-10: no value2024-04-11: no value2024-04-12: no value2024-04-13: no value2024-04-14: no value2024-04-15: no value2024-04-16: −0.62024-04-17: −0.512024-04-18: −0.422024-04-19: −0.322024-04-20: −0.222024-04-21: −0.112024-04-22: 02024-04-23: 0.112024-04-24: 0.222024-04-25: 0.332024-04-26: 0.432024-04-27: 0.532024-04-28: 0.622024-04-29: 0.72024-04-30: 0.772024-05-01: 0.832024-05-02: 0.882024-05-03: 0.922024-05-04: 0.942024-05-05: 0.952024-05-06: 0.952024-05-07: 0.932024-05-08: 0.92024-05-09: 0.852024-05-10: 0.792024-05-11: 0.722024-05-12: 0.632024-05-13: 0.542024-05-14: 0.432024-05-15: 0.322024-05-16: 0.192024-05-17: 0.072024-05-18: −0.072024-05-19: −0.22024-05-20: −0.342024-05-21: −0.482024-05-22: −0.612024-05-23: −0.742024-05-24: −0.872024-05-25: −0.992024-05-26: −1.12024-05-27: −1.22024-05-28: −1.32024-05-29: −1.382024-05-30: −1.442024-05-31: −1.52024-06-01: −1.532024-06-02: −1.562024-06-03: −1.572024-06-04: −1.562024-06-05: −1.532024-06-06: −1.52024-06-07: −1.442024-06-08: −1.372024-06-09: −1.292024-06-10: −1.22024-06-11: −1.092024-06-12: −0.972024-06-13: −0.852024-06-14: −0.712024-06-15: −0.572024-06-16: −0.432024-06-17: −0.282024-06-18: −0.132024-06-19: 0.022024-06-20: 0.172024-06-21: 0.322024-06-22: 0.462024-06-23: 0.62024-06-24: 0.722024-06-25: 0.842024-06-26: 0.952024-06-27: 1.042024-06-28: 1.132024-06-29: 1.22024-06-30: 1.262024-07-01: 1.32024-07-02: 1.332024-07-03: 1.342024-07-04: 1.342024-07-05: 1.332024-07-06: 1.32024-07-07: 1.262024-07-08: 1.22024-07-09: 1.142024-07-10: 1.062024-07-11: 0.982024-07-12: 0.892024-07-13: 0.792024-07-14: 0.692024-07-15: 0.582024-07-16: 0.472024-07-17: 0.362024-07-18: 0.262024-07-19: 0.162024-07-20: 0.062024-07-21: −0.032024-07-22: −0.122024-07-23: −0.192024-07-24: −0.262024-07-25: −0.312024-07-26: −0.352024-07-27: −0.382024-07-28: −0.392024-07-29: −0.392024-07-30: −0.382024-07-31: −0.352024-08-01: −0.312024-08-02: −0.252024-08-03: −0.182024-08-04: −0.12024-08-05: 02024-08-06: 0.12024-08-07: 0.222024-08-08: 0.342024-08-09: 0.482024-08-10: 0.612024-08-11: 0.762024-08-12: 0.92024-08-13: 1.052024-08-14: 1.22024-08-15: 1.342024-08-16: 1.482024-08-17: 1.622024-08-18: 1.752024-08-19: 1.872024-08-20: 1.982024-08-21: 2.082024-08-22: 2.172024-08-23: 2.242024-08-24: 2.32024-08-25: 2.352024-08-26: 2.382024-08-27: 2.392024-08-28: 2.392024-08-29: 2.382024-08-30: 2.352024-08-31: 2.32024-09-01: 2.242024-09-02: 2.172024-09-03: 2.082024-09-04: 1.982024-09-05: 1.872024-09-06: 1.752024-09-07: 1.632024-09-08: 1.52024-09-09: 1.362024-09-10: 1.222024-09-11: 1.072024-09-12: 0.932024-09-13: 0.792024-09-14: 0.652024-09-15: 0.522024-09-16: 0.42024-09-17: 0.282024-09-18: 0.172024-09-19: 0.072024-09-20: −0.022024-09-21: −0.092024-09-22: −0.152024-09-23: −0.22024-09-24: −0.232024-09-25: −0.262024-09-26: −0.262024-09-27: −0.252024-09-28: −0.232024-09-29: −0.22024-09-30: −0.152024-10-01: −0.092024-10-02: −0.022024-10-03: 0.062024-10-04: 0.152024-10-05: 0.242024-10-06: 0.352024-10-07: 0.452024-10-08: 0.562024-10-09: 0.672024-10-10: 0.782024-10-11: 0.882024-10-12: 0.982024-10-13: 1.082024-10-14: 1.172024-10-15: 1.252024-10-16: 1.322024-10-17: 1.382024-10-18: 1.432024-10-19: 1.472024-10-20: 1.492024-10-21: 1.52024-10-22: 1.52024-10-23: 1.482024-10-24: 1.442024-10-25: 1.392024-10-26: 1.332024-10-27: 1.252024-10-28: 1.162024-10-29: 1.062024-10-30: 0.952024-10-31: 0.822024-11-01: 0.692024-11-02: 0.552024-11-03: 0.42024-11-04: 0.252024-11-05: 0.12024-11-06: −0.052024-11-07: −0.212024-11-08: −0.362024-11-09: −0.512024-11-10: −0.652024-11-11: −0.792024-11-12: −0.912024-11-13: −1.032024-11-14: −1.142024-11-15: −1.232024-11-16: −1.322024-11-17: −1.382024-11-18: −1.442024-11-19: −1.472024-11-20: −1.52024-11-21: −1.52024-11-22: −1.52024-11-23: −1.472024-11-24: −1.432024-11-25: −1.382024-11-26: −1.322024-11-27: −1.242024-11-28: −1.152024-11-29: −1.052024-11-30: −0.942024-12-01: −0.822024-12-02: −0.72024-12-03: −0.572024-12-04: −0.442024-12-05: −0.312024-12-06: −0.172024-12-07: −0.042024-12-08: 0.082024-12-09: 0.22024-12-10: 0.322024-12-11: 0.422024-12-12: 0.522024-12-13: 0.612024-12-14: 0.682024-12-15: 0.752024-12-16: 0.82024-12-17: 0.842024-12-18: 0.862024-12-19: 0.872024-12-20: 0.862024-12-21: 0.842024-12-22: 0.812024-12-23: 0.772024-12-24: 0.712024-12-25: 0.642024-12-26: 0.562024-12-27: 0.472024-12-28: 0.382024-12-29: 0.282024-12-30: 0.172024-12-31: 0.06JanFebMarAprMayJunJulAugSepOctNovDec151015202531−2.402.4

Source: Illustrative values, chartlet

Show chart data
Data for Daily temperature anomaly 2024
DateValue
2024-01-010.56
2024-01-020.72
2024-01-030.87
2024-01-041.02
2024-01-051.16
2024-01-061.3
2024-01-071.42
2024-01-081.54
2024-01-091.64
2024-01-101.73
2024-01-111.81
2024-01-121.87
2024-01-131.92
2024-01-141.95
2024-01-151.97
2024-01-161.97
2024-01-171.96
2024-01-181.93
2024-01-191.89
2024-01-201.84
2024-01-211.77
2024-01-221.69
2024-01-231.6
2024-01-241.51
2024-01-251.4
2024-01-261.3
2024-01-271.18
2024-01-281.06
2024-01-290.95
2024-01-300.83
2024-01-310.72
2024-02-010.6
2024-02-020.5
2024-02-030.4
2024-02-040.31
2024-02-050.23
2024-02-060.15
2024-02-070.09
2024-02-080.05
2024-02-090.01
2024-02-10−0.01
2024-02-11−0.02
2024-02-12−0.01
2024-02-130.01
2024-02-140.04
2024-02-150.09
2024-02-160.15
2024-02-170.22
2024-02-180.31
2024-02-190.4
2024-02-200.5
2024-02-210.61
2024-02-220.73
2024-02-230.85
2024-02-240.98
2024-02-251.1
2024-02-261.23
2024-02-271.36
2024-02-281.48
2024-02-291.6
2024-03-011.71
2024-03-021.81
2024-03-031.9
2024-03-041.99
2024-03-052.06
2024-03-062.12
2024-03-072.17
2024-03-082.2
2024-03-092.21
2024-03-102.21
2024-03-112.2
2024-03-122.17
2024-03-132.13
2024-03-142.07
2024-03-151.99
2024-03-161.91
2024-03-171.81
2024-03-181.69
2024-03-191.57
2024-03-201.44
2024-03-211.3
2024-03-221.15
2024-03-231
2024-03-240.84
2024-03-250.69
2024-03-260.53
2024-03-270.38
2024-03-280.22
2024-03-290.08
2024-03-30−0.06
2024-03-31−0.2
2024-04-01−0.32
2024-04-02−0.43
2024-04-03−0.54
2024-04-04−0.62
2024-04-05−0.7
2024-04-06−0.76
2024-04-07−0.81
2024-04-08−0.84
2024-04-16−0.6
2024-04-17−0.51
2024-04-18−0.42
2024-04-19−0.32
2024-04-20−0.22
2024-04-21−0.11
2024-04-220
2024-04-230.11
2024-04-240.22
2024-04-250.33
2024-04-260.43
2024-04-270.53
2024-04-280.62
2024-04-290.7
2024-04-300.77
2024-05-010.83
2024-05-020.88
2024-05-030.92
2024-05-040.94
2024-05-050.95
2024-05-060.95
2024-05-070.93
2024-05-080.9
2024-05-090.85
2024-05-100.79
2024-05-110.72
2024-05-120.63
2024-05-130.54
2024-05-140.43
2024-05-150.32
2024-05-160.19
2024-05-170.07
2024-05-18−0.07
2024-05-19−0.2
2024-05-20−0.34
2024-05-21−0.48
2024-05-22−0.61
2024-05-23−0.74
2024-05-24−0.87
2024-05-25−0.99
2024-05-26−1.1
2024-05-27−1.2
2024-05-28−1.3
2024-05-29−1.38
2024-05-30−1.44
2024-05-31−1.5
2024-06-01−1.53
2024-06-02−1.56
2024-06-03−1.57
2024-06-04−1.56
2024-06-05−1.53
2024-06-06−1.5
2024-06-07−1.44
2024-06-08−1.37
2024-06-09−1.29
2024-06-10−1.2
2024-06-11−1.09
2024-06-12−0.97
2024-06-13−0.85
2024-06-14−0.71
2024-06-15−0.57
2024-06-16−0.43
2024-06-17−0.28
2024-06-18−0.13
2024-06-190.02
2024-06-200.17
2024-06-210.32
2024-06-220.46
2024-06-230.6
2024-06-240.72
2024-06-250.84
2024-06-260.95
2024-06-271.04
2024-06-281.13
2024-06-291.2
2024-06-301.26
2024-07-011.3
2024-07-021.33
2024-07-031.34
2024-07-041.34
2024-07-051.33
2024-07-061.3
2024-07-071.26
2024-07-081.2
2024-07-091.14
2024-07-101.06
2024-07-110.98
2024-07-120.89
2024-07-130.79
2024-07-140.69
2024-07-150.58
2024-07-160.47
2024-07-170.36
2024-07-180.26
2024-07-190.16
2024-07-200.06
2024-07-21−0.03
2024-07-22−0.12
2024-07-23−0.19
2024-07-24−0.26
2024-07-25−0.31
2024-07-26−0.35
2024-07-27−0.38
2024-07-28−0.39
2024-07-29−0.39
2024-07-30−0.38
2024-07-31−0.35
2024-08-01−0.31
2024-08-02−0.25
2024-08-03−0.18
2024-08-04−0.1
2024-08-050
2024-08-060.1
2024-08-070.22
2024-08-080.34
2024-08-090.48
2024-08-100.61
2024-08-110.76
2024-08-120.9
2024-08-131.05
2024-08-141.2
2024-08-151.34
2024-08-161.48
2024-08-171.62
2024-08-181.75
2024-08-191.87
2024-08-201.98
2024-08-212.08
2024-08-222.17
2024-08-232.24
2024-08-242.3
2024-08-252.35
2024-08-262.38
2024-08-272.39
2024-08-282.39
2024-08-292.38
2024-08-302.35
2024-08-312.3
2024-09-012.24
2024-09-022.17
2024-09-032.08
2024-09-041.98
2024-09-051.87
2024-09-061.75
2024-09-071.63
2024-09-081.5
2024-09-091.36
2024-09-101.22
2024-09-111.07
2024-09-120.93
2024-09-130.79
2024-09-140.65
2024-09-150.52
2024-09-160.4
2024-09-170.28
2024-09-180.17
2024-09-190.07
2024-09-20−0.02
2024-09-21−0.09
2024-09-22−0.15
2024-09-23−0.2
2024-09-24−0.23
2024-09-25−0.26
2024-09-26−0.26
2024-09-27−0.25
2024-09-28−0.23
2024-09-29−0.2
2024-09-30−0.15
2024-10-01−0.09
2024-10-02−0.02
2024-10-030.06
2024-10-040.15
2024-10-050.24
2024-10-060.35
2024-10-070.45
2024-10-080.56
2024-10-090.67
2024-10-100.78
2024-10-110.88
2024-10-120.98
2024-10-131.08
2024-10-141.17
2024-10-151.25
2024-10-161.32
2024-10-171.38
2024-10-181.43
2024-10-191.47
2024-10-201.49
2024-10-211.5
2024-10-221.5
2024-10-231.48
2024-10-241.44
2024-10-251.39
2024-10-261.33
2024-10-271.25
2024-10-281.16
2024-10-291.06
2024-10-300.95
2024-10-310.82
2024-11-010.69
2024-11-020.55
2024-11-030.4
2024-11-040.25
2024-11-050.1
2024-11-06−0.05
2024-11-07−0.21
2024-11-08−0.36
2024-11-09−0.51
2024-11-10−0.65
2024-11-11−0.79
2024-11-12−0.91
2024-11-13−1.03
2024-11-14−1.14
2024-11-15−1.23
2024-11-16−1.32
2024-11-17−1.38
2024-11-18−1.44
2024-11-19−1.47
2024-11-20−1.5
2024-11-21−1.5
2024-11-22−1.5
2024-11-23−1.47
2024-11-24−1.43
2024-11-25−1.38
2024-11-26−1.32
2024-11-27−1.24
2024-11-28−1.15
2024-11-29−1.05
2024-11-30−0.94
2024-12-01−0.82
2024-12-02−0.7
2024-12-03−0.57
2024-12-04−0.44
2024-12-05−0.31
2024-12-06−0.17
2024-12-07−0.04
2024-12-080.08
2024-12-090.2
2024-12-100.32
2024-12-110.42
2024-12-120.52
2024-12-130.61
2024-12-140.68
2024-12-150.75
2024-12-160.8
2024-12-170.84
2024-12-180.86
2024-12-190.87
2024-12-200.86
2024-12-210.84
2024-12-220.81
2024-12-230.77
2024-12-240.71
2024-12-250.64
2024-12-260.56
2024-12-270.47
2024-12-280.38
2024-12-290.28
2024-12-300.17
2024-12-310.06
  • Calendar heatmap
  • Find patterns across a year

Product roadmap 2027

examples/product-roadmap.jsonDetail: Product roadmap 2027 →
{
  "schemaVersion": 1,
  "type": "timeline",
  "title": "Product roadmap 2027",
  "source": "Illustrative plan",
  "width": 900,
  "height": 480,
  "showValues": true,
  "timeline": {
    "items": [
      {
        "id": "discovery",
        "label": "Discovery",
        "start": "2027-01-11",
        "end": "2027-04-02",
        "group": "Discovery",
        "rollup": [
          "research",
          "design"
        ]
      },
      {
        "id": "research",
        "label": "User research",
        "start": "2027-01-11",
        "end": "2027-02-19",
        "group": "Discovery",
        "progress": 1
      },
      {
        "id": "design",
        "label": "Design",
        "start": "2027-02-22",
        "end": "2027-04-02",
        "group": "Discovery",
        "after": [
          "research"
        ],
        "progress": 0.35
      },
      {
        "id": "alpha",
        "label": "Alpha build",
        "start": "2027-04-05",
        "end": "2027-06-11",
        "group": "Build",
        "after": [
          "design"
        ]
      },
      {
        "id": "review",
        "label": "Security review",
        "start": "2027-06-14",
        "end": "2027-07-09",
        "group": "Build",
        "after": [
          "alpha"
        ]
      },
      {
        "id": "beta",
        "label": "Beta",
        "start": "2027-07-12",
        "end": "2027-09-03",
        "group": "Launch",
        "after": [
          "review"
        ]
      },
      {
        "id": "freeze",
        "label": "Feature freeze",
        "at": "2027-07-30",
        "group": "Launch",
        "after": [
          "review"
        ]
      },
      {
        "id": "release",
        "label": "General availability",
        "at": "2027-09-20",
        "group": "Launch",
        "after": [
          "beta",
          "freeze"
        ]
      }
    ],
    "markers": [
      {
        "label": "Today",
        "at": "2027-03-08"
      }
    ]
  },
  "mobile": {
    "width": 400,
    "height": 480
  }
}
Product roadmap 2027
Product roadmap 2027Timeline with 6 phases and 2 milestones from 2027-01-11 to 2027-09-20. Discovery: 2027-01-11 – 2027-04-02. Discovery: 68% done. User research: 2027-01-11 – 2027-02-19. User research: 100% done. Design: 2027-02-22 – 2027-04-02, after User research. Design: 35% done. Alpha build: 2027-04-05 – 2027-06-11, after Design. Security review: 2027-06-14 – 2027-07-09, after Alpha build. Beta: 2027-07-12 – 2027-09-03, after Security review. Feature freeze: 2027-07-30, after Security review. General availability: 2027-09-20, after Beta and Feature freeze. Marked days: Today (2027-03-08).DiscoveryBuildLaunch2027-022027-032027-042027-052027-062027-072027-082027-09TodayDiscovery: 2027-01-11 – 2027-04-02 (68% done)2027-01-11 – 2027-04-02DiscoveryUser research: 2027-01-11 – 2027-02-19 (100% done)2027-01-11 – 2027-02-19User researchDesign: 2027-02-22 – 2027-04-02 (35% done)2027-02-22 – 2027-04-02DesignAlpha build: 2027-04-05 – 2027-06-112027-04-05 – 2027-06-11Alpha buildSecurity review: 2027-06-14 – 2027-07-092027-06-14 – 2027-07-09Security reviewBeta: 2027-07-12 – 2027-09-032027-07-12 – 2027-09-03BetaFeature freeze: 2027-07-302027-07-30Feature freezeGeneral availability: 2027-09-202027-09-20General availability
Product roadmap 2027Timeline with 6 phases and 2 milestones from 2027-01-11 to 2027-09-20. Discovery: 2027-01-11 – 2027-04-02. Discovery: 68% done. User research: 2027-01-11 – 2027-02-19. User research: 100% done. Design: 2027-02-22 – 2027-04-02, after User research. Design: 35% done. Alpha build: 2027-04-05 – 2027-06-11, after Design. Security review: 2027-06-14 – 2027-07-09, after Alpha build. Beta: 2027-07-12 – 2027-09-03, after Security review. Feature freeze: 2027-07-30, after Security review. General availability: 2027-09-20, after Beta and Feature freeze. Marked days: Today (2027-03-08).DiscoveryBuildLaunch2027-042027-07TodayDiscovery: 2027-01-11 – 2027-04-02 (68% done)DiscoveryUser research: 2027-01-11 – 2027-02-19 (100% done)User researchDesign: 2027-02-22 – 2027-04-02 (35% done)DesignAlpha build: 2027-04-05 – 2027-06-11Alpha buildSecurity review: 2027-06-14 – 2027-07-09Security reviewBeta: 2027-07-12 – 2027-09-03BetaFeature freeze: 2027-07-30Feature freezeGeneral availability: 2027-09-20General availability

Source: Illustrative plan

Show chart data
Data for Product roadmap 2027
ItemKindStartEndGroupAfterProgress
DiscoveryPhase2027-01-112027-04-02Discovery68% done
User researchPhase2027-01-112027-02-19Discovery100% done
DesignPhase2027-02-222027-04-02DiscoveryUser research35% done
Alpha buildPhase2027-04-052027-06-11BuildDesign
Security reviewPhase2027-06-142027-07-09BuildAlpha build
BetaPhase2027-07-122027-09-03LaunchSecurity review
Feature freezeMilestone2027-07-30LaunchSecurity review
General availabilityMilestone2027-09-20LaunchBeta, Feature freeze
  • Timeline
  • Plan phases, milestones and dependencies

Ranges and distributions

Contributions to warming

examples/warming-contributions.jsonDetail: Contributions to warming →
{
  "schemaVersion": 1,
  "type": "rangebar",
  "orientation": "horizontal",
  "title": "Contributions to warming",
  "source": "Illustrative values, chartlet",
  "valueAxis": {
    "title": "°C"
  },
  "ranges": [
    {
      "label": "Observed",
      "low": 0.9,
      "high": 1.2,
      "mid": 1.05
    },
    {
      "label": "Human influence",
      "low": 0.8,
      "high": 1.3,
      "mid": 1.05,
      "modeled": true
    },
    {
      "label": "Greenhouse gases",
      "low": 1,
      "high": 2,
      "mid": 1.5,
      "modeled": true
    },
    {
      "label": "Other human drivers",
      "low": -0.8,
      "high": 0,
      "mid": -0.4,
      "modeled": true
    },
    {
      "label": "Natural drivers",
      "low": -0.1,
      "high": 0.1,
      "mid": 0,
      "modeled": true
    }
  ]
}
Contributions to warming
Contributions to warmingRange chart with 5 categories, each a span from low to high and a central value. Lowest low: −0.8 (Other human drivers). Highest high: 2 (Greenhouse gases). Modelled, drawn hatched: Human influence, Greenhouse gases, Other human drivers, Natural drivers.−10123°CObserved: 1.05 (0.9 to 1.2)1.05 (0.9 to 1.2)ObservedHuman influence: 1.05 (0.8 to 1.3), modelledHuman influence: 1.05 (0.8 to 1.3), modelled1.05 (0.8 to 1.3)Human influenceGreenhouse gases: 1.5 (1 to 2), modelledGreenhouse gases: 1.5 (1 to 2), modelled1.5 (1 to 2)Greenhouse gasesOther human drivers: −0.4 (−0.8 to 0), modelledOther human drivers: −0.4 (−0.8 to 0), modelled−0.4 (−0.8 to 0)Other human driversNatural drivers: 0 (−0.1 to 0.1), modelledNatural drivers: 0 (−0.1 to 0.1), modelled0 (−0.1 to 0.1)Natural driversHatched: modelled

Source: Illustrative values, chartlet

Show chart data
Data for Contributions to warming
CategoryLowMidHigh
Observed0.91.051.2
Human influence (modelled)0.81.051.3
Greenhouse gases (modelled)11.52
Other human drivers (modelled)−0.8−0.40
Natural drivers (modelled)−0.100.1
  • Range bars
  • Compare estimates with their uncertainty

Soil animals under one square metre

examples/soil-animals.jsonDetail: Soil animals under one square metre →
{
  "schemaVersion": 1,
  "type": "rangebar",
  "title": "Soil animals under one square metre",
  "source": "Sample data, rounded",
  "orientation": "horizontal",
  "valueAxis": {
    "title": "Individuals per square metre",
    "scale": "log",
    "thousandsSeparator": true
  },
  "showValues": false,
  "ranges": [
    {
      "label": "Nematodes",
      "low": 1000000,
      "high": 20000000,
      "group": "Microfauna"
    },
    {
      "label": "Rotifers",
      "low": 25000,
      "high": 600000,
      "group": "Microfauna"
    },
    {
      "label": "Springtails",
      "low": 10000,
      "high": 400000,
      "group": "Mesofauna"
    },
    {
      "label": "Mites",
      "low": 20000,
      "high": 400000,
      "group": "Mesofauna"
    },
    {
      "label": "Potworms",
      "low": 3000,
      "high": 300000,
      "group": "Mesofauna"
    },
    {
      "label": "Millipedes",
      "low": 20,
      "high": 700,
      "group": "Macrofauna"
    },
    {
      "label": "Centipedes",
      "low": 20,
      "high": 400,
      "group": "Macrofauna"
    },
    {
      "label": "Earthworms",
      "low": 10,
      "high": 1000,
      "mid": 120,
      "group": "Macrofauna"
    }
  ]
}
Soil animals under one square metre
Soil animals under one square metreRange chart with 8 categories, each a span from low to high and a central value. Lowest low: 10 (Earthworms). Highest high: 20,000,000 (Nematodes). Colors show groups: Microfauna: Nematodes, Rotifers; Mesofauna: Springtails, Mites, Potworms; Macrofauna: Millipedes, Centipedes, Earthworms.101001,00010,000100,0001,000,00010,000,000Individuals per square metreNematodes (Microfauna): 1,000,000 to 20,000,000NematodesRotifers (Microfauna): 25,000 to 600,000RotifersSpringtails (Mesofauna): 10,000 to 400,000SpringtailsMites (Mesofauna): 20,000 to 400,000MitesPotworms (Mesofauna): 3,000 to 300,000PotwormsMillipedes (Macrofauna): 20 to 700MillipedesCentipedes (Macrofauna): 20 to 400CentipedesEarthworms (Macrofauna): 120 (10 to 1,000)EarthwormsMicrofaunaMesofaunaMacrofauna

Source: Sample data, rounded

Show chart data
Data for Soil animals under one square metre
CategoryLowMidHigh
Nematodes (Microfauna)1,000,000Missing20,000,000
Rotifers (Microfauna)25,000Missing600,000
Springtails (Mesofauna)10,000Missing400,000
Mites (Mesofauna)20,000Missing400,000
Potworms (Mesofauna)3,000Missing300,000
Millipedes (Macrofauna)20Missing700
Centipedes (Macrofauna)20Missing400
Earthworms (Macrofauna)101201,000
  • Range bars (groups)
  • Compare spans across orders of magnitude

Effect of the intervention on systolic blood pressure

examples/trial-effects.jsonDetail: Effect of the intervention on systolic blood pressure →
{
  "schemaVersion": 1,
  "type": "rangebar",
  "orientation": "horizontal",
  "title": "Effect of the intervention on systolic blood pressure",
  "source": "Illustrative meta-analysis",
  "width": 820,
  "height": 380,
  "showValues": true,
  "valueAxis": {
    "title": "Difference in mmHg (negative favors the intervention)",
    "min": -12,
    "max": 6
  },
  "references": [
    {
      "label": "No effect",
      "value": 0
    }
  ],
  "ranges": [
    {
      "label": "Alvarez 2018 (n=240)",
      "low": -7.8,
      "high": -1.2,
      "mid": -4.5,
      "weight": 24
    },
    {
      "label": "Berg 2019 (n=120)",
      "low": -9.9,
      "high": 1.7,
      "mid": -4.1,
      "weight": 11
    },
    {
      "label": "Chen 2020 (n=410)",
      "low": -5.4,
      "high": -0.2,
      "mid": -2.8,
      "weight": 41
    },
    {
      "label": "Dubois 2021 (n=95)",
      "low": -6.5,
      "high": 4.1,
      "mid": -1.2,
      "weight": 9
    },
    {
      "label": "Evans 2022 (n=180)",
      "low": -8.6,
      "high": -0.4,
      "mid": -4.5,
      "weight": 15
    },
    {
      "label": "Overall (random effects)",
      "low": -4.7,
      "high": -1.9,
      "mid": -3.3,
      "summary": true
    }
  ],
  "mobile": {
    "width": 400,
    "height": 420
  }
}
Effect of the intervention on systolic blood pressure
Effect of the intervention on systolic blood pressureRange chart with 6 categories, each a span from low to high and a central value. Lowest low: −9.9 (Berg 2019 (n=120)). Highest high: 4.1 (Dubois 2021 (n=95)). Overall result, drawn as a diamond: Overall (random effects) (−3.3 (−4.7 to −1.9)). The area of each square follows the weight of its span. Reference lines: No effect at 0.−15−10−50510Difference in mmHg (negative favors the intervention)No effect: 0Alvarez 2018 (n=240): −4.5 (−7.8 to −1.2), weight 24Alvarez 2018 (n=240): −4.5 (−7.8 to −1.2), weight 24−4.5 (−7.8 to −1.2)Alvarez 2018 (n=240)Berg 2019 (n=120): −4.1 (−9.9 to 1.7), weight 11Berg 2019 (n=120): −4.1 (−9.9 to 1.7), weight 11−4.1 (−9.9 to 1.7)Berg 2019 (n=120)Chen 2020 (n=410): −2.8 (−5.4 to −0.2), weight 41Chen 2020 (n=410): −2.8 (−5.4 to −0.2), weight 41−2.8 (−5.4 to −0.2)Chen 2020 (n=410)Dubois 2021 (n=95): −1.2 (−6.5 to 4.1), weight 9Dubois 2021 (n=95): −1.2 (−6.5 to 4.1), weight 9−1.2 (−6.5 to 4.1)Dubois 2021 (n=95)Evans 2022 (n=180): −4.5 (−8.6 to −0.4), weight 15Evans 2022 (n=180): −4.5 (−8.6 to −0.4), weight 15−4.5 (−8.6 to −0.4)Evans 2022 (n=180)Overall (random effects): −3.3 (−4.7 to −1.9)−3.3 (−4.7 to −1.9)Overall (random effects)No effect
Effect of the intervention on systolic blood pressureRange chart with 6 categories, each a span from low to high and a central value. Lowest low: −9.9 (Berg 2019 (n=120)). Highest high: 4.1 (Dubois 2021 (n=95)). Overall result, drawn as a diamond: Overall (random effects) (−3.3 (−4.7 to −1.9)). The area of each square follows the weight of its span. Reference lines: No effect at 0.−15−55Difference i…No effect: 0Alvarez 2018 (n=240): −4.5 (−7.8 to −1.2), weight 24Alvarez 2018 (n=240): −4.5 (−7.8 to −1.2), weight 24−4.5 (−7.8 to −1.2)Alvarez 2018 (n=240)Berg 2019 (n=120): −4.1 (−9.9 to 1.7), weight 11Berg 2019 (n=120): −4.1 (−9.9 to 1.7), weight 11−4.1 (−9.9 to 1.7)Berg 2019 (n=120)Chen 2020 (n=410): −2.8 (−5.4 to −0.2), weight 41Chen 2020 (n=410): −2.8 (−5.4 to −0.2), weight 41−2.8 (−5.4 to −0.2)Chen 2020 (n=410)Dubois 2021 (n=95): −1.2 (−6.5 to 4.1), weight 9Dubois 2021 (n=95): −1.2 (−6.5 to 4.1), weight 9−1.2 (−6.5 to 4.1)Dubois 2021 (n=95)Evans 2022 (n=180): −4.5 (−8.6 to −0.4), weight 15Evans 2022 (n=180): −4.5 (−8.6 to −0.4), weight 15−4.5 (−8.6 to −0.4)Evans 2022 (n=180)Overall (random effects): −3.3 (−4.7 to −1.9)−3.3 (−4.7 to −1.9)Overall (random effects)No e…

Source: Illustrative meta-analysis

Show chart data
Data for Effect of the intervention on systolic blood pressure
CategoryLowMidHighWeight
Alvarez 2018 (n=240)−7.8−4.5−1.224
Berg 2019 (n=120)−9.9−4.11.711
Chen 2020 (n=410)−5.4−2.8−0.241
Dubois 2021 (n=95)−6.5−1.24.19
Evans 2022 (n=180)−8.6−4.5−0.415
Overall (random effects) (summary)−4.7−3.3−1.9Missing
  • Forest plot
  • Pool the results of several studies

Response time by endpoint

examples/response-times.jsonDetail: Response time by endpoint →
{
  "schemaVersion": 1,
  "type": "boxplot",
  "title": "Response time by endpoint",
  "source": "Illustrative measurements",
  "width": 760,
  "height": 420,
  "showValues": true,
  "valueAxis": {
    "title": "Milliseconds"
  },
  "boxes": [
    {
      "label": "Search",
      "values": [
        42,
        45,
        47,
        48,
        50,
        52,
        53,
        55,
        58,
        61,
        64,
        140
      ]
    },
    {
      "label": "Checkout",
      "values": [
        88,
        92,
        95,
        97,
        101,
        104,
        108,
        112,
        118,
        125,
        131,
        138
      ]
    },
    {
      "label": "Profile",
      "values": [
        18,
        19,
        20,
        21,
        22,
        22,
        23,
        24,
        26,
        27,
        29,
        33
      ]
    },
    {
      "label": "Report export",
      "min": 90,
      "q1": 130,
      "median": 160,
      "q3": 210,
      "max": 300,
      "outliers": [
        380,
        450
      ]
    }
  ],
  "mobile": {
    "width": 400,
    "height": 420
  }
}
Response time by endpoint
Response time by endpointBox plot with 4 boxes, each from the first to the third quartile with its median. Highest median: 160 (Report export). Lowest median: 22.5 (Profile). Outliers beyond the whiskers: Search, Report export.0100200300400500MillisecondsSearch: Median: 52.5 (Q1: 47.75, Q3: 58.75, Minimum: 42, Maximum: 64), Outliers: 140, Observations 12Search: 14052.5SearchCheckout: Median: 106 (Q1: 96.5, Q3: 119.75, Minimum: 88, Maximum: 138), Observations 12106CheckoutProfile: Median: 22.5 (Q1: 20.75, Q3: 26.25, Minimum: 18, Maximum: 33), Observations 1222.5ProfileReport export: Median: 160 (Q1: 130, Q3: 210, Minimum: 90, Maximum: 300), Outliers: 380, 450Report export: 380Report export: 450160Report export
Response time by endpointBox plot with 4 boxes, each from the first to the third quartile with its median. Highest median: 160 (Report export). Lowest median: 22.5 (Profile). Outliers beyond the whiskers: Search, Report export.0100200300400500MillisecondsSearch: Median: 52.5 (Q1: 47.75, Q3: 58.75, Minimum: 42, Maximum: 64), Outliers: 140, Observations 12Search: 14052.5SearchCheckout: Median: 106 (Q1: 96.5, Q3: 119.75, Minimum: 88, Maximum: 138), Observations 12106CheckoutProfile: Median: 22.5 (Q1: 20.75, Q3: 26.25, Minimum: 18, Maximum: 33), Observations 1222.5ProfileReport export: Median: 160 (Q1: 130, Q3: 210, Minimum: 90, Maximum: 300), Outliers: 380, 450Report export: 380Report export: 450160Reportexport

Source: Illustrative measurements

Show chart data
Data for Response time by endpoint
CategoryMinimumQ1MedianQ3MaximumOutliers
Search4247.7552.558.7564140
Checkout8896.5106119.75138
Profile1820.7522.526.2533
Report export90130160210300380, 450
  • Box plot
  • Compare distributions, not averages

Response time by endpoint and region

examples/latency-by-region.jsonDetail: Response time by endpoint and region →
{
  "schemaVersion": 1,
  "type": "boxplot",
  "title": "Response time by endpoint and region",
  "source": "Illustrative measurements",
  "width": 780,
  "height": 440,
  "valueAxis": {
    "title": "Milliseconds"
  },
  "showMean": true,
  "boxes": [
    {
      "label": "Search EU",
      "group": "Europe",
      "values": [
        42.4,
        49.3,
        55.8,
        57.2,
        55.1,
        48.3,
        50,
        46.5,
        40.2,
        45.2,
        53.7,
        49.5,
        46.1,
        41.7,
        47.5,
        44.5,
        48.2,
        50.9,
        34.4,
        47.5,
        39.3,
        42.4,
        40.6,
        54.6
      ]
    },
    {
      "label": "Search Asia",
      "group": "Asia",
      "values": [
        104.3,
        101.9,
        84.7,
        75,
        89.7,
        97.8,
        94,
        104.6,
        90,
        120,
        104.1,
        122.7,
        98.4,
        91.8,
        83.2,
        106.2,
        109.6,
        97.2,
        100.7,
        91.2,
        89.2,
        90.9,
        68.8,
        80.9
      ]
    },
    {
      "label": "Pay EU",
      "group": "Europe",
      "values": [
        110.4,
        111.5,
        122.9,
        117.5,
        115,
        110.6,
        83,
        110.6,
        99.4,
        115.8,
        106.6,
        105.9,
        103.5,
        106.4,
        86.6,
        90.9,
        124.4,
        115.1,
        104.6,
        105.8,
        105.5,
        148.7,
        116.1,
        109.9
      ]
    },
    {
      "label": "Pay Asia",
      "group": "Asia",
      "values": [
        155.1,
        118.1,
        172.5,
        200.1,
        190.2,
        175.6,
        156.5,
        143.9,
        171.4,
        160.7,
        144.8,
        206,
        149.2,
        157.8,
        117.5,
        207.1,
        166.2,
        168.1,
        176,
        151.3,
        156.1,
        176.2,
        151.7,
        176.7
      ]
    },
    {
      "label": "Profile EU",
      "group": "Europe",
      "values": [
        28.6,
        27.2,
        29.2,
        28.2,
        30.2,
        25.8,
        26.2,
        21.7,
        24.4,
        22.8,
        24.8,
        21.9,
        25.9,
        32.7,
        22.6,
        26.7,
        26.8,
        22.8,
        24.1,
        23.4,
        26.3,
        23.1,
        32.8,
        27.5
      ]
    },
    {
      "label": "Profile Asia",
      "group": "Asia",
      "values": [
        61,
        69.1,
        62.9,
        51.1,
        54.8,
        52.2,
        54,
        59.7,
        36.1,
        38.6,
        49.3,
        55.5,
        48,
        50.4,
        60.7,
        57.3,
        51,
        49.2,
        40.1,
        55.8,
        52.7,
        44.2,
        55.7,
        48.8
      ]
    }
  ],
  "mobile": {
    "width": 440,
    "height": 440
  }
}
Response time by endpoint and region
Response time by endpoint and regionBox plot with 6 boxes, each from the first to the third quartile with its median. Highest median: 163.45 (Pay Asia). Lowest median: 26.05 (Profile EU). Outliers beyond the whiskers: Pay EU, Profile Asia.050100150200250MillisecondsEuropeAsiaSearch EU: Median: 47.5 (Q1: 42.4, Q3: 50.225, Minimum: 34.4, Maximum: 57.2), Mean: 47.1208333333, Observations 2447.5Search EUSearch Asia: Median: 95.6 (Q1: 89.575, Q3: 104.15, Minimum: 68.8, Maximum: 122.7), Mean: 95.7041666667, Observations 2495.6Search AsiaPay EU: Median: 110.15 (Q1: 105.275, Q3: 115.275, Minimum: 90.9, Maximum: 124.4), Mean: 109.445833333, Outliers: 83, 86.6, 148.7, Observations 24Pay EU: 83Pay EU: 86.6Pay EU: 148.7110.15Pay EUPay Asia: Median: 163.45 (Q1: 151.6, Q3: 176.05, Minimum: 117.5, Maximum: 207.1), Mean: 164.533333333, Observations 24163.45Pay AsiaProfile EU: Median: 26.05 (Q1: 23.325, Q3: 27.675, Minimum: 21.7, Maximum: 32.8), Mean: 26.0708333333, Observations 2426.05Profile EUProfile Asia: Median: 52.45 (Q1: 49.1, Q3: 56.175, Minimum: 38.6, Maximum: 62.9), Mean: 52.425, Outliers: 36.1, 69.1, Observations 24Profile Asia: 36.1Profile Asia: 69.152.45Profile Asia
Response time by endpoint and regionBox plot with 6 boxes, each from the first to the third quartile with its median. Highest median: 163.45 (Pay Asia). Lowest median: 26.05 (Profile EU). Outliers beyond the whiskers: Pay EU, Profile Asia.050100150200250MillisecondsEuropeAsiaSearch EU: Median: 47.5 (Q1: 42.4, Q3: 50.225, Minimum: 34.4, Maximum: 57.2), Mean: 47.1208333333, Observations 2447.5SearchEUSearch Asia: Median: 95.6 (Q1: 89.575, Q3: 104.15, Minimum: 68.8, Maximum: 122.7), Mean: 95.7041666667, Observations 2495.6SearchAsiaPay EU: Median: 110.15 (Q1: 105.275, Q3: 115.275, Minimum: 90.9, Maximum: 124.4), Mean: 109.445833333, Outliers: 83, 86.6, 148.7, Observations 24Pay EU: 83Pay EU: 86.6Pay EU: 148.7110.15Pay EUPay Asia: Median: 163.45 (Q1: 151.6, Q3: 176.05, Minimum: 117.5, Maximum: 207.1), Mean: 164.533333333, Observations 24163.45PayAsiaProfile EU: Median: 26.05 (Q1: 23.325, Q3: 27.675, Minimum: 21.7, Maximum: 32.8), Mean: 26.0708333333, Observations 2426.05ProfileEUProfile Asia: Median: 52.45 (Q1: 49.1, Q3: 56.175, Minimum: 38.6, Maximum: 62.9), Mean: 52.425, Outliers: 36.1, 69.1, Observations 24Profile Asia: 36.1Profile Asia: 69.152.45ProfileAsia

Source: Illustrative measurements

Show chart data
Data for Response time by endpoint and region
CategoryMinimumQ1MedianMeanQ3MaximumGroupOutliers
Search EU34.442.447.547.120833333350.22557.2Europe
Search Asia68.889.57595.695.7041666667104.15122.7Asia
Pay EU90.9105.275110.15109.445833333115.275124.4Europe83, 86.6, 148.7
Pay Asia117.5151.6163.45164.533333333176.05207.1Asia
Profile EU21.723.32526.0526.070833333327.67532.8Europe
Profile Asia38.649.152.4552.42556.17562.9Asia36.1, 69.1
  • Box plot (groups)
  • Compare groups across categories

Customer satisfaction before and after the support redesign

examples/satisfaction-change.jsonDetail: Customer satisfaction before and after the support redesign →
{
  "schemaVersion": 1,
  "type": "rangebar",
  "display": "dumbbell",
  "sort": "change",
  "orientation": "horizontal",
  "title": "Customer satisfaction before and after the support redesign",
  "source": "Illustrative survey scores, 0 to 100",
  "width": 760,
  "height": 380,
  "valueAxis": {
    "title": "Satisfaction score",
    "min": 40,
    "max": 100
  },
  "ranges": [
    {
      "label": "Onboarding",
      "low": 58,
      "high": 81
    },
    {
      "label": "Billing",
      "low": 49,
      "high": 64
    },
    {
      "label": "Mobile app",
      "low": 66,
      "high": 86
    },
    {
      "label": "Documentation",
      "low": 61,
      "high": 70
    },
    {
      "label": "Live chat",
      "low": 72,
      "high": 79
    },
    {
      "label": "Phone support",
      "low": 69,
      "high": 74
    }
  ],
  "mobile": {
    "width": 380,
    "height": 440
  }
}
Customer satisfaction before and after the support redesign
Customer satisfaction before and after the support redesignRange chart with 6 categories, each a span from low to high. Lowest low: 49 (Billing). Highest high: 86 (Mobile app). Each row connects an open dot at the low value with a filled dot at the high value. Widest change: 23 (Onboarding).406080100Satisfaction scoreOnboarding: 58 to 81Onboarding: 58 to 815881OnboardingMobile app: 66 to 86Mobile app: 66 to 866686Mobile appBilling: 49 to 64Billing: 49 to 644964BillingDocumentation: 61 to 70Documentation: 61 to 706170DocumentationLive chat: 72 to 79Live chat: 72 to 797279Live chatPhone support: 69 to 74Phone support: 69 to 746974Phone support
Customer satisfaction before and after the support redesignRange chart with 6 categories, each a span from low to high. Lowest low: 49 (Billing). Highest high: 86 (Mobile app). Each row connects an open dot at the low value with a filled dot at the high value. Widest change: 23 (Onboarding).406080100Satisfaction scoreOnboarding: 58 to 81Onboarding: 58 to 815881OnboardingMobile app: 66 to 86Mobile app: 66 to 866686Mobile appBilling: 49 to 64Billing: 49 to 644964BillingDocumentation: 61 to 70Documentation: 61 to 706170DocumentationLive chat: 72 to 79Live chat: 72 to 797279Live chatPhone support: 69 to 74Phone support: 69 to 746974Phone support

Source: Illustrative survey scores, 0 to 100

Show chart data
Data for Customer satisfaction before and after the support redesign
CategoryLowHigh
Onboarding5881
Mobile app6686
Billing4964
Documentation6170
Live chat7279
Phone support6974
  • Dumbbell chart
  • Compare two values per category, such as before and after

Response times by endpoint

examples/response-distribution.jsonDetail: Response times by endpoint →
{
  "schemaVersion": 1,
  "type": "boxplot",
  "boxDisplay": "violin",
  "title": "Response times by endpoint",
  "source": "Illustrative measurements, 60 requests each",
  "width": 760,
  "height": 440,
  "valueAxis": {
    "title": "Milliseconds"
  },
  "boxes": [
    {
      "label": "Search",
      "values": [
        33.5,
        43.8,
        33.8,
        32.8,
        26.4,
        34,
        54,
        42.5,
        52.6,
        39.9,
        42,
        39.1,
        20.4,
        49.4,
        43.7,
        43.6,
        20.2,
        19.9,
        26.8,
        31.1,
        40.7,
        36,
        43.9,
        29.2,
        40.8,
        42,
        29,
        66.8,
        44.5,
        55.6,
        29.5,
        28.3,
        32.4,
        35.3,
        45.7,
        39.9,
        31.3,
        26.2,
        30.5,
        56.1,
        27.6,
        39.9,
        42.5,
        21.7,
        37.2,
        57.8,
        18.1,
        32.7,
        35.3,
        27.5,
        43.6,
        35.8,
        21.9,
        48.9,
        46.3,
        51,
        60.6,
        41.5,
        38.2,
        23.2
      ]
    },
    {
      "label": "Checkout",
      "values": [
        42.5,
        37.6,
        38.2,
        34.9,
        36.1,
        37.9,
        45.2,
        31.9,
        34.2,
        41,
        45.8,
        42.3,
        32.4,
        29.9,
        41.4,
        37.1,
        35.5,
        43.9,
        44.4,
        40.6,
        41,
        41.7,
        46.4,
        42.5,
        42.1,
        42.2,
        33.7,
        45.1,
        43.8,
        42.1,
        64.2,
        73.6,
        83.9,
        65.3,
        76.7,
        85.1,
        68.8,
        89.3,
        81.9,
        76.9,
        80.3,
        82.5,
        78.8,
        86,
        73.4,
        75.1,
        85.3,
        78.2,
        71.8,
        84.6,
        88.3,
        74.9,
        68.3,
        77.1,
        77,
        75.9,
        87.8,
        70.8,
        86.8,
        69.1
      ]
    },
    {
      "label": "Profile",
      "values": [
        47.3,
        55.8,
        58.8,
        57.2,
        54.1,
        52.9,
        52.9,
        55.5,
        50.9,
        53.7,
        55.4,
        52,
        56.6,
        55.4,
        64.1,
        53.9,
        49.4,
        49.8,
        51.9,
        57.5,
        50,
        54.3,
        63,
        36.6,
        45.3,
        53.5,
        54.4,
        53.4,
        49.4,
        55.9,
        53.7,
        48.9,
        66.6,
        54.1,
        48.7,
        51.4,
        50.6,
        51.6,
        35.6,
        49.1,
        58.1,
        45,
        51.6,
        57.7,
        57.1,
        60.9,
        41.8,
        49.9,
        50,
        55.7,
        58.6,
        35.9,
        58.5,
        43.3,
        56.1,
        43,
        53.1,
        59.2,
        51.1,
        53.1
      ]
    }
  ],
  "mobile": {
    "width": 380,
    "height": 480
  },
  "showMean": true
}
Response times by endpoint
Response times by endpointBox plot with 3 boxes, each from the first to the third quartile with its median. Highest median: 55.3 (Checkout). Lowest median: 37.7 (Search). Outliers beyond the whiskers: Search, Profile.020406080100MillisecondsSearch: Median: 37.7 (Q1: 29.425, Q3: 43.725, Minimum: 18.1, Maximum: 60.6), Mean: 37.7416666667, Outliers: 66.8, Observations 6037.7SearchCheckout: Median: 55.3 (Q1: 41.3, Q3: 77.025, Minimum: 29.9, Maximum: 89.3), Mean: 58.8516666667, Observations 6055.3CheckoutProfile: Median: 53.25 (Q1: 49.875, Q3: 55.95, Minimum: 41.8, Maximum: 64.1), Mean: 52.515, Outliers: 35.6, 35.9, 36.6, 66.6, Observations 6053.25Profile
Response times by endpointBox plot with 3 boxes, each from the first to the third quartile with its median. Highest median: 55.3 (Checkout). Lowest median: 37.7 (Search). Outliers beyond the whiskers: Search, Profile.020406080100MillisecondsSearch: Median: 37.7 (Q1: 29.425, Q3: 43.725, Minimum: 18.1, Maximum: 60.6), Mean: 37.7416666667, Outliers: 66.8, Observations 6037.7SearchCheckout: Median: 55.3 (Q1: 41.3, Q3: 77.025, Minimum: 29.9, Maximum: 89.3), Mean: 58.8516666667, Observations 6055.3CheckoutProfile: Median: 53.25 (Q1: 49.875, Q3: 55.95, Minimum: 41.8, Maximum: 64.1), Mean: 52.515, Outliers: 35.6, 35.9, 36.6, 66.6, Observations 6053.25Profile

Source: Illustrative measurements, 60 requests each

Show chart data
Data for Response times by endpoint
CategoryMinimumQ1MedianMeanQ3MaximumOutliers
Search18.129.42537.737.741666666743.72560.666.8
Checkout29.941.355.358.851666666777.02589.3
Profile41.849.87553.2552.51555.9564.135.6, 35.9, 36.6, 66.6
  • Violin plot
  • Show the shape of a distribution

Response times by endpoint, every request

examples/response-swarm.jsonDetail: Response times by endpoint, every request →
{
  "schemaVersion": 1,
  "type": "boxplot",
  "boxDisplay": "beeswarm",
  "showBox": true,
  "title": "Response times by endpoint, every request",
  "source": "Illustrative measurements, 60 requests each",
  "width": 760,
  "height": 440,
  "valueAxis": {
    "title": "Milliseconds"
  },
  "boxes": [
    {
      "label": "Search",
      "values": [
        33.5,
        43.8,
        33.8,
        32.8,
        26.4,
        34,
        54,
        42.5,
        52.6,
        39.9,
        42,
        39.1,
        20.4,
        49.4,
        43.7,
        43.6,
        20.2,
        19.9,
        26.8,
        31.1,
        40.7,
        36,
        43.9,
        29.2,
        40.8,
        42,
        29,
        66.8,
        44.5,
        55.6,
        29.5,
        28.3,
        32.4,
        35.3,
        45.7,
        39.9,
        31.3,
        26.2,
        30.5,
        56.1,
        27.6,
        39.9,
        42.5,
        21.7,
        37.2,
        57.8,
        18.1,
        32.7,
        35.3,
        27.5,
        43.6,
        35.8,
        21.9,
        48.9,
        46.3,
        51,
        60.6,
        41.5,
        38.2,
        23.2
      ]
    },
    {
      "label": "Checkout",
      "values": [
        42.5,
        37.6,
        38.2,
        34.9,
        36.1,
        37.9,
        45.2,
        31.9,
        34.2,
        41,
        45.8,
        42.3,
        32.4,
        29.9,
        41.4,
        37.1,
        35.5,
        43.9,
        44.4,
        40.6,
        41,
        41.7,
        46.4,
        42.5,
        42.1,
        42.2,
        33.7,
        45.1,
        43.8,
        42.1,
        64.2,
        73.6,
        83.9,
        65.3,
        76.7,
        85.1,
        68.8,
        89.3,
        81.9,
        76.9,
        80.3,
        82.5,
        78.8,
        86,
        73.4,
        75.1,
        85.3,
        78.2,
        71.8,
        84.6,
        88.3,
        74.9,
        68.3,
        77.1,
        77,
        75.9,
        87.8,
        70.8,
        86.8,
        69.1
      ]
    },
    {
      "label": "Profile",
      "values": [
        47.3,
        55.8,
        58.8,
        57.2,
        54.1,
        52.9,
        52.9,
        55.5,
        50.9,
        53.7,
        55.4,
        52,
        56.6,
        55.4,
        64.1,
        53.9,
        49.4,
        49.8,
        51.9,
        57.5,
        50,
        54.3,
        63,
        36.6,
        45.3,
        53.5,
        54.4,
        53.4,
        49.4,
        55.9,
        53.7,
        48.9,
        66.6,
        54.1,
        48.7,
        51.4,
        50.6,
        51.6,
        35.6,
        49.1,
        58.1,
        45,
        51.6,
        57.7,
        57.1,
        60.9,
        41.8,
        49.9,
        50,
        55.7,
        58.6,
        35.9,
        58.5,
        43.3,
        56.1,
        43,
        53.1,
        59.2,
        51.1,
        53.1
      ]
    }
  ],
  "mobile": {
    "width": 380,
    "height": 480
  }
}
Response times by endpoint, every request
Response times by endpoint, every requestBox plot with 3 boxes, each from the first to the third quartile with its median. Highest median: 55.3 (Checkout). Lowest median: 37.7 (Search). Outliers beyond the whiskers: Search, Profile. Every observation is drawn as a dot, moved sideways so that no two dots overlap.020406080100MillisecondsSearch: Median: 37.7 (Q1: 29.425, Q3: 43.725, Minimum: 18.1, Maximum: 60.6), Observations 60Search: 33.5Search: 43.8Search: 33.8Search: 32.8Search: 26.4Search: 34Search: 54Search: 42.5Search: 52.6Search: 39.9Search: 42Search: 39.1Search: 20.4Search: 49.4Search: 43.7Search: 43.6Search: 20.2Search: 19.9Search: 26.8Search: 31.1Search: 40.7Search: 36Search: 43.9Search: 29.2Search: 40.8Search: 42Search: 29Search: 66.8Search: 44.5Search: 55.6Search: 29.5Search: 28.3Search: 32.4Search: 35.3Search: 45.7Search: 39.9Search: 31.3Search: 26.2Search: 30.5Search: 56.1Search: 27.6Search: 39.9Search: 42.5Search: 21.7Search: 37.2Search: 57.8Search: 18.1Search: 32.7Search: 35.3Search: 27.5Search: 43.6Search: 35.8Search: 21.9Search: 48.9Search: 46.3Search: 51Search: 60.6Search: 41.5Search: 38.2Search: 23.237.7SearchCheckout: Median: 55.3 (Q1: 41.3, Q3: 77.025, Minimum: 29.9, Maximum: 89.3), Observations 60Checkout: 42.5Checkout: 37.6Checkout: 38.2Checkout: 34.9Checkout: 36.1Checkout: 37.9Checkout: 45.2Checkout: 31.9Checkout: 34.2Checkout: 41Checkout: 45.8Checkout: 42.3Checkout: 32.4Checkout: 29.9Checkout: 41.4Checkout: 37.1Checkout: 35.5Checkout: 43.9Checkout: 44.4Checkout: 40.6Checkout: 41Checkout: 41.7Checkout: 46.4Checkout: 42.5Checkout: 42.1Checkout: 42.2Checkout: 33.7Checkout: 45.1Checkout: 43.8Checkout: 42.1Checkout: 64.2Checkout: 73.6Checkout: 83.9Checkout: 65.3Checkout: 76.7Checkout: 85.1Checkout: 68.8Checkout: 89.3Checkout: 81.9Checkout: 76.9Checkout: 80.3Checkout: 82.5Checkout: 78.8Checkout: 86Checkout: 73.4Checkout: 75.1Checkout: 85.3Checkout: 78.2Checkout: 71.8Checkout: 84.6Checkout: 88.3Checkout: 74.9Checkout: 68.3Checkout: 77.1Checkout: 77Checkout: 75.9Checkout: 87.8Checkout: 70.8Checkout: 86.8Checkout: 69.155.3CheckoutProfile: Median: 53.25 (Q1: 49.875, Q3: 55.95, Minimum: 41.8, Maximum: 64.1), Observations 60Profile: 47.3Profile: 55.8Profile: 58.8Profile: 57.2Profile: 54.1Profile: 52.9Profile: 52.9Profile: 55.5Profile: 50.9Profile: 53.7Profile: 55.4Profile: 52Profile: 56.6Profile: 55.4Profile: 64.1Profile: 53.9Profile: 49.4Profile: 49.8Profile: 51.9Profile: 57.5Profile: 50Profile: 54.3Profile: 63Profile: 36.6Profile: 45.3Profile: 53.5Profile: 54.4Profile: 53.4Profile: 49.4Profile: 55.9Profile: 53.7Profile: 48.9Profile: 66.6Profile: 54.1Profile: 48.7Profile: 51.4Profile: 50.6Profile: 51.6Profile: 35.6Profile: 49.1Profile: 58.1Profile: 45Profile: 51.6Profile: 57.7Profile: 57.1Profile: 60.9Profile: 41.8Profile: 49.9Profile: 50Profile: 55.7Profile: 58.6Profile: 35.9Profile: 58.5Profile: 43.3Profile: 56.1Profile: 43Profile: 53.1Profile: 59.2Profile: 51.1Profile: 53.153.25Profile
Response times by endpoint, every requestBox plot with 3 boxes, each from the first to the third quartile with its median. Highest median: 55.3 (Checkout). Lowest median: 37.7 (Search). Outliers beyond the whiskers: Search, Profile. Every observation is drawn as a dot, moved sideways so that no two dots overlap.020406080100MillisecondsSearch: Median: 37.7 (Q1: 29.425, Q3: 43.725, Minimum: 18.1, Maximum: 60.6), Observations 60Search: 33.5Search: 43.8Search: 33.8Search: 32.8Search: 26.4Search: 34Search: 54Search: 42.5Search: 52.6Search: 39.9Search: 42Search: 39.1Search: 20.4Search: 49.4Search: 43.7Search: 43.6Search: 20.2Search: 19.9Search: 26.8Search: 31.1Search: 40.7Search: 36Search: 43.9Search: 29.2Search: 40.8Search: 42Search: 29Search: 66.8Search: 44.5Search: 55.6Search: 29.5Search: 28.3Search: 32.4Search: 35.3Search: 45.7Search: 39.9Search: 31.3Search: 26.2Search: 30.5Search: 56.1Search: 27.6Search: 39.9Search: 42.5Search: 21.7Search: 37.2Search: 57.8Search: 18.1Search: 32.7Search: 35.3Search: 27.5Search: 43.6Search: 35.8Search: 21.9Search: 48.9Search: 46.3Search: 51Search: 60.6Search: 41.5Search: 38.2Search: 23.237.7SearchCheckout: Median: 55.3 (Q1: 41.3, Q3: 77.025, Minimum: 29.9, Maximum: 89.3), Observations 60Checkout: 42.5Checkout: 37.6Checkout: 38.2Checkout: 34.9Checkout: 36.1Checkout: 37.9Checkout: 45.2Checkout: 31.9Checkout: 34.2Checkout: 41Checkout: 45.8Checkout: 42.3Checkout: 32.4Checkout: 29.9Checkout: 41.4Checkout: 37.1Checkout: 35.5Checkout: 43.9Checkout: 44.4Checkout: 40.6Checkout: 41Checkout: 41.7Checkout: 46.4Checkout: 42.5Checkout: 42.1Checkout: 42.2Checkout: 33.7Checkout: 45.1Checkout: 43.8Checkout: 42.1Checkout: 64.2Checkout: 73.6Checkout: 83.9Checkout: 65.3Checkout: 76.7Checkout: 85.1Checkout: 68.8Checkout: 89.3Checkout: 81.9Checkout: 76.9Checkout: 80.3Checkout: 82.5Checkout: 78.8Checkout: 86Checkout: 73.4Checkout: 75.1Checkout: 85.3Checkout: 78.2Checkout: 71.8Checkout: 84.6Checkout: 88.3Checkout: 74.9Checkout: 68.3Checkout: 77.1Checkout: 77Checkout: 75.9Checkout: 87.8Checkout: 70.8Checkout: 86.8Checkout: 69.155.3CheckoutProfile: Median: 53.25 (Q1: 49.875, Q3: 55.95, Minimum: 41.8, Maximum: 64.1), Observations 60Profile: 47.3Profile: 55.8Profile: 58.8Profile: 57.2Profile: 54.1Profile: 52.9Profile: 52.9Profile: 55.5Profile: 50.9Profile: 53.7Profile: 55.4Profile: 52Profile: 56.6Profile: 55.4Profile: 64.1Profile: 53.9Profile: 49.4Profile: 49.8Profile: 51.9Profile: 57.5Profile: 50Profile: 54.3Profile: 63Profile: 36.6Profile: 45.3Profile: 53.5Profile: 54.4Profile: 53.4Profile: 49.4Profile: 55.9Profile: 53.7Profile: 48.9Profile: 66.6Profile: 54.1Profile: 48.7Profile: 51.4Profile: 50.6Profile: 51.6Profile: 35.6Profile: 49.1Profile: 58.1Profile: 45Profile: 51.6Profile: 57.7Profile: 57.1Profile: 60.9Profile: 41.8Profile: 49.9Profile: 50Profile: 55.7Profile: 58.6Profile: 35.9Profile: 58.5Profile: 43.3Profile: 56.1Profile: 43Profile: 53.1Profile: 59.2Profile: 51.1Profile: 53.153.25Profile

Source: Illustrative measurements, 60 requests each

Show chart data
Data for Response times by endpoint, every request
CategoryMinimumQ1MedianQ3MaximumOutliers
Search18.129.42537.743.72560.666.8
Checkout29.941.355.377.02589.3
Profile41.849.87553.2555.9564.135.6, 35.9, 36.6, 66.6
  • Beeswarm plot
  • Show every observation without hiding any behind another

Response time distribution by service

examples/response-ridges.jsonDetail: Response time distribution by service →
{
  "schemaVersion": 1,
  "type": "boxplot",
  "boxDisplay": "ridgeline",
  "orientation": "horizontal",
  "title": "Response time distribution by service",
  "source": "Illustrative measurements, 90 requests each",
  "width": 760,
  "height": 460,
  "valueAxis": {
    "title": "Milliseconds"
  },
  "boxes": [
    {
      "label": "Search",
      "values": [
        42.4,
        38.3,
        27.3,
        46.5,
        40.8,
        41.4,
        39.7,
        53.1,
        46.9,
        49.8,
        35.4,
        33.8,
        28.4,
        35.8,
        12.3,
        53.7,
        39.5,
        39,
        46.5,
        34.6,
        40.6,
        45.6,
        23.2,
        54.8,
        39.6,
        44.1,
        28.2,
        32.2,
        54.5,
        33.1,
        34.3,
        42.8,
        52,
        14.9,
        52.4,
        40.8,
        46.8,
        28.4,
        41.2,
        53.7,
        37.3,
        32.1,
        34,
        33.1,
        45.9,
        40.1,
        33.4,
        45.8,
        27.7,
        24.4,
        61.9,
        32.1,
        53.9,
        37.4,
        36.1,
        43.3,
        29.9,
        30.1,
        36.2,
        34.5,
        45.1,
        57,
        26.8,
        29.7,
        45.5,
        43.1,
        49,
        31,
        44,
        37.7,
        22.5,
        42.5,
        23.1,
        43.4,
        33.8,
        36.3,
        58.9,
        53,
        42.3,
        42,
        30.7,
        50.2,
        44.2,
        29.9,
        22.1,
        38.2,
        36.5,
        46.6,
        28.3,
        29.7
      ]
    },
    {
      "label": "Checkout",
      "values": [
        42.4,
        40.6,
        45.2,
        46.1,
        35.3,
        27.4,
        40.4,
        36.2,
        41.4,
        25.6,
        39.6,
        40.6,
        37.1,
        42.9,
        40.7,
        41.4,
        47.1,
        47.1,
        46.6,
        42.1,
        40.9,
        43.2,
        41.8,
        36.2,
        42.2,
        45,
        37.9,
        34.3,
        43.2,
        36.1,
        32.1,
        38.8,
        32.3,
        41.9,
        37.4,
        40.6,
        46.2,
        46.1,
        39.6,
        28,
        37.6,
        33.9,
        44.9,
        48.5,
        43.9,
        83.7,
        83,
        84.1,
        75,
        85.9,
        75.6,
        68.3,
        78.6,
        91.9,
        76.6,
        63.1,
        88.8,
        80.3,
        82.9,
        74.2,
        82.3,
        92,
        72.7,
        84.1,
        81.2,
        70.8,
        79.8,
        83.3,
        71,
        88.2,
        68.7,
        88.1,
        83.5,
        80.4,
        71.5,
        71.5,
        59.3,
        78,
        77.1,
        83,
        87,
        79.9,
        75.4,
        86.7,
        78.2,
        78,
        68.2,
        87.2,
        72.5,
        94.8
      ]
    },
    {
      "label": "Profile",
      "values": [
        47.6,
        50.1,
        53.7,
        48.7,
        43.8,
        45.9,
        47.9,
        51.7,
        59.5,
        57.4,
        55.2,
        58.4,
        39.2,
        49.2,
        49.6,
        46.6,
        56.2,
        49,
        46.1,
        58.9,
        49,
        51.6,
        43.5,
        58.9,
        53.5,
        62.4,
        67.2,
        57.4,
        50.9,
        48.1,
        63.6,
        51.9,
        57.2,
        54.7,
        31.7,
        54.1,
        54.2,
        54.4,
        52.3,
        54.7,
        46.7,
        57,
        49.9,
        54.2,
        63.7,
        54.6,
        46.6,
        55.5,
        44,
        54.3,
        62.1,
        46.4,
        52.2,
        47.6,
        54.3,
        55.3,
        54.3,
        51.4,
        41.1,
        47.5,
        50.4,
        58.4,
        40.4,
        60.1,
        48.4,
        42.5,
        62.4,
        55.3,
        47.2,
        54.8,
        57,
        44.1,
        61.3,
        47.8,
        58.4,
        49.6,
        43.1,
        49.4,
        49.9,
        53.9,
        42.6,
        46.8,
        55.1,
        50.7,
        49.8,
        55.9,
        44.8,
        65.8,
        48.4,
        55.5
      ]
    },
    {
      "label": "Upload",
      "values": [
        91.7,
        118.5,
        85.3,
        77.4,
        101.1,
        109.5,
        92,
        142.8,
        112.9,
        127.2,
        125,
        119.3,
        91.2,
        133.1,
        86.9,
        98.7,
        127.7,
        117.1,
        70.5,
        88.4,
        74.8,
        122,
        87.2,
        95.9,
        79.6,
        83.7,
        110.8,
        72.2,
        96.7,
        84,
        87,
        65.9,
        122.1,
        58.2,
        67.1,
        85.6,
        96.8,
        77.9,
        57.8,
        84.2,
        72.2,
        79.6,
        131.9,
        47.9,
        94.5,
        103.7,
        85.6,
        86.8,
        119.5,
        90.3,
        55.4,
        86.4,
        103.3,
        86.1,
        81.7,
        99,
        83.6,
        97.9,
        109.8,
        80.6,
        59,
        125.1,
        103.9,
        77.2,
        62.5,
        95,
        99.5,
        106,
        103.2,
        84.8,
        85.6,
        60.3,
        78,
        84,
        119.2,
        64.9,
        137.3,
        115.3,
        83.1,
        81.2,
        99.9,
        103.7,
        111.1,
        55.4,
        87,
        106.3,
        115.4,
        105.1,
        92.9,
        101.9
      ]
    },
    {
      "label": "Reports",
      "values": [
        54.3,
        86.8,
        75.1,
        67.7,
        53.7,
        61.3,
        67.4,
        63.2,
        85.5,
        91.8,
        76.1,
        45.3,
        72,
        54.7,
        62.1,
        90.3,
        37.1,
        42.3,
        52.9,
        73.2,
        56.2,
        33.6,
        67.5,
        71.4,
        79.9,
        63.5,
        78.1,
        53.6,
        74.8,
        79.3,
        58.1,
        56.7,
        79.6,
        51.4,
        49.2,
        62.8,
        70.4,
        75.3,
        55.2,
        69.6,
        49.5,
        45.6,
        97.3,
        51.6,
        40.3,
        66.7,
        51.4,
        72.5,
        26,
        45.9,
        77.1,
        66.1,
        48.9,
        83.7,
        77.1,
        57.2,
        78.5,
        71,
        44,
        50.9,
        111.9,
        99,
        93.7,
        104.8,
        117.3,
        111.3,
        99.5,
        84.5,
        117.6,
        107.2,
        118,
        108.6,
        104.4,
        111.7,
        102,
        104,
        100,
        87,
        120.2,
        120.5,
        103.6,
        105.2,
        133.1,
        115.2,
        105.3,
        96.8,
        127.2,
        122.9,
        101,
        116.6
      ]
    }
  ],
  "mobile": {
    "width": 380,
    "height": 520
  }
}
Response time distribution by service
Response time distribution by serviceBox plot with 5 boxes, each from the first to the third quartile with its median. Highest median: 91.45 (Upload). Lowest median: 39.25 (Search). Outliers beyond the whiskers: Profile. Each category is a density curve of its observations on a shared value axis, the curves stacked with a slight overlap.050100150MillisecondsSearch: Median: 39.25 (Q1: 32.125, Q3: 45.575, Minimum: 12.3, Maximum: 61.9), Observations 9039.25SearchCheckout: Median: 53.9 (Q1: 40.75, Q3: 79.875, Minimum: 25.6, Maximum: 94.8), Observations 9053.9CheckoutProfile: Median: 51.8 (Q1: 47.65, Q3: 55.5, Minimum: 39.2, Maximum: 67.2), Outliers: 31.7, Observations 9051.8ProfileUpload: Median: 91.45 (Q1: 81.325, Q3: 106.225, Minimum: 47.9, Maximum: 142.8), Observations 9091.45UploadReports: Median: 75.2 (Q1: 56.325, Q3: 100.75, Minimum: 26, Maximum: 133.1), Observations 9075.2Reports
Response time distribution by serviceBox plot with 5 boxes, each from the first to the third quartile with its median. Highest median: 91.45 (Upload). Lowest median: 39.25 (Search). Outliers beyond the whiskers: Profile. Each category is a density curve of its observations on a shared value axis, the curves stacked with a slight overlap.050100150MillisecondsSearch: Median: 39.25 (Q1: 32.125, Q3: 45.575, Minimum: 12.3, Maximum: 61.9), Observations 9039.25SearchCheckout: Median: 53.9 (Q1: 40.75, Q3: 79.875, Minimum: 25.6, Maximum: 94.8), Observations 9053.9CheckoutProfile: Median: 51.8 (Q1: 47.65, Q3: 55.5, Minimum: 39.2, Maximum: 67.2), Outliers: 31.7, Observations 9051.8ProfileUpload: Median: 91.45 (Q1: 81.325, Q3: 106.225, Minimum: 47.9, Maximum: 142.8), Observations 9091.45UploadReports: Median: 75.2 (Q1: 56.325, Q3: 100.75, Minimum: 26, Maximum: 133.1), Observations 9075.2Reports

Source: Illustrative measurements, 90 requests each

Show chart data
Data for Response time distribution by service
CategoryMinimumQ1MedianQ3MaximumOutliers
Search12.332.12539.2545.57561.9
Checkout25.640.7553.979.87594.8
Profile39.247.6551.855.567.231.7
Upload47.981.32591.45106.225142.8
Reports2656.32575.2100.75133.1
  • Ridgeline plot
  • Compare the shapes of many distributions on one axis

From revenue to profit

examples/revenue-to-profit.jsonDetail: From revenue to profit →
{
  "schemaVersion": 1,
  "type": "waterfall",
  "title": "From revenue to profit",
  "source": "Illustrative figures, in thousands",
  "width": 860,
  "height": 420,
  "showValues": true,
  "valueAxis": {
    "title": "Thousands of euros",
    "thousandsSeparator": true
  },
  "waterfall": {
    "steps": [
      {
        "label": "Revenue",
        "value": 1250,
        "kind": "start"
      },
      {
        "label": "Materials",
        "value": -420
      },
      {
        "label": "Staff",
        "value": -380
      },
      {
        "label": "Gross margin",
        "kind": "total"
      },
      {
        "label": "Marketing",
        "value": -140
      },
      {
        "label": "Licenses",
        "value": 60
      },
      {
        "label": "Depreciation",
        "value": -95
      },
      {
        "label": "Operating profit",
        "kind": "total"
      }
    ]
  },
  "mobile": {
    "width": 400,
    "height": 440
  }
}
From revenue to profit
From revenue to profitWaterfall with 8 steps, ending at 275. Biggest rise: Licenses (+60). Biggest fall: Materials (−420).05001,0001,500Thousands of eurosRevenue: 1,250, total 1,2501,250RevenueMaterials: −420, total 830−420MaterialsStaff: −380, total 450−380StaffGross margin: 450, total 450450Gross marginMarketing: −140, total 310−140MarketingLicenses: +60, total 370+60LicensesDepreciation: −95, total 275−95DepreciationOperating profit: 275, total 275275Operatingprofit
From revenue to profitWaterfall with 8 steps, ending at 275. Biggest rise: Licenses (+60). Biggest fall: Materials (−420).05001,0001,500Thousands of eurosRevenue: 1,250, total 1,2501,250Rev…Materials: −420, total 830−420Ma…Staff: −380, total 450−380Sta…Gross margin: 450, total 450450Gro…Marketing: −140, total 310−140Ma…Licenses: +60, total 370+60Lic…Depreciation: −95, total 275−95Dep…Operating profit: 275, total 275275Ope…

Source: Illustrative figures, in thousands

Show chart data
Data for From revenue to profit
StepKindValueTotal
RevenueStart1,2501,250
MaterialsChange−420830
StaffChange−380450
Gross marginTotal450450
MarketingChange−140310
LicensesChange+60370
DepreciationChange−95275
Operating profitTotal275275
  • Waterfall chart
  • Explain how a total comes about

Two storage engines compared

examples/framework-profile.jsonDetail: Two storage engines compared →
{
  "schemaVersion": 1,
  "type": "radar",
  "title": "Two storage engines compared",
  "source": "Illustrative benchmark scores, 0 to 100",
  "width": 680,
  "height": 480,
  "radar": {
    "axes": [
      {
        "label": "Read",
        "max": 100
      },
      {
        "label": "Write",
        "max": 100
      },
      {
        "label": "Durability",
        "max": 100
      },
      {
        "label": "Memory",
        "max": 100
      },
      {
        "label": "Tooling",
        "max": 100
      },
      {
        "label": "Ease of use",
        "max": 100
      }
    ],
    "series": [
      {
        "name": "Engine A",
        "values": [
          92,
          58,
          74,
          40,
          85,
          66
        ]
      },
      {
        "name": "Engine B",
        "values": [
          64,
          88,
          90,
          72,
          55,
          48
        ]
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 460
  }
}
Two storage engines compared
Two storage engines comparedRadar chart of 6 axes (Read, Write, Durability, Memory, Tooling, Ease of use) with 2 series. Engine A: strongest on Read (92), weakest on Memory (40). Engine B: strongest on Durability (90), weakest on Ease of use (48).Engine AEngine B255075100ReadWriteDurabilityMemoryToolingEase of useEngine AEngine A, Read: 92Engine A, Write: 58Engine A, Durability: 74Engine A, Memory: 40Engine A, Tooling: 85Engine A, Ease of use: 66Engine BEngine B, Read: 64Engine B, Write: 88Engine B, Durability: 90Engine B, Memory: 72Engine B, Tooling: 55Engine B, Ease of use: 48
Two storage engines comparedRadar chart of 6 axes (Read, Write, Durability, Memory, Tooling, Ease of use) with 2 series. Engine A: strongest on Read (92), weakest on Memory (40). Engine B: strongest on Durability (90), weakest on Ease of use (48).Engine AEngine B255075100ReadWriteDurabilityMemoryToolingEase of useEngine AEngine A, Read: 92Engine A, Write: 58Engine A, Durability: 74Engine A, Memory: 40Engine A, Tooling: 85Engine A, Ease of use: 66Engine BEngine B, Read: 64Engine B, Write: 88Engine B, Durability: 90Engine B, Memory: 72Engine B, Tooling: 55Engine B, Ease of use: 48

Source: Illustrative benchmark scores, 0 to 100

Show chart data
Data for Two storage engines compared
AxisRangeEngine AEngine B
Read0–1009264
Write0–1005888
Durability0–1007490
Memory0–1004072
Tooling0–1008555
Ease of use0–1006648
  • Radar chart
  • Compare profiles on several measures

Rainfall by month

examples/monthly-rainfall.jsonDetail: Rainfall by month →
{
  "schemaVersion": 1,
  "type": "polar",
  "title": "Rainfall by month",
  "source": "Illustrative monthly totals of one weather station",
  "width": 640,
  "height": 480,
  "polar": {
    "valueLabel": "Millimeters",
    "points": [
      {
        "label": "Jan",
        "value": 52
      },
      {
        "label": "Feb",
        "value": 41
      },
      {
        "label": "Mar",
        "value": 47
      },
      {
        "label": "Apr",
        "value": 43
      },
      {
        "label": "May",
        "value": 62
      },
      {
        "label": "Jun",
        "value": 78
      },
      {
        "label": "Jul",
        "value": 85
      },
      {
        "label": "Aug",
        "value": 71
      },
      {
        "label": "Sep",
        "value": 58
      },
      {
        "label": "Oct",
        "value": 55
      },
      {
        "label": "Nov",
        "value": 60
      },
      {
        "label": "Dec",
        "value": 57
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 420
  }
}
Rainfall by month
Rainfall by monthPolar chart of 12 categories, from the top clockwise: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec. Highest: Jul (85); lowest: Feb (41). Millimeters runs from 0 at the center to 100 at the outer ring.Jan: 52Feb: 41Mar: 47Apr: 43May: 62Jun: 78Jul: 85Aug: 71Sep: 58Oct: 55Nov: 60Dec: 57255075100JanFebMarAprMayJunJulAugSepOctNovDec
Rainfall by monthPolar chart of 12 categories, from the top clockwise: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec. Highest: Jul (85); lowest: Feb (41). Millimeters runs from 0 at the center to 100 at the outer ring.Jan: 52Feb: 41Mar: 47Apr: 43May: 62Jun: 78Jul: 85Aug: 71Sep: 58Oct: 55Nov: 60Dec: 57255075100JanFebMarAprMayJunJulAugSepOctNovDec

Source: Illustrative monthly totals of one weather station

Show chart data
Data for Rainfall by month
CategoryMillimeters
Jan52
Feb41
Mar47
Apr43
May62
Jun78
Jul85
Aug71
Sep58
Oct55
Nov60
Dec57
  • Polar chart
  • Show a yearly cycle

Wind by direction

examples/wind-directions.jsonDetail: Wind by direction →
{
  "schemaVersion": 1,
  "type": "polar",
  "title": "Wind by direction",
  "source": "Illustrative share of hours per year the wind blows from each direction",
  "width": 640,
  "height": 480,
  "polar": {
    "display": "lollipops",
    "valueLabel": "Percent of hours",
    "points": [
      {
        "label": "N",
        "value": 6
      },
      {
        "label": "NE",
        "value": 9
      },
      {
        "label": "E",
        "value": 8
      },
      {
        "label": "SE",
        "value": 7
      },
      {
        "label": "S",
        "value": 11
      },
      {
        "label": "SW",
        "value": 24
      },
      {
        "label": "W",
        "value": 21
      },
      {
        "label": "NW",
        "value": 14
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 420
  }
}
Wind by direction
Wind by directionPolar chart of 8 categories, from the top clockwise: N, NE, E, SE, S, SW, W, NW. Highest: SW (24); lowest: N (6). Percent of hours runs from 0 at the center to 24 at the outer ring.N: 6NE: 9E: 8SE: 7S: 11SW: 24W: 21NW: 146121824NNEESESSWWNW
Wind by directionPolar chart of 8 categories, from the top clockwise: N, NE, E, SE, S, SW, W, NW. Highest: SW (24); lowest: N (6). Percent of hours runs from 0 at the center to 24 at the outer ring.N: 6NE: 9E: 8SE: 7S: 11SW: 24W: 21NW: 146121824NNEESESSWWNW

Source: Illustrative share of hours per year the wind blows from each direction

Show chart data
Data for Wind by direction
CategoryPercent of hours
N6
NE9
E8
SE7
S11
SW24
W21
NW14
  • Polar chart (lollipops)
  • Show where it blows from

Product portfolio: growth, margin and revenue

examples/product-portfolio.jsonDetail: Product portfolio: growth, margin and revenue →
{
  "schemaVersion": 1,
  "type": "scatter",
  "title": "Product portfolio: growth, margin and revenue",
  "source": "Illustrative figures of a product line",
  "width": 760,
  "height": 480,
  "scatter": {
    "points": [
      {
        "x": 4,
        "y": 38,
        "size": 420,
        "group": "Software",
        "label": "Analytics"
      },
      {
        "x": 12,
        "y": 31,
        "size": 180,
        "group": "Software",
        "label": "Billing"
      },
      {
        "x": 22,
        "y": 24,
        "size": 90,
        "group": "Software",
        "label": "Search"
      },
      {
        "x": 2,
        "y": 12,
        "size": 650,
        "group": "Hardware",
        "label": "Gateways"
      },
      {
        "x": 8,
        "y": 9,
        "size": 240,
        "group": "Hardware",
        "label": "Sensors"
      },
      {
        "x": 16,
        "y": 17,
        "size": 60,
        "group": "Hardware",
        "label": "Displays"
      },
      {
        "x": 27,
        "y": 6,
        "size": 30,
        "group": "Hardware",
        "label": "Wearables"
      }
    ],
    "xTitle": "Market growth, percent per year",
    "yTitle": "Operating margin, percent",
    "sizeTitle": "Revenue, million euros"
  },
  "mobile": {
    "width": 380,
    "height": 480
  }
}
Product portfolio: growth, margin and revenue
Product portfolio: growth, margin and revenueScatter plot of 7 points: x from 2 to 27, y from 6 to 38. Groups (points): Software 3, Hardware 4. The area of a point shows Revenue, million euros, from 30 to 650; the largest is Gateways.SoftwareHardwareRevenue, million euros500100200102030400102030Market growth, percent per yearOperating margin, percentGateways: 2, 12, Revenue, million euros: 650650Analytics: 4, 38, Revenue, million euros: 420420Sensors: 8, 9, Revenue, million euros: 240240Billing: 12, 31, Revenue, million euros: 180180Search: 22, 24, Revenue, million euros: 90Displays: 16, 17, Revenue, million euros: 60Wearables: 27, 6, Revenue, million euros: 30AnalyticsBillingSearchGatewaysSensorsDisplaysWearables
Product portfolio: growth, margin and revenueScatter plot of 7 points: x from 2 to 27, y from 6 to 38. Groups (points): Software 3, Hardware 4. The area of a point shows Revenue, million euros, from 30 to 650; the largest is Gateways.SoftwareHardwareRevenue, million euros500100200102030400102030Market growth, percent per yearOperating margin, percentGateways: 2, 12, Revenue, million euros: 650650Analytics: 4, 38, Revenue, million euros: 420Sensors: 8, 9, Revenue, million euros: 240Billing: 12, 31, Revenue, million euros: 180Search: 22, 24, Revenue, million euros: 90Displays: 16, 17, Revenue, million euros: 60Wearables: 27, 6, Revenue, million euros: 30AnalyticsBillingSearchGatewaysSensorsDisplaysWearables

Source: Illustrative figures of a product line

Show chart data
Data for Product portfolio: growth, margin and revenue
PointGroupMarket growth, percent per yearOperating margin, percentRevenue, million euros
AnalyticsSoftware438420
BillingSoftware1231180
SearchSoftware222490
GatewaysHardware212650
SensorsHardware89240
DisplaysHardware161760
WearablesHardware27630
  • Bubble chart
  • Weigh growth, margin and revenue

Median first response, in minutes

examples/weekly-response.jsonDetail: Median first response, in minutes →
{
  "schemaVersion": 1,
  "type": "heatmap",
  "title": "Median first response, in minutes",
  "source": "Illustrative support data of one week",
  "width": 760,
  "height": 420,
  "heatmap": {
    "rows": [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday"
    ],
    "columns": [
      "08–10",
      "10–12",
      "12–14",
      "14–16",
      "16–18"
    ],
    "valueLabel": "Minutes",
    "cells": [
      {
        "row": "Monday",
        "column": "08–10",
        "value": 42
      },
      {
        "row": "Monday",
        "column": "10–12",
        "value": 35
      },
      {
        "row": "Monday",
        "column": "12–14",
        "value": 28
      },
      {
        "row": "Monday",
        "column": "14–16",
        "value": 31
      },
      {
        "row": "Monday",
        "column": "16–18",
        "value": 47
      },
      {
        "row": "Tuesday",
        "column": "08–10",
        "value": 30
      },
      {
        "row": "Tuesday",
        "column": "10–12",
        "value": 22
      },
      {
        "row": "Tuesday",
        "column": "12–14",
        "value": 19
      },
      {
        "row": "Tuesday",
        "column": "14–16",
        "value": 24
      },
      {
        "row": "Tuesday",
        "column": "16–18",
        "value": 38
      },
      {
        "row": "Wednesday",
        "column": "08–10",
        "value": 27
      },
      {
        "row": "Wednesday",
        "column": "10–12",
        "value": 18
      },
      {
        "row": "Wednesday",
        "column": "14–16",
        "value": 21
      },
      {
        "row": "Wednesday",
        "column": "16–18",
        "value": 36
      },
      {
        "row": "Thursday",
        "column": "08–10",
        "value": 33
      },
      {
        "row": "Thursday",
        "column": "10–12",
        "value": 25
      },
      {
        "row": "Thursday",
        "column": "12–14",
        "value": 23
      },
      {
        "row": "Thursday",
        "column": "14–16",
        "value": 29
      },
      {
        "row": "Thursday",
        "column": "16–18",
        "value": 44
      },
      {
        "row": "Friday",
        "column": "08–10",
        "value": 39
      },
      {
        "row": "Friday",
        "column": "10–12",
        "value": 34
      },
      {
        "row": "Friday",
        "column": "12–14",
        "value": 41
      },
      {
        "row": "Friday",
        "column": "14–16",
        "value": 52
      },
      {
        "row": "Friday",
        "column": "16–18",
        "value": 61
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 460
  }
}
Median first response, in minutes
Median first response, in minutesHeatmap of 5 rows by 5 columns. Color shows Minutes, from 18 (lowest: Wednesday, 10–12 (18)) to 61 (highest: Friday, 16–18 (61)). 1 without a value.08–1010–1212–1414–1616–18MondayMonday, 08–10: 4242Monday, 10–12: 3535Monday, 12–14: 2828Monday, 14–16: 3131Monday, 16–18: 4747TuesdayTuesday, 08–10: 3030Tuesday, 10–12: 2222Tuesday, 12–14: 1919Tuesday, 14–16: 2424Tuesday, 16–18: 3838WednesdayWednesday, 08–10: 2727Wednesday, 10–12: 1818Wednesday, 12–14: no valueWednesday, 14–16: 2121Wednesday, 16–18: 3636ThursdayThursday, 08–10: 3333Thursday, 10–12: 2525Thursday, 12–14: 2323Thursday, 14–16: 2929Thursday, 16–18: 4444FridayFriday, 08–10: 3939Friday, 10–12: 3434Friday, 12–14: 4141Friday, 14–16: 5252Friday, 16–18: 6161Minutes1861no value
Median first response, in minutesHeatmap of 5 rows by 5 columns. Color shows Minutes, from 18 (lowest: Wednesday, 10–12 (18)) to 61 (highest: Friday, 16–18 (61)). 1 without a value.08–1010–1212–1414–1616–18MondayMonday, 08–10: 4242Monday, 10–12: 3535Monday, 12–14: 2828Monday, 14–16: 3131Monday, 16–18: 4747TuesdayTuesday, 08–10: 3030Tuesday, 10–12: 2222Tuesday, 12–14: 1919Tuesday, 14–16: 2424Tuesday, 16–18: 3838WednesdayWednesday, 08–10: 2727Wednesday, 10–12: 1818Wednesday, 12–14: no valueWednesday, 14–16: 2121Wednesday, 16–18: 3636ThursdayThursday, 08–10: 3333Thursday, 10–12: 2525Thursday, 12–14: 2323Thursday, 14–16: 2929Thursday, 16–18: 4444FridayFriday, 08–10: 3939Friday, 10–12: 3434Friday, 12–14: 4141Friday, 14–16: 5252Friday, 16–18: 6161Minutes1861no value

Source: Illustrative support data of one week

Show chart data
Data for Median first response, in minutes
RowColumnMinutes
Monday08–1042
Monday10–1235
Monday12–1428
Monday14–1631
Monday16–1847
Tuesday08–1030
Tuesday10–1222
Tuesday12–1419
Tuesday14–1624
Tuesday16–1838
Wednesday08–1027
Wednesday10–1218
Wednesday12–14no value
Wednesday14–1621
Wednesday16–1836
Thursday08–1033
Thursday10–1225
Thursday12–1423
Thursday14–1629
Thursday16–1844
Friday08–1039
Friday10–1234
Friday12–1441
Friday14–1652
Friday16–1861
  • Heatmap
  • Find the hours that stand out

Who may do what

examples/permission-matrix.jsonDetail: Who may do what →
{
  "schemaVersion": 1,
  "type": "heatmap",
  "title": "Who may do what",
  "source": "Illustrative roles of a documentation project",
  "width": 760,
  "height": 380,
  "heatmap": {
    "rows": [
      "Reader",
      "Contributor",
      "Maintainer",
      "Owner"
    ],
    "columns": [
      "Pages",
      "Comments",
      "Releases",
      "Settings"
    ],
    "categories": [
      "Read",
      "Write",
      "None"
    ],
    "cells": [
      {
        "row": "Reader",
        "column": "Pages",
        "category": "Read"
      },
      {
        "row": "Reader",
        "column": "Comments",
        "category": "Read"
      },
      {
        "row": "Reader",
        "column": "Releases",
        "category": "None"
      },
      {
        "row": "Reader",
        "column": "Settings",
        "category": "None"
      },
      {
        "row": "Contributor",
        "column": "Pages",
        "category": "Write"
      },
      {
        "row": "Contributor",
        "column": "Comments",
        "category": "Write"
      },
      {
        "row": "Contributor",
        "column": "Releases",
        "category": "Read"
      },
      {
        "row": "Contributor",
        "column": "Settings",
        "category": "None"
      },
      {
        "row": "Maintainer",
        "column": "Pages",
        "category": "Write"
      },
      {
        "row": "Maintainer",
        "column": "Comments",
        "category": "Write"
      },
      {
        "row": "Maintainer",
        "column": "Releases",
        "category": "Write"
      },
      {
        "row": "Maintainer",
        "column": "Settings",
        "category": "Read"
      },
      {
        "row": "Owner",
        "column": "Pages",
        "category": "Write"
      },
      {
        "row": "Owner",
        "column": "Comments",
        "category": "Write"
      },
      {
        "row": "Owner",
        "column": "Releases",
        "category": "Write"
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 460
  }
}
Who may do what
Who may do whatHeatmap of 4 rows by 4 columns, each cell one category. Cells by category: Read 4, Write 8, None 3. 1 without a value.PagesCommentsReleasesSettingsReaderReader, Pages: ReadReader, Comments: ReadReader, Releases: NoneReader, Settings: NoneContributorContributor, Pages: WriteContributor, Comments: WriteContributor, Releases: ReadContributor, Settings: NoneMaintainerMaintainer, Pages: WriteMaintainer, Comments: WriteMaintainer, Releases: WriteMaintainer, Settings: ReadOwnerOwner, Pages: WriteOwner, Comments: WriteOwner, Releases: WriteOwner, Settings: no valueReadWriteNoneno value
Who may do whatHeatmap of 4 rows by 4 columns, each cell one category. Cells by category: Read 4, Write 8, None 3. 1 without a value.PagesCommentsReleasesSettingsReaderReader, Pages: ReadReader, Comments: ReadReader, Releases: NoneReader, Settings: NoneContributorContributor, Pages: WriteContributor, Comments: WriteContributor, Releases: ReadContributor, Settings: NoneMaintainerMaintainer, Pages: WriteMaintainer, Comments: WriteMaintainer, Releases: WriteMaintainer, Settings: ReadOwnerOwner, Pages: WriteOwner, Comments: WriteOwner, Releases: WriteOwner, Settings: no valueReadWriteNoneno value

Source: Illustrative roles of a documentation project

Show chart data
Data for Who may do what
RowColumnCategory
ReaderPagesRead
ReaderCommentsRead
ReaderReleasesNone
ReaderSettingsNone
ContributorPagesWrite
ContributorCommentsWrite
ContributorReleasesRead
ContributorSettingsNone
MaintainerPagesWrite
MaintainerCommentsWrite
MaintainerReleasesWrite
MaintainerSettingsRead
OwnerPagesWrite
OwnerCommentsWrite
OwnerReleasesWrite
OwnerSettingsno value
  • Heatmap (categories)
  • Show who may do what

Scatter plots and survival

Differential expression after treatment

examples/gene-expression.jsonDetail: Differential expression after treatment →
{
  "schemaVersion": 1,
  "type": "scatter",
  "title": "Differential expression after treatment",
  "source": "Illustrative data, 700 genes",
  "width": 760,
  "height": 520,
  "scatter": {
    "points": [
      {
        "x": -1.3,
        "y": 3.38,
        "group": "Down"
      },
      {
        "x": 1.69,
        "y": 4.19,
        "group": "Up"
      },
      {
        "x": -0.81,
        "y": 1.44,
        "group": "Not significant"
      },
      {
        "x": 1.21,
        "y": 2.92,
        "group": "Up"
      },
      {
        "x": -1.4,
        "y": 2.41,
        "group": "Down"
      },
      {
        "x": -0.16,
        "y": 0.23,
        "group": "Not significant"
      },
      {
        "x": -0.45,
        "y": 2.23,
        "group": "Not significant"
      },
      {
        "x": 1.06,
        "y": 1.98,
        "group": "Up"
      },
      {
        "x": -0.42,
        "y": 0.55,
        "group": "Not significant"
      },
      {
        "x": 0.52,
        "y": 0.89,
        "group": "Not significant"
      },
      {
        "x": 2.22,
        "y": 2.94,
        "group": "Up"
      },
      {
        "x": 1.33,
        "y": 2.68,
        "group": "Up"
      },
      {
        "x": 0.73,
        "y": 2.77,
        "group": "Not significant"
      },
      {
        "x": 2.28,
        "y": 3.18,
        "group": "Up"
      },
      {
        "x": -0.43,
        "y": 0.72,
        "group": "Not significant"
      },
      {
        "x": 0.85,
        "y": 1.71,
        "group": "Not significant"
      },
      {
        "x": 1.66,
        "y": 2.24,
        "group": "Up"
      },
      {
        "x": -0.75,
        "y": 2.2,
        "group": "Not significant"
      },
      {
        "x": -0.51,
        "y": 1.61,
        "group": "Not significant"
      },
      {
        "x": 2.8,
        "y": 2.91,
        "group": "Up"
      },
      {
        "x": 0,
        "y": 1.16,
        "group": "Not significant"
      },
      {
        "x": 0.25,
        "y": 0.98,
        "group": "Not significant"
      },
      {
        "x": 0.34,
        "y": 0.38,
        "group": "Not significant"
      },
      {
        "x": 0.7,
        "y": 1.51,
        "group": "Not significant"
      },
      {
        "x": 2.37,
        "y": 3.82,
        "group": "Up"
      },
      {
        "x": -0.82,
        "y": 2.25,
        "group": "Not significant"
      },
      {
        "x": 1.42,
        "y": 3.58,
        "group": "Up"
      },
      {
        "x": 0.19,
        "y": 0.57,
        "group": "Not significant"
      },
      {
        "x": 0.84,
        "y": 1.8,
        "group": "Not significant"
      },
      {
        "x": 0.87,
        "y": 2.26,
        "group": "Not significant"
      },
      {
        "x": -0.91,
        "y": 1.34,
        "group": "Not significant"
      },
      {
        "x": 0.2,
        "y": 0.42,
        "group": "Not significant"
      },
      {
        "x": -1.39,
        "y": 3.35,
        "group": "Down"
      },
      {
        "x": 3.08,
        "y": 5.63,
        "group": "Up",
        "label": "CDK4"
      },
      {
        "x": -0.67,
        "y": 1.42,
        "group": "Not significant"
      },
      {
        "x": 0.56,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": 2.3,
        "y": 2.42,
        "group": "Up"
      },
      {
        "x": -2.1,
        "y": 2.16,
        "group": "Down"
      },
      {
        "x": -0.31,
        "y": 2.02,
        "group": "Not significant"
      },
      {
        "x": 0.12,
        "y": 0.46,
        "group": "Not significant"
      },
      {
        "x": 1.26,
        "y": 2.53,
        "group": "Up"
      },
      {
        "x": -4.01,
        "y": 9.34,
        "group": "Down",
        "label": "BRCA1"
      },
      {
        "x": 1.2,
        "y": 1.99,
        "group": "Up"
      },
      {
        "x": -0.16,
        "y": 0.88,
        "group": "Not significant"
      },
      {
        "x": -0.51,
        "y": 0.91,
        "group": "Not significant"
      },
      {
        "x": 2.78,
        "y": 5.13,
        "group": "Up"
      },
      {
        "x": -1,
        "y": 0.94,
        "group": "Not significant"
      },
      {
        "x": -0.27,
        "y": 1.62,
        "group": "Not significant"
      },
      {
        "x": -1.24,
        "y": 3.34,
        "group": "Down"
      },
      {
        "x": -0.55,
        "y": 1.95,
        "group": "Not significant"
      },
      {
        "x": -1.12,
        "y": 2.11,
        "group": "Down"
      },
      {
        "x": -1.88,
        "y": 3.67,
        "group": "Down"
      },
      {
        "x": -0.72,
        "y": 2.72,
        "group": "Not significant"
      },
      {
        "x": -0.15,
        "y": 0.29,
        "group": "Not significant"
      },
      {
        "x": -0.01,
        "y": 0.91,
        "group": "Not significant"
      },
      {
        "x": 0.65,
        "y": 2.13,
        "group": "Not significant"
      },
      {
        "x": -0.91,
        "y": 2.51,
        "group": "Not significant"
      },
      {
        "x": 0.48,
        "y": 1.53,
        "group": "Not significant"
      },
      {
        "x": 1.15,
        "y": 3.38,
        "group": "Up"
      },
      {
        "x": 1.28,
        "y": 2.3,
        "group": "Up"
      },
      {
        "x": 1.05,
        "y": 3.41,
        "group": "Up"
      },
      {
        "x": -1.67,
        "y": 3.39,
        "group": "Down"
      },
      {
        "x": -0.08,
        "y": 0.54,
        "group": "Not significant"
      },
      {
        "x": -1.42,
        "y": 2.53,
        "group": "Down"
      },
      {
        "x": -1.35,
        "y": 3.19,
        "group": "Down"
      },
      {
        "x": -0.05,
        "y": 0.19,
        "group": "Not significant"
      },
      {
        "x": -1.49,
        "y": 2.02,
        "group": "Down"
      },
      {
        "x": -0.61,
        "y": 1.31,
        "group": "Not significant"
      },
      {
        "x": -0.78,
        "y": 0.76,
        "group": "Not significant"
      },
      {
        "x": 0.64,
        "y": 1.09,
        "group": "Not significant"
      },
      {
        "x": 0.1,
        "y": 0.31,
        "group": "Not significant"
      },
      {
        "x": -1.11,
        "y": 2.49,
        "group": "Down"
      },
      {
        "x": 0.18,
        "y": 1.44,
        "group": "Not significant"
      },
      {
        "x": -0.74,
        "y": 1.34,
        "group": "Not significant"
      },
      {
        "x": 1.56,
        "y": 2.92,
        "group": "Up"
      },
      {
        "x": 1.48,
        "y": 1.59,
        "group": "Up"
      },
      {
        "x": -0.96,
        "y": 1.82,
        "group": "Not significant"
      },
      {
        "x": 1.96,
        "y": 3.17,
        "group": "Up"
      },
      {
        "x": 0.61,
        "y": 1.64,
        "group": "Not significant"
      },
      {
        "x": 0.93,
        "y": 2.21,
        "group": "Not significant"
      },
      {
        "x": 2.78,
        "y": 5.35,
        "group": "Up"
      },
      {
        "x": -1.38,
        "y": 2.13,
        "group": "Down"
      },
      {
        "x": 1.11,
        "y": 2.46,
        "group": "Up"
      },
      {
        "x": 0.98,
        "y": 2.84,
        "group": "Not significant"
      },
      {
        "x": -0.83,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": -0.76,
        "y": 2.62,
        "group": "Not significant"
      },
      {
        "x": 2.36,
        "y": 4.46,
        "group": "Up"
      },
      {
        "x": -0.19,
        "y": 1.99,
        "group": "Not significant"
      },
      {
        "x": -0.83,
        "y": 2.24,
        "group": "Not significant"
      },
      {
        "x": -0.9,
        "y": 1.44,
        "group": "Not significant"
      },
      {
        "x": 1.11,
        "y": 2.25,
        "group": "Up"
      },
      {
        "x": -0.51,
        "y": 2.1,
        "group": "Not significant"
      },
      {
        "x": 1.35,
        "y": 1.74,
        "group": "Up"
      },
      {
        "x": 1.76,
        "y": 2.52,
        "group": "Up"
      },
      {
        "x": -0.07,
        "y": 0.51,
        "group": "Not significant"
      },
      {
        "x": -0.4,
        "y": 1.42,
        "group": "Not significant"
      },
      {
        "x": -0.92,
        "y": 2.47,
        "group": "Not significant"
      },
      {
        "x": 1.37,
        "y": 2.44,
        "group": "Up"
      },
      {
        "x": -0.97,
        "y": 1.35,
        "group": "Not significant"
      },
      {
        "x": -1.21,
        "y": 1.79,
        "group": "Down"
      },
      {
        "x": -0.05,
        "y": 0.84,
        "group": "Not significant"
      },
      {
        "x": -0.02,
        "y": 0.7,
        "group": "Not significant"
      },
      {
        "x": 1.05,
        "y": 1.35,
        "group": "Up"
      },
      {
        "x": 0.21,
        "y": 0.98,
        "group": "Not significant"
      },
      {
        "x": -0.4,
        "y": 1.45,
        "group": "Not significant"
      },
      {
        "x": 0.92,
        "y": 1.63,
        "group": "Not significant"
      },
      {
        "x": 0.43,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": 0.2,
        "y": 0.61,
        "group": "Not significant"
      },
      {
        "x": -0.4,
        "y": 1.1,
        "group": "Not significant"
      },
      {
        "x": 0.46,
        "y": 1.77,
        "group": "Not significant"
      },
      {
        "x": -1.38,
        "y": 2.3,
        "group": "Down"
      },
      {
        "x": -0.31,
        "y": 0.84,
        "group": "Not significant"
      },
      {
        "x": 0.16,
        "y": 0.39,
        "group": "Not significant"
      },
      {
        "x": 0.83,
        "y": 2.5,
        "group": "Not significant"
      },
      {
        "x": 1.74,
        "y": 4.27,
        "group": "Up"
      },
      {
        "x": 1.71,
        "y": 1.51,
        "group": "Up"
      },
      {
        "x": 0.42,
        "y": 1.13,
        "group": "Not significant"
      },
      {
        "x": 1.66,
        "y": 1.96,
        "group": "Up"
      },
      {
        "x": -0.65,
        "y": 1.97,
        "group": "Not significant"
      },
      {
        "x": -0.87,
        "y": 1.32,
        "group": "Not significant"
      },
      {
        "x": -0.24,
        "y": 0.35,
        "group": "Not significant"
      },
      {
        "x": -0.31,
        "y": 0.43,
        "group": "Not significant"
      },
      {
        "x": -1.61,
        "y": 4.01,
        "group": "Down"
      },
      {
        "x": 0.78,
        "y": 1.49,
        "group": "Not significant"
      },
      {
        "x": -1.03,
        "y": 2.78,
        "group": "Down"
      },
      {
        "x": -0.26,
        "y": 0.65,
        "group": "Not significant"
      },
      {
        "x": 0.9,
        "y": 2.15,
        "group": "Not significant"
      },
      {
        "x": 1.18,
        "y": 2.53,
        "group": "Up"
      },
      {
        "x": -0.12,
        "y": 0.9,
        "group": "Not significant"
      },
      {
        "x": 0,
        "y": 0.73,
        "group": "Not significant"
      },
      {
        "x": 0.1,
        "y": 0.78,
        "group": "Not significant"
      },
      {
        "x": 0.75,
        "y": 2.24,
        "group": "Not significant"
      },
      {
        "x": 1.4,
        "y": 1.78,
        "group": "Up"
      },
      {
        "x": 1.05,
        "y": 1.8,
        "group": "Up"
      },
      {
        "x": 0.9,
        "y": 1.67,
        "group": "Not significant"
      },
      {
        "x": 0.08,
        "y": 0.29,
        "group": "Not significant"
      },
      {
        "x": 0.59,
        "y": 1.49,
        "group": "Not significant"
      },
      {
        "x": -0.33,
        "y": 0.71,
        "group": "Not significant"
      },
      {
        "x": 1.6,
        "y": 3.54,
        "group": "Up"
      },
      {
        "x": 0.98,
        "y": 1.99,
        "group": "Not significant"
      },
      {
        "x": 0.09,
        "y": 0.7,
        "group": "Not significant"
      },
      {
        "x": -0.63,
        "y": 1.12,
        "group": "Not significant"
      },
      {
        "x": 0.78,
        "y": 2.37,
        "group": "Not significant"
      },
      {
        "x": -1.96,
        "y": 3.67,
        "group": "Down"
      },
      {
        "x": -1.2,
        "y": 2.81,
        "group": "Down"
      },
      {
        "x": -0.39,
        "y": 0.5,
        "group": "Not significant"
      },
      {
        "x": 0.09,
        "y": 0.37,
        "group": "Not significant"
      },
      {
        "x": -1.85,
        "y": 1.6,
        "group": "Down"
      },
      {
        "x": -2.27,
        "y": 4.3,
        "group": "Down"
      },
      {
        "x": -1.11,
        "y": 1.36,
        "group": "Down"
      },
      {
        "x": 0.37,
        "y": 0.8,
        "group": "Not significant"
      },
      {
        "x": -1.71,
        "y": 2.59,
        "group": "Down"
      },
      {
        "x": -0.02,
        "y": 0.51,
        "group": "Not significant"
      },
      {
        "x": -0.19,
        "y": 0.72,
        "group": "Not significant"
      },
      {
        "x": 2.45,
        "y": 3.68,
        "group": "Up"
      },
      {
        "x": 1.55,
        "y": 3.26,
        "group": "Up"
      },
      {
        "x": -2.61,
        "y": 2.84,
        "group": "Down"
      },
      {
        "x": -0.45,
        "y": 1.27,
        "group": "Not significant"
      },
      {
        "x": -0.09,
        "y": 0.45,
        "group": "Not significant"
      },
      {
        "x": 0.79,
        "y": 0.8,
        "group": "Not significant"
      },
      {
        "x": -2.41,
        "y": 4.28,
        "group": "Down"
      },
      {
        "x": -0.47,
        "y": 1.21,
        "group": "Not significant"
      },
      {
        "x": -0.19,
        "y": 1.15,
        "group": "Not significant"
      },
      {
        "x": 0.1,
        "y": 1.12,
        "group": "Not significant"
      },
      {
        "x": -0.71,
        "y": 2.18,
        "group": "Not significant"
      },
      {
        "x": 0.39,
        "y": 0.81,
        "group": "Not significant"
      },
      {
        "x": -0.28,
        "y": 0.57,
        "group": "Not significant"
      },
      {
        "x": 1.33,
        "y": 1.85,
        "group": "Up"
      },
      {
        "x": 0.35,
        "y": 0.91,
        "group": "Not significant"
      },
      {
        "x": -2.57,
        "y": 2.36,
        "group": "Down"
      },
      {
        "x": 0.01,
        "y": 0.21,
        "group": "Not significant"
      },
      {
        "x": 0.79,
        "y": 1.31,
        "group": "Not significant"
      },
      {
        "x": -0.12,
        "y": 0.29,
        "group": "Not significant"
      },
      {
        "x": 0.68,
        "y": 1.17,
        "group": "Not significant"
      },
      {
        "x": -1.11,
        "y": 1.46,
        "group": "Down"
      },
      {
        "x": -0.21,
        "y": 0.61,
        "group": "Not significant"
      },
      {
        "x": 1.31,
        "y": 3.22,
        "group": "Up"
      },
      {
        "x": 0.05,
        "y": 0.19,
        "group": "Not significant"
      },
      {
        "x": -1.43,
        "y": 2.07,
        "group": "Down"
      },
      {
        "x": -1.25,
        "y": 3.51,
        "group": "Down"
      },
      {
        "x": -0.43,
        "y": 1.52,
        "group": "Not significant"
      },
      {
        "x": 0.09,
        "y": 0.41,
        "group": "Not significant"
      },
      {
        "x": 1.61,
        "y": 3.95,
        "group": "Up"
      },
      {
        "x": -0.22,
        "y": 0.5,
        "group": "Not significant"
      },
      {
        "x": 0.01,
        "y": 0.27,
        "group": "Not significant"
      },
      {
        "x": -0.73,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": -0.11,
        "y": 0.3,
        "group": "Not significant"
      },
      {
        "x": -0.24,
        "y": 0.79,
        "group": "Not significant"
      },
      {
        "x": -0.84,
        "y": 1.93,
        "group": "Not significant"
      },
      {
        "x": -2.2,
        "y": 4.5,
        "group": "Down"
      },
      {
        "x": 0.09,
        "y": 0.92,
        "group": "Not significant"
      },
      {
        "x": 0.65,
        "y": 2.32,
        "group": "Not significant"
      },
      {
        "x": -0.24,
        "y": 1.21,
        "group": "Not significant"
      },
      {
        "x": 0.41,
        "y": 0.96,
        "group": "Not significant"
      },
      {
        "x": 0.61,
        "y": 0.9,
        "group": "Not significant"
      },
      {
        "x": -0.4,
        "y": 0.8,
        "group": "Not significant"
      },
      {
        "x": 0.12,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": 0.55,
        "y": 0.86,
        "group": "Not significant"
      },
      {
        "x": 1.71,
        "y": 4.17,
        "group": "Up"
      },
      {
        "x": 0.14,
        "y": 0.82,
        "group": "Not significant"
      },
      {
        "x": -0.08,
        "y": 0.23,
        "group": "Not significant"
      },
      {
        "x": 0.82,
        "y": 1.64,
        "group": "Not significant"
      },
      {
        "x": -0.66,
        "y": 1.35,
        "group": "Not significant"
      },
      {
        "x": -2.45,
        "y": 5.55,
        "group": "Down"
      },
      {
        "x": 0.71,
        "y": 1.96,
        "group": "Not significant"
      },
      {
        "x": -1.14,
        "y": 1.87,
        "group": "Down"
      },
      {
        "x": 0.28,
        "y": 1.87,
        "group": "Not significant"
      },
      {
        "x": 1.45,
        "y": 1.56,
        "group": "Up"
      },
      {
        "x": 0.45,
        "y": 0.97,
        "group": "Not significant"
      },
      {
        "x": 0.28,
        "y": 0.51,
        "group": "Not significant"
      },
      {
        "x": -2.26,
        "y": 3.37,
        "group": "Down"
      },
      {
        "x": 0.19,
        "y": 0.69,
        "group": "Not significant"
      },
      {
        "x": -0.96,
        "y": 2.13,
        "group": "Not significant"
      },
      {
        "x": 0.05,
        "y": 0.62,
        "group": "Not significant"
      },
      {
        "x": 2.09,
        "y": 4.65,
        "group": "Up"
      },
      {
        "x": -0.82,
        "y": 1.25,
        "group": "Not significant"
      },
      {
        "x": 0.63,
        "y": 1.15,
        "group": "Not significant"
      },
      {
        "x": 0.24,
        "y": 0.71,
        "group": "Not significant"
      },
      {
        "x": 0.59,
        "y": 1.47,
        "group": "Not significant"
      },
      {
        "x": -0.75,
        "y": 2.44,
        "group": "Not significant"
      },
      {
        "x": -1.41,
        "y": 2.73,
        "group": "Down"
      },
      {
        "x": 1.31,
        "y": 2.33,
        "group": "Up"
      },
      {
        "x": 0.44,
        "y": 1.12,
        "group": "Not significant"
      },
      {
        "x": 0.94,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": -1.7,
        "y": 2.58,
        "group": "Down"
      },
      {
        "x": 2.01,
        "y": 4.7,
        "group": "Up"
      },
      {
        "x": -0.58,
        "y": 1.79,
        "group": "Not significant"
      },
      {
        "x": 0.31,
        "y": 1.09,
        "group": "Not significant"
      },
      {
        "x": -0.57,
        "y": 1.38,
        "group": "Not significant"
      },
      {
        "x": 0.42,
        "y": 0.69,
        "group": "Not significant"
      },
      {
        "x": -1.63,
        "y": 3.65,
        "group": "Down"
      },
      {
        "x": -0.88,
        "y": 2.39,
        "group": "Not significant"
      },
      {
        "x": -0.09,
        "y": 0.41,
        "group": "Not significant"
      },
      {
        "x": -1.33,
        "y": 4.29,
        "group": "Down"
      },
      {
        "x": -0.8,
        "y": 2.65,
        "group": "Not significant"
      },
      {
        "x": -0.58,
        "y": 1.2,
        "group": "Not significant"
      },
      {
        "x": 0.65,
        "y": 1.79,
        "group": "Not significant"
      },
      {
        "x": -1.06,
        "y": 1.02,
        "group": "Not significant"
      },
      {
        "x": -0.53,
        "y": 1.22,
        "group": "Not significant"
      },
      {
        "x": 1.95,
        "y": 4.25,
        "group": "Up"
      },
      {
        "x": -0.4,
        "y": 0.95,
        "group": "Not significant"
      },
      {
        "x": -1.65,
        "y": 2.62,
        "group": "Down"
      },
      {
        "x": 0.58,
        "y": 1.01,
        "group": "Not significant"
      },
      {
        "x": -0.17,
        "y": 1.21,
        "group": "Not significant"
      },
      {
        "x": 0.77,
        "y": 2.3,
        "group": "Not significant"
      },
      {
        "x": 0.06,
        "y": 0.32,
        "group": "Not significant"
      },
      {
        "x": 1.09,
        "y": 3.22,
        "group": "Up"
      },
      {
        "x": -1,
        "y": 1.97,
        "group": "Down"
      },
      {
        "x": 0.77,
        "y": 1.25,
        "group": "Not significant"
      },
      {
        "x": -2.26,
        "y": 3.45,
        "group": "Down"
      },
      {
        "x": 0.54,
        "y": 0.97,
        "group": "Not significant"
      },
      {
        "x": -0.56,
        "y": 0.85,
        "group": "Not significant"
      },
      {
        "x": -1.31,
        "y": 2.99,
        "group": "Down"
      },
      {
        "x": -0.05,
        "y": 0.29,
        "group": "Not significant"
      },
      {
        "x": 1.4,
        "y": 3.13,
        "group": "Up"
      },
      {
        "x": 0.93,
        "y": 2.83,
        "group": "Not significant"
      },
      {
        "x": 0.22,
        "y": 1.4,
        "group": "Not significant"
      },
      {
        "x": -0.5,
        "y": 0.6,
        "group": "Not significant"
      },
      {
        "x": 0.27,
        "y": 0.5,
        "group": "Not significant"
      },
      {
        "x": -0.39,
        "y": 0.97,
        "group": "Not significant"
      },
      {
        "x": -0.18,
        "y": 1.47,
        "group": "Not significant"
      },
      {
        "x": -0.57,
        "y": 2.66,
        "group": "Not significant"
      },
      {
        "x": -2.01,
        "y": 3.04,
        "group": "Down"
      },
      {
        "x": 0.32,
        "y": 0.49,
        "group": "Not significant"
      },
      {
        "x": -0.86,
        "y": 2.09,
        "group": "Not significant"
      },
      {
        "x": -0.02,
        "y": 0.28,
        "group": "Not significant"
      },
      {
        "x": -1.03,
        "y": 1.17,
        "group": "Not significant"
      },
      {
        "x": -0.87,
        "y": 1.99,
        "group": "Not significant"
      },
      {
        "x": -2.82,
        "y": 6.56,
        "group": "Down",
        "label": "TP53"
      },
      {
        "x": 1.67,
        "y": 3.71,
        "group": "Up"
      },
      {
        "x": -0.16,
        "y": 0.53,
        "group": "Not significant"
      },
      {
        "x": -1.09,
        "y": 3.26,
        "group": "Down"
      },
      {
        "x": -0.67,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": -0.64,
        "y": 2.09,
        "group": "Not significant"
      },
      {
        "x": -0.28,
        "y": 1.13,
        "group": "Not significant"
      },
      {
        "x": -0.35,
        "y": 0.54,
        "group": "Not significant"
      },
      {
        "x": 0.12,
        "y": 1,
        "group": "Not significant"
      },
      {
        "x": -0.07,
        "y": 0.37,
        "group": "Not significant"
      },
      {
        "x": 1.37,
        "y": 2.01,
        "group": "Up"
      },
      {
        "x": 0.44,
        "y": 0.71,
        "group": "Not significant"
      },
      {
        "x": 0.04,
        "y": 0.14,
        "group": "Not significant"
      },
      {
        "x": -0.13,
        "y": 0.24,
        "group": "Not significant"
      },
      {
        "x": -1.04,
        "y": 1.85,
        "group": "Down"
      },
      {
        "x": 0.73,
        "y": 1.86,
        "group": "Not significant"
      },
      {
        "x": -1.16,
        "y": 1.33,
        "group": "Down"
      },
      {
        "x": -0.5,
        "y": 2.42,
        "group": "Not significant"
      },
      {
        "x": -0.36,
        "y": 0.53,
        "group": "Not significant"
      },
      {
        "x": 0.21,
        "y": 1,
        "group": "Not significant"
      },
      {
        "x": 1.29,
        "y": 2.85,
        "group": "Up"
      },
      {
        "x": 0.24,
        "y": 0.51,
        "group": "Not significant"
      },
      {
        "x": -1.92,
        "y": 4.7,
        "group": "Down"
      },
      {
        "x": 0.92,
        "y": 2.51,
        "group": "Not significant"
      },
      {
        "x": 0.09,
        "y": 1.36,
        "group": "Not significant"
      },
      {
        "x": 0.22,
        "y": 1.14,
        "group": "Not significant"
      },
      {
        "x": 0.77,
        "y": 1.15,
        "group": "Not significant"
      },
      {
        "x": -0.16,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": -0.28,
        "y": 0.57,
        "group": "Not significant"
      },
      {
        "x": -0.42,
        "y": 0.65,
        "group": "Not significant"
      },
      {
        "x": 1.83,
        "y": 2.79,
        "group": "Up"
      },
      {
        "x": 2.05,
        "y": 4.92,
        "group": "Up"
      },
      {
        "x": -0.48,
        "y": 0.76,
        "group": "Not significant"
      },
      {
        "x": 2.27,
        "y": 2.61,
        "group": "Up"
      },
      {
        "x": 0.46,
        "y": 1.15,
        "group": "Not significant"
      },
      {
        "x": 0.03,
        "y": 0.63,
        "group": "Not significant"
      },
      {
        "x": 0.77,
        "y": 2.4,
        "group": "Not significant"
      },
      {
        "x": -0.14,
        "y": 0.39,
        "group": "Not significant"
      },
      {
        "x": -0.66,
        "y": 1.38,
        "group": "Not significant"
      },
      {
        "x": -1.44,
        "y": 3.48,
        "group": "Down"
      },
      {
        "x": 0.08,
        "y": 0.88,
        "group": "Not significant"
      },
      {
        "x": -1.71,
        "y": 2.01,
        "group": "Down"
      },
      {
        "x": -1.71,
        "y": 1.5,
        "group": "Down"
      },
      {
        "x": 0.15,
        "y": 0.86,
        "group": "Not significant"
      },
      {
        "x": -1.5,
        "y": 2.02,
        "group": "Down"
      },
      {
        "x": -0.31,
        "y": 0.44,
        "group": "Not significant"
      },
      {
        "x": -0.13,
        "y": 0.27,
        "group": "Not significant"
      },
      {
        "x": -1.53,
        "y": 3.75,
        "group": "Down"
      },
      {
        "x": -0.93,
        "y": 2.34,
        "group": "Not significant"
      },
      {
        "x": 2.48,
        "y": 6.48,
        "group": "Up",
        "label": "MYC"
      },
      {
        "x": -0.21,
        "y": 0.83,
        "group": "Not significant"
      },
      {
        "x": 1.06,
        "y": 2.41,
        "group": "Up"
      },
      {
        "x": -1.07,
        "y": 2.55,
        "group": "Down"
      },
      {
        "x": -0.42,
        "y": 1.63,
        "group": "Not significant"
      },
      {
        "x": 0.66,
        "y": 1.48,
        "group": "Not significant"
      },
      {
        "x": -0.69,
        "y": 1.21,
        "group": "Not significant"
      },
      {
        "x": 0.44,
        "y": 0.69,
        "group": "Not significant"
      },
      {
        "x": 1.78,
        "y": 3.41,
        "group": "Up"
      },
      {
        "x": -0.31,
        "y": 1.65,
        "group": "Not significant"
      },
      {
        "x": -0.16,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": -1.18,
        "y": 1.96,
        "group": "Down"
      },
      {
        "x": -0.19,
        "y": 1.51,
        "group": "Not significant"
      },
      {
        "x": 0.55,
        "y": 0.78,
        "group": "Not significant"
      },
      {
        "x": 1.71,
        "y": 3.22,
        "group": "Up"
      },
      {
        "x": 0.33,
        "y": 0.7,
        "group": "Not significant"
      },
      {
        "x": -2.23,
        "y": 1.97,
        "group": "Down"
      },
      {
        "x": -0.47,
        "y": 1.07,
        "group": "Not significant"
      },
      {
        "x": -1.16,
        "y": 1.87,
        "group": "Down"
      },
      {
        "x": 0.51,
        "y": 0.55,
        "group": "Not significant"
      },
      {
        "x": -0.2,
        "y": 0.42,
        "group": "Not significant"
      },
      {
        "x": -1.54,
        "y": 3.65,
        "group": "Down"
      },
      {
        "x": -0.08,
        "y": 0.36,
        "group": "Not significant"
      },
      {
        "x": 0.31,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": -0.05,
        "y": 0.55,
        "group": "Not significant"
      },
      {
        "x": 0.07,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": -0.62,
        "y": 0.79,
        "group": "Not significant"
      },
      {
        "x": -0.22,
        "y": 1.7,
        "group": "Not significant"
      },
      {
        "x": 0.87,
        "y": 1.1,
        "group": "Not significant"
      },
      {
        "x": -1.37,
        "y": 2.9,
        "group": "Down"
      },
      {
        "x": 0.27,
        "y": 0.73,
        "group": "Not significant"
      },
      {
        "x": -0.46,
        "y": 1.39,
        "group": "Not significant"
      },
      {
        "x": 0.52,
        "y": 0.82,
        "group": "Not significant"
      },
      {
        "x": -1.36,
        "y": 3.08,
        "group": "Down"
      },
      {
        "x": -1.52,
        "y": 2.54,
        "group": "Down"
      },
      {
        "x": 0.45,
        "y": 1.68,
        "group": "Not significant"
      },
      {
        "x": 0.66,
        "y": 1.2,
        "group": "Not significant"
      },
      {
        "x": 0.66,
        "y": 1.5,
        "group": "Not significant"
      },
      {
        "x": -1.75,
        "y": 2.88,
        "group": "Down"
      },
      {
        "x": 0.12,
        "y": 0.66,
        "group": "Not significant"
      },
      {
        "x": -1.43,
        "y": 3.33,
        "group": "Down"
      },
      {
        "x": 2.8,
        "y": 4.46,
        "group": "Up"
      },
      {
        "x": -1.16,
        "y": 2.13,
        "group": "Down"
      },
      {
        "x": -0.82,
        "y": 1.08,
        "group": "Not significant"
      },
      {
        "x": 1.61,
        "y": 2.72,
        "group": "Up"
      },
      {
        "x": 0.27,
        "y": 0.5,
        "group": "Not significant"
      },
      {
        "x": 1.12,
        "y": 3.62,
        "group": "Up"
      },
      {
        "x": 1.04,
        "y": 1.44,
        "group": "Up"
      },
      {
        "x": -0.68,
        "y": 0.79,
        "group": "Not significant"
      },
      {
        "x": -0.84,
        "y": 1.01,
        "group": "Not significant"
      },
      {
        "x": -2.55,
        "y": 6.01,
        "group": "Down"
      },
      {
        "x": -0.5,
        "y": 1.08,
        "group": "Not significant"
      },
      {
        "x": 1.03,
        "y": 1.45,
        "group": "Up"
      },
      {
        "x": 1.37,
        "y": 2.12,
        "group": "Up"
      },
      {
        "x": -0.19,
        "y": 1.21,
        "group": "Not significant"
      },
      {
        "x": -0.68,
        "y": 1.28,
        "group": "Not significant"
      },
      {
        "x": 0.94,
        "y": 1.99,
        "group": "Not significant"
      },
      {
        "x": 0.85,
        "y": 2.05,
        "group": "Not significant"
      },
      {
        "x": -0.59,
        "y": 0.58,
        "group": "Not significant"
      },
      {
        "x": 1.14,
        "y": 1.98,
        "group": "Up"
      },
      {
        "x": 1.25,
        "y": 2.39,
        "group": "Up"
      },
      {
        "x": -0.39,
        "y": 1.44,
        "group": "Not significant"
      },
      {
        "x": -1.82,
        "y": 3.41,
        "group": "Down"
      },
      {
        "x": 0.49,
        "y": 1.24,
        "group": "Not significant"
      },
      {
        "x": -0.07,
        "y": 0.44,
        "group": "Not significant"
      },
      {
        "x": 0.45,
        "y": 0.69,
        "group": "Not significant"
      },
      {
        "x": -1.44,
        "y": 3.41,
        "group": "Down"
      },
      {
        "x": 0.88,
        "y": 1.65,
        "group": "Not significant"
      },
      {
        "x": -0.73,
        "y": 1.23,
        "group": "Not significant"
      },
      {
        "x": 1.66,
        "y": 1.97,
        "group": "Up"
      },
      {
        "x": 0.09,
        "y": 0.7,
        "group": "Not significant"
      },
      {
        "x": -0.82,
        "y": 2.33,
        "group": "Not significant"
      },
      {
        "x": 0.78,
        "y": 1.28,
        "group": "Not significant"
      },
      {
        "x": 0.42,
        "y": 0.84,
        "group": "Not significant"
      },
      {
        "x": -2.59,
        "y": 3.44,
        "group": "Down"
      },
      {
        "x": -1.04,
        "y": 2.88,
        "group": "Down"
      },
      {
        "x": 2.64,
        "y": 3.44,
        "group": "Up"
      },
      {
        "x": 0.98,
        "y": 2.14,
        "group": "Not significant"
      },
      {
        "x": 0.86,
        "y": 1.93,
        "group": "Not significant"
      },
      {
        "x": -0.15,
        "y": 1,
        "group": "Not significant"
      },
      {
        "x": -1.48,
        "y": 2.26,
        "group": "Down"
      },
      {
        "x": -0.05,
        "y": 0.11,
        "group": "Not significant"
      },
      {
        "x": 0.28,
        "y": 1.38,
        "group": "Not significant"
      },
      {
        "x": -1.22,
        "y": 1.36,
        "group": "Down"
      },
      {
        "x": 0.87,
        "y": 3.44,
        "group": "Not significant"
      },
      {
        "x": 0.15,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": -1.19,
        "y": 1.96,
        "group": "Down"
      },
      {
        "x": -0.02,
        "y": 0.13,
        "group": "Not significant"
      },
      {
        "x": -1.58,
        "y": 3.03,
        "group": "Down"
      },
      {
        "x": -0.86,
        "y": 1.91,
        "group": "Not significant"
      },
      {
        "x": -1.03,
        "y": 2.66,
        "group": "Down"
      },
      {
        "x": -1.57,
        "y": 1.73,
        "group": "Down"
      },
      {
        "x": -0.14,
        "y": 1.29,
        "group": "Not significant"
      },
      {
        "x": 0.18,
        "y": 0.39,
        "group": "Not significant"
      },
      {
        "x": 0.96,
        "y": 1.85,
        "group": "Not significant"
      },
      {
        "x": 0.41,
        "y": 1.31,
        "group": "Not significant"
      },
      {
        "x": 1.94,
        "y": 4.09,
        "group": "Up"
      },
      {
        "x": -1.49,
        "y": 3.45,
        "group": "Down"
      },
      {
        "x": -0.45,
        "y": 1.96,
        "group": "Not significant"
      },
      {
        "x": 2.27,
        "y": 5.56,
        "group": "Up"
      },
      {
        "x": 0.12,
        "y": 0.38,
        "group": "Not significant"
      },
      {
        "x": 0.85,
        "y": 1.14,
        "group": "Not significant"
      },
      {
        "x": 0.02,
        "y": 0.07,
        "group": "Not significant"
      },
      {
        "x": -0.55,
        "y": 1.7,
        "group": "Not significant"
      },
      {
        "x": 1.37,
        "y": 4.34,
        "group": "Up"
      },
      {
        "x": -0.29,
        "y": 0.8,
        "group": "Not significant"
      },
      {
        "x": -1.07,
        "y": 1.09,
        "group": "Not significant"
      },
      {
        "x": -1.81,
        "y": 3.73,
        "group": "Down"
      },
      {
        "x": 1.07,
        "y": 2.85,
        "group": "Up"
      },
      {
        "x": 1.69,
        "y": 4.47,
        "group": "Up"
      },
      {
        "x": -1.4,
        "y": 3.03,
        "group": "Down"
      },
      {
        "x": 1.29,
        "y": 2.58,
        "group": "Up"
      },
      {
        "x": 0.36,
        "y": 0.93,
        "group": "Not significant"
      },
      {
        "x": -0.78,
        "y": 1.8,
        "group": "Not significant"
      },
      {
        "x": -2.06,
        "y": 3.09,
        "group": "Down"
      },
      {
        "x": 1.24,
        "y": 2.17,
        "group": "Up"
      },
      {
        "x": 0.56,
        "y": 0.84,
        "group": "Not significant"
      },
      {
        "x": 0.69,
        "y": 1.17,
        "group": "Not significant"
      },
      {
        "x": 1.39,
        "y": 3.27,
        "group": "Up"
      },
      {
        "x": 0.49,
        "y": 1.58,
        "group": "Not significant"
      },
      {
        "x": 0.55,
        "y": 0.61,
        "group": "Not significant"
      },
      {
        "x": 1.39,
        "y": 3.09,
        "group": "Up"
      },
      {
        "x": -1.96,
        "y": 3.14,
        "group": "Down"
      },
      {
        "x": 1.31,
        "y": 2.58,
        "group": "Up"
      },
      {
        "x": 0.55,
        "y": 1.39,
        "group": "Not significant"
      },
      {
        "x": 0.35,
        "y": 0.83,
        "group": "Not significant"
      },
      {
        "x": 0.17,
        "y": 0.49,
        "group": "Not significant"
      },
      {
        "x": 0.31,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": 1.48,
        "y": 2.69,
        "group": "Up"
      },
      {
        "x": -0.93,
        "y": 2.97,
        "group": "Not significant"
      },
      {
        "x": -0.6,
        "y": 1.44,
        "group": "Not significant"
      },
      {
        "x": -0.45,
        "y": 0.86,
        "group": "Not significant"
      },
      {
        "x": 1.35,
        "y": 1.6,
        "group": "Up"
      },
      {
        "x": -1.23,
        "y": 1.92,
        "group": "Down"
      },
      {
        "x": 0.52,
        "y": 1.18,
        "group": "Not significant"
      },
      {
        "x": 1.49,
        "y": 2.16,
        "group": "Up"
      },
      {
        "x": -0.12,
        "y": 0.41,
        "group": "Not significant"
      },
      {
        "x": 0.83,
        "y": 1,
        "group": "Not significant"
      },
      {
        "x": -1.5,
        "y": 2.6,
        "group": "Down"
      },
      {
        "x": -0.41,
        "y": 1.13,
        "group": "Not significant"
      },
      {
        "x": -0.49,
        "y": 1.12,
        "group": "Not significant"
      },
      {
        "x": -0.79,
        "y": 2.01,
        "group": "Not significant"
      },
      {
        "x": 0.26,
        "y": 0.46,
        "group": "Not significant"
      },
      {
        "x": -0.19,
        "y": 0.86,
        "group": "Not significant"
      },
      {
        "x": -1.01,
        "y": 1.64,
        "group": "Down"
      },
      {
        "x": 0.81,
        "y": 1.87,
        "group": "Not significant"
      },
      {
        "x": -0.84,
        "y": 1.91,
        "group": "Not significant"
      },
      {
        "x": -0.52,
        "y": 0.93,
        "group": "Not significant"
      },
      {
        "x": 0.68,
        "y": 1.3,
        "group": "Not significant"
      },
      {
        "x": -1.17,
        "y": 1.75,
        "group": "Down"
      },
      {
        "x": -1.69,
        "y": 1.79,
        "group": "Down"
      },
      {
        "x": 1.43,
        "y": 3.85,
        "group": "Up"
      },
      {
        "x": 0.41,
        "y": 0.85,
        "group": "Not significant"
      },
      {
        "x": -0.35,
        "y": 1.15,
        "group": "Not significant"
      },
      {
        "x": -0.63,
        "y": 0.93,
        "group": "Not significant"
      },
      {
        "x": -0.46,
        "y": 1.66,
        "group": "Not significant"
      },
      {
        "x": 0.83,
        "y": 2.5,
        "group": "Not significant"
      },
      {
        "x": 0.55,
        "y": 1.33,
        "group": "Not significant"
      },
      {
        "x": -0.38,
        "y": 1.04,
        "group": "Not significant"
      },
      {
        "x": -1.32,
        "y": 3.82,
        "group": "Down"
      },
      {
        "x": 1.02,
        "y": 2.43,
        "group": "Up"
      },
      {
        "x": 0.58,
        "y": 1.17,
        "group": "Not significant"
      },
      {
        "x": -0.17,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": 0.52,
        "y": 1.75,
        "group": "Not significant"
      },
      {
        "x": -0.69,
        "y": 1.5,
        "group": "Not significant"
      },
      {
        "x": -1.4,
        "y": 2.46,
        "group": "Down"
      },
      {
        "x": -0.07,
        "y": 0.3,
        "group": "Not significant"
      },
      {
        "x": -0.44,
        "y": 1.09,
        "group": "Not significant"
      },
      {
        "x": -1.14,
        "y": 2.89,
        "group": "Down"
      },
      {
        "x": 0.17,
        "y": 0.73,
        "group": "Not significant"
      },
      {
        "x": -0.5,
        "y": 1.38,
        "group": "Not significant"
      },
      {
        "x": 1.24,
        "y": 1.74,
        "group": "Up"
      },
      {
        "x": -0.33,
        "y": 0.41,
        "group": "Not significant"
      },
      {
        "x": 1.93,
        "y": 2.3,
        "group": "Up"
      },
      {
        "x": -0.27,
        "y": 0.31,
        "group": "Not significant"
      },
      {
        "x": 1.13,
        "y": 3.09,
        "group": "Up"
      },
      {
        "x": 0.01,
        "y": 0.23,
        "group": "Not significant"
      },
      {
        "x": 1.81,
        "y": 4.13,
        "group": "Up"
      },
      {
        "x": 0.99,
        "y": 2.09,
        "group": "Not significant"
      },
      {
        "x": 0.42,
        "y": 0.8,
        "group": "Not significant"
      },
      {
        "x": 0.79,
        "y": 2.11,
        "group": "Not significant"
      },
      {
        "x": 0.94,
        "y": 2.05,
        "group": "Not significant"
      },
      {
        "x": 1.05,
        "y": 2.86,
        "group": "Up"
      },
      {
        "x": 1.19,
        "y": 2.09,
        "group": "Up"
      },
      {
        "x": -0.8,
        "y": 0.91,
        "group": "Not significant"
      },
      {
        "x": -0.08,
        "y": 0.74,
        "group": "Not significant"
      },
      {
        "x": 0.73,
        "y": 1.23,
        "group": "Not significant"
      },
      {
        "x": 1.22,
        "y": 2.81,
        "group": "Up"
      },
      {
        "x": -0.05,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": -0.75,
        "y": 1.69,
        "group": "Not significant"
      },
      {
        "x": 1.19,
        "y": 2.36,
        "group": "Up"
      },
      {
        "x": 0.09,
        "y": 0.22,
        "group": "Not significant"
      },
      {
        "x": 0.02,
        "y": 0.08,
        "group": "Not significant"
      },
      {
        "x": 0.1,
        "y": 0.59,
        "group": "Not significant"
      },
      {
        "x": -0.77,
        "y": 1.77,
        "group": "Not significant"
      },
      {
        "x": 0.67,
        "y": 1.97,
        "group": "Not significant"
      },
      {
        "x": -1.44,
        "y": 3.35,
        "group": "Down"
      },
      {
        "x": -2.22,
        "y": 4.11,
        "group": "Down"
      },
      {
        "x": -0.16,
        "y": 0.41,
        "group": "Not significant"
      },
      {
        "x": -1.35,
        "y": 1.45,
        "group": "Down"
      },
      {
        "x": -0.05,
        "y": 0.64,
        "group": "Not significant"
      },
      {
        "x": -2.08,
        "y": 2.83,
        "group": "Down"
      },
      {
        "x": -1.4,
        "y": 2.88,
        "group": "Down"
      },
      {
        "x": -0.34,
        "y": 0.98,
        "group": "Not significant"
      },
      {
        "x": -1.27,
        "y": 1.8,
        "group": "Down"
      },
      {
        "x": -1.33,
        "y": 1.73,
        "group": "Down"
      },
      {
        "x": 2.03,
        "y": 2.51,
        "group": "Up"
      },
      {
        "x": -0.92,
        "y": 0.79,
        "group": "Not significant"
      },
      {
        "x": -0.08,
        "y": 0.47,
        "group": "Not significant"
      },
      {
        "x": 0.38,
        "y": 0.65,
        "group": "Not significant"
      },
      {
        "x": -0.52,
        "y": 1.23,
        "group": "Not significant"
      },
      {
        "x": 0.12,
        "y": 0.75,
        "group": "Not significant"
      },
      {
        "x": -0.79,
        "y": 1.41,
        "group": "Not significant"
      },
      {
        "x": -0.62,
        "y": 1.2,
        "group": "Not significant"
      },
      {
        "x": -0.23,
        "y": 1.05,
        "group": "Not significant"
      },
      {
        "x": 0.35,
        "y": 2.12,
        "group": "Not significant"
      },
      {
        "x": 1.25,
        "y": 2.53,
        "group": "Up"
      },
      {
        "x": -0.81,
        "y": 1.92,
        "group": "Not significant"
      },
      {
        "x": -1.13,
        "y": 2.67,
        "group": "Down"
      },
      {
        "x": 1.54,
        "y": 3.4,
        "group": "Up"
      },
      {
        "x": -0.23,
        "y": 0.82,
        "group": "Not significant"
      },
      {
        "x": -0.28,
        "y": 0.72,
        "group": "Not significant"
      },
      {
        "x": 0.19,
        "y": 1,
        "group": "Not significant"
      },
      {
        "x": -0.33,
        "y": 1.51,
        "group": "Not significant"
      },
      {
        "x": 1.11,
        "y": 2.13,
        "group": "Up"
      },
      {
        "x": 0.97,
        "y": 1.92,
        "group": "Not significant"
      },
      {
        "x": 0.44,
        "y": 0.98,
        "group": "Not significant"
      },
      {
        "x": -0.79,
        "y": 2.24,
        "group": "Not significant"
      },
      {
        "x": 0.39,
        "y": 0.88,
        "group": "Not significant"
      },
      {
        "x": -1.28,
        "y": 3.59,
        "group": "Down"
      },
      {
        "x": 0.67,
        "y": 1.67,
        "group": "Not significant"
      },
      {
        "x": -2.18,
        "y": 5.63,
        "group": "Down"
      },
      {
        "x": 0.04,
        "y": 0.62,
        "group": "Not significant"
      },
      {
        "x": -1.6,
        "y": 3.09,
        "group": "Down"
      },
      {
        "x": 1.15,
        "y": 3.42,
        "group": "Up"
      },
      {
        "x": -1.28,
        "y": 2.4,
        "group": "Down"
      },
      {
        "x": -0.32,
        "y": 0.83,
        "group": "Not significant"
      },
      {
        "x": -0.54,
        "y": 1.11,
        "group": "Not significant"
      },
      {
        "x": 0.93,
        "y": 2.43,
        "group": "Not significant"
      },
      {
        "x": -0.6,
        "y": 1.76,
        "group": "Not significant"
      },
      {
        "x": -0.71,
        "y": 2.25,
        "group": "Not significant"
      },
      {
        "x": -0.97,
        "y": 1.26,
        "group": "Not significant"
      },
      {
        "x": -0.01,
        "y": 0.02,
        "group": "Not significant"
      },
      {
        "x": 0.57,
        "y": 1.57,
        "group": "Not significant"
      },
      {
        "x": 0.96,
        "y": 1.35,
        "group": "Not significant"
      },
      {
        "x": -0.42,
        "y": 1.47,
        "group": "Not significant"
      },
      {
        "x": 0.99,
        "y": 1.71,
        "group": "Not significant"
      },
      {
        "x": 1.19,
        "y": 1.98,
        "group": "Up"
      },
      {
        "x": -1.74,
        "y": 3.28,
        "group": "Down"
      },
      {
        "x": 0.67,
        "y": 1.93,
        "group": "Not significant"
      },
      {
        "x": 2.25,
        "y": 3.67,
        "group": "Up"
      },
      {
        "x": 0.85,
        "y": 2.04,
        "group": "Not significant"
      },
      {
        "x": -0.38,
        "y": 1.75,
        "group": "Not significant"
      },
      {
        "x": 0.94,
        "y": 1.47,
        "group": "Not significant"
      },
      {
        "x": 2.02,
        "y": 2.81,
        "group": "Up"
      },
      {
        "x": 1.39,
        "y": 1.86,
        "group": "Up"
      },
      {
        "x": 1.01,
        "y": 1.96,
        "group": "Up"
      },
      {
        "x": -0.91,
        "y": 2.25,
        "group": "Not significant"
      },
      {
        "x": -0.93,
        "y": 1.98,
        "group": "Not significant"
      },
      {
        "x": 0.04,
        "y": 0.67,
        "group": "Not significant"
      },
      {
        "x": 0.28,
        "y": 2.54,
        "group": "Not significant"
      },
      {
        "x": -1.63,
        "y": 3.18,
        "group": "Down"
      },
      {
        "x": -1.04,
        "y": 1.16,
        "group": "Not significant"
      },
      {
        "x": 0.55,
        "y": 0.85,
        "group": "Not significant"
      },
      {
        "x": 1.64,
        "y": 2.26,
        "group": "Up"
      },
      {
        "x": 0.1,
        "y": 0.67,
        "group": "Not significant"
      },
      {
        "x": 0.54,
        "y": 1.99,
        "group": "Not significant"
      },
      {
        "x": 0.42,
        "y": 1.04,
        "group": "Not significant"
      },
      {
        "x": -0.8,
        "y": 1.8,
        "group": "Not significant"
      },
      {
        "x": 2.21,
        "y": 5.44,
        "group": "Up"
      },
      {
        "x": -0.18,
        "y": 0.43,
        "group": "Not significant"
      },
      {
        "x": 0.77,
        "y": 1.56,
        "group": "Not significant"
      },
      {
        "x": 0.04,
        "y": 0.28,
        "group": "Not significant"
      },
      {
        "x": 0.5,
        "y": 1.71,
        "group": "Not significant"
      },
      {
        "x": 1.04,
        "y": 2.54,
        "group": "Up"
      },
      {
        "x": 1.78,
        "y": 4.98,
        "group": "Up"
      },
      {
        "x": -2.28,
        "y": 3.04,
        "group": "Down"
      },
      {
        "x": 0.96,
        "y": 2.26,
        "group": "Not significant"
      },
      {
        "x": 1.34,
        "y": 3.82,
        "group": "Up"
      },
      {
        "x": 0.8,
        "y": 1.69,
        "group": "Not significant"
      },
      {
        "x": 1.4,
        "y": 1.7,
        "group": "Up"
      },
      {
        "x": -0.58,
        "y": 1.08,
        "group": "Not significant"
      },
      {
        "x": 0.21,
        "y": 1,
        "group": "Not significant"
      },
      {
        "x": -0.12,
        "y": 0.9,
        "group": "Not significant"
      },
      {
        "x": -1.51,
        "y": 4.03,
        "group": "Down"
      },
      {
        "x": 2.22,
        "y": 2.36,
        "group": "Up"
      },
      {
        "x": 0.6,
        "y": 2.13,
        "group": "Not significant"
      },
      {
        "x": -0.94,
        "y": 2.29,
        "group": "Not significant"
      },
      {
        "x": -0.65,
        "y": 0.92,
        "group": "Not significant"
      },
      {
        "x": 0.23,
        "y": 0.64,
        "group": "Not significant"
      },
      {
        "x": 0.97,
        "y": 1.59,
        "group": "Not significant"
      },
      {
        "x": -0.35,
        "y": 1.58,
        "group": "Not significant"
      },
      {
        "x": 1.09,
        "y": 3.6,
        "group": "Up"
      },
      {
        "x": 1.17,
        "y": 1.54,
        "group": "Up"
      },
      {
        "x": -0.67,
        "y": 1.28,
        "group": "Not significant"
      },
      {
        "x": -0.49,
        "y": 1.56,
        "group": "Not significant"
      },
      {
        "x": -1.66,
        "y": 2.65,
        "group": "Down"
      },
      {
        "x": 1.12,
        "y": 2.52,
        "group": "Up"
      },
      {
        "x": 1.39,
        "y": 2.78,
        "group": "Up"
      },
      {
        "x": 0.43,
        "y": 1.39,
        "group": "Not significant"
      },
      {
        "x": -0.56,
        "y": 0.64,
        "group": "Not significant"
      },
      {
        "x": -0.38,
        "y": 0.95,
        "group": "Not significant"
      },
      {
        "x": 0.23,
        "y": 0.46,
        "group": "Not significant"
      },
      {
        "x": -0.74,
        "y": 1.89,
        "group": "Not significant"
      },
      {
        "x": 1.43,
        "y": 2.16,
        "group": "Up"
      },
      {
        "x": 0.7,
        "y": 1.24,
        "group": "Not significant"
      },
      {
        "x": -0.56,
        "y": 1.63,
        "group": "Not significant"
      },
      {
        "x": -1.33,
        "y": 1.96,
        "group": "Down"
      },
      {
        "x": 0.45,
        "y": 1.23,
        "group": "Not significant"
      },
      {
        "x": -0.08,
        "y": 0.62,
        "group": "Not significant"
      },
      {
        "x": -1.47,
        "y": 4.18,
        "group": "Down"
      },
      {
        "x": -1.39,
        "y": 2.71,
        "group": "Down"
      },
      {
        "x": -0.03,
        "y": 0.27,
        "group": "Not significant"
      },
      {
        "x": -1.29,
        "y": 3.46,
        "group": "Down"
      },
      {
        "x": -1.56,
        "y": 4.52,
        "group": "Down"
      },
      {
        "x": -1.15,
        "y": 1.8,
        "group": "Down"
      },
      {
        "x": -1.29,
        "y": 2.95,
        "group": "Down"
      },
      {
        "x": 1.97,
        "y": 4.28,
        "group": "Up"
      },
      {
        "x": -0.01,
        "y": 0.77,
        "group": "Not significant"
      },
      {
        "x": -0.48,
        "y": 0.62,
        "group": "Not significant"
      },
      {
        "x": -0.12,
        "y": 0.68,
        "group": "Not significant"
      },
      {
        "x": 0.73,
        "y": 2.39,
        "group": "Not significant"
      },
      {
        "x": -0.44,
        "y": 1.1,
        "group": "Not significant"
      },
      {
        "x": 0.35,
        "y": 1.54,
        "group": "Not significant"
      },
      {
        "x": -0.01,
        "y": 0.06,
        "group": "Not significant"
      },
      {
        "x": 0.37,
        "y": 1.65,
        "group": "Not significant"
      },
      {
        "x": 0.24,
        "y": 1.32,
        "group": "Not significant"
      },
      {
        "x": -0.82,
        "y": 1.2,
        "group": "Not significant"
      },
      {
        "x": -1.44,
        "y": 3.48,
        "group": "Down"
      },
      {
        "x": -1.03,
        "y": 2.32,
        "group": "Down"
      },
      {
        "x": -0.78,
        "y": 1.4,
        "group": "Not significant"
      },
      {
        "x": -0.45,
        "y": 0.93,
        "group": "Not significant"
      },
      {
        "x": 0.5,
        "y": 1.44,
        "group": "Not significant"
      },
      {
        "x": -0.71,
        "y": 2.07,
        "group": "Not significant"
      },
      {
        "x": -0.47,
        "y": 1.44,
        "group": "Not significant"
      },
      {
        "x": -0.5,
        "y": 1.68,
        "group": "Not significant"
      },
      {
        "x": 1.35,
        "y": 3.05,
        "group": "Up"
      },
      {
        "x": 0.52,
        "y": 1.36,
        "group": "Not significant"
      },
      {
        "x": -2.52,
        "y": 3.63,
        "group": "Down"
      },
      {
        "x": -0.81,
        "y": 2.66,
        "group": "Not significant"
      },
      {
        "x": -0.58,
        "y": 1.09,
        "group": "Not significant"
      },
      {
        "x": -0.17,
        "y": 0.58,
        "group": "Not significant"
      },
      {
        "x": 0.43,
        "y": 1.32,
        "group": "Not significant"
      },
      {
        "x": -1.84,
        "y": 2.51,
        "group": "Down"
      },
      {
        "x": 0.05,
        "y": 0.69,
        "group": "Not significant"
      },
      {
        "x": 0.85,
        "y": 3.1,
        "group": "Not significant"
      },
      {
        "x": -0.37,
        "y": 1.15,
        "group": "Not significant"
      },
      {
        "x": 1.22,
        "y": 1.86,
        "group": "Up"
      },
      {
        "x": -2.12,
        "y": 4.66,
        "group": "Down"
      },
      {
        "x": 0.44,
        "y": 1.12,
        "group": "Not significant"
      },
      {
        "x": 0.05,
        "y": 0.08,
        "group": "Not significant"
      },
      {
        "x": -0.06,
        "y": 0.75,
        "group": "Not significant"
      },
      {
        "x": -1.54,
        "y": 2.34,
        "group": "Down"
      },
      {
        "x": -1.17,
        "y": 2.78,
        "group": "Down"
      },
      {
        "x": -1.39,
        "y": 2.76,
        "group": "Down"
      },
      {
        "x": 0.22,
        "y": 0.46,
        "group": "Not significant"
      },
      {
        "x": 1.39,
        "y": 1.98,
        "group": "Up"
      },
      {
        "x": 1.19,
        "y": 3.08,
        "group": "Up"
      },
      {
        "x": -0.32,
        "y": 0.87,
        "group": "Not significant"
      },
      {
        "x": 0.16,
        "y": 1.19,
        "group": "Not significant"
      },
      {
        "x": -0.14,
        "y": 0.88,
        "group": "Not significant"
      },
      {
        "x": -0.74,
        "y": 1.84,
        "group": "Not significant"
      },
      {
        "x": 0.68,
        "y": 0.81,
        "group": "Not significant"
      },
      {
        "x": -0.14,
        "y": 0.8,
        "group": "Not significant"
      },
      {
        "x": -0.35,
        "y": 1.06,
        "group": "Not significant"
      },
      {
        "x": 0.22,
        "y": 0.78,
        "group": "Not significant"
      },
      {
        "x": -2.1,
        "y": 2.72,
        "group": "Down"
      },
      {
        "x": 0.74,
        "y": 1.23,
        "group": "Not significant"
      },
      {
        "x": 0.75,
        "y": 2.11,
        "group": "Not significant"
      },
      {
        "x": -1.35,
        "y": 4.07,
        "group": "Down"
      },
      {
        "x": -0.24,
        "y": 0.71,
        "group": "Not significant"
      },
      {
        "x": 0.41,
        "y": 0.95,
        "group": "Not significant"
      },
      {
        "x": 0.84,
        "y": 2.15,
        "group": "Not significant"
      },
      {
        "x": -0.21,
        "y": 0.67,
        "group": "Not significant"
      },
      {
        "x": 0.89,
        "y": 1.24,
        "group": "Not significant"
      },
      {
        "x": -0.84,
        "y": 1.77,
        "group": "Not significant"
      },
      {
        "x": -0.23,
        "y": 1.71,
        "group": "Not significant"
      },
      {
        "x": 0.71,
        "y": 1.82,
        "group": "Not significant"
      },
      {
        "x": -2.25,
        "y": 3.69,
        "group": "Down"
      },
      {
        "x": -0.82,
        "y": 1.77,
        "group": "Not significant"
      },
      {
        "x": -1.54,
        "y": 3.89,
        "group": "Down"
      },
      {
        "x": -0.25,
        "y": 0.37,
        "group": "Not significant"
      },
      {
        "x": -0.92,
        "y": 1.88,
        "group": "Not significant"
      }
    ],
    "lines": [
      {
        "axis": "x",
        "value": -1
      },
      {
        "axis": "x",
        "value": 1
      },
      {
        "axis": "y",
        "value": 1.3,
        "label": "p = 0.05"
      }
    ],
    "xTitle": "log2 fold change",
    "yTitle": "−log10 p"
  },
  "mobile": {
    "width": 380,
    "height": 520
  }
}
Differential expression after treatment
Differential expression after treatmentScatter plot of 700 points: x from −4.01 to 3.08, y from 0.02 to 9.34. Groups (points): Down 124, Up 119, Not significant 457. Lines: x = −1, 571 points above it; x = 1, 119 points above it; p = 0.05: y = 1.3, 427 points above it.DownUpNot significant0246810−6−4−2024log2 fold change−log10 pp = 0.05CDK4: 3.08, 5.63BRCA1: −4.01, 9.34TP53: −2.82, 6.56MYC: 2.48, 6.48CDK4BRCA1TP53MYC
Differential expression after treatmentScatter plot of 700 points: x from −4.01 to 3.08, y from 0.02 to 9.34. Groups (points): Down 124, Up 119, Not significant 457. Lines: x = −1, 571 points above it; x = 1, 119 points above it; p = 0.05: y = 1.3, 427 points above it.DownUpNot significant0246810−6−4−2024log2 fold change−log10 pp = 0.05CDK4: 3.08, 5.63BRCA1: −4.01, 9.34TP53: −2.82, 6.56MYC: 2.48, 6.48CDK4BRCA1TP53MYC

Source: Illustrative data, 700 genes

Show chart data
Data for Differential expression after treatment — 4 of 700 points, the named or the highest
PointGrouplog2 fold change−log10 p
CDK4Up3.085.63
BRCA1Down−4.019.34
TP53Down−2.826.56
MYCUp2.486.48
  • Volcano plot
  • Find what stands out among many points

Genome-wide association

examples/genome-scan.jsonDetail: Genome-wide association →
{
  "schemaVersion": 1,
  "type": "scatter",
  "title": "Genome-wide association",
  "source": "Illustrative data, positions in megabases",
  "width": 900,
  "height": 420,
  "scatter": {
    "points": [
      {
        "x": 41.1,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 119.3,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 201.2,
        "y": 0.3,
        "group": "Odd chromosomes"
      },
      {
        "x": 58.8,
        "y": 0.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 145.8,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 57.8,
        "y": 1.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 248.4,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 153.4,
        "y": 0.48,
        "group": "Odd chromosomes"
      },
      {
        "x": 123.9,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 91.7,
        "y": 0.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 31.1,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 137.4,
        "y": 0.31,
        "group": "Odd chromosomes"
      },
      {
        "x": 46.5,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 58.5,
        "y": 0.68,
        "group": "Odd chromosomes"
      },
      {
        "x": 241.2,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 189.9,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 30.5,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 50.1,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 102,
        "y": 0.35,
        "group": "Odd chromosomes"
      },
      {
        "x": 96.1,
        "y": 5.93,
        "group": "Odd chromosomes"
      },
      {
        "x": 6.7,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 247.2,
        "y": 0.31,
        "group": "Odd chromosomes"
      },
      {
        "x": 137.1,
        "y": 0.65,
        "group": "Odd chromosomes"
      },
      {
        "x": 151.6,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 45,
        "y": 0.46,
        "group": "Odd chromosomes"
      },
      {
        "x": 230.8,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 76.3,
        "y": 1.18,
        "group": "Odd chromosomes"
      },
      {
        "x": 202.6,
        "y": 0.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 170.2,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 238.6,
        "y": 0,
        "group": "Odd chromosomes"
      },
      {
        "x": 239.4,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 122.2,
        "y": 0.61,
        "group": "Odd chromosomes"
      },
      {
        "x": 218.2,
        "y": 1.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 200.5,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 208.4,
        "y": 0.59,
        "group": "Odd chromosomes"
      },
      {
        "x": 72.2,
        "y": 0.77,
        "group": "Odd chromosomes"
      },
      {
        "x": 17.3,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 244.9,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 62.8,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 181.4,
        "y": 0.67,
        "group": "Odd chromosomes"
      },
      {
        "x": 452.7,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 395.1,
        "y": 0.24,
        "group": "Even chromosomes"
      },
      {
        "x": 455.4,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 316.1,
        "y": 1.99,
        "group": "Even chromosomes"
      },
      {
        "x": 415.5,
        "y": 1.63,
        "group": "Even chromosomes"
      },
      {
        "x": 393.3,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 391,
        "y": 0.39,
        "group": "Even chromosomes"
      },
      {
        "x": 482,
        "y": 0.87,
        "group": "Even chromosomes"
      },
      {
        "x": 272,
        "y": 1.6,
        "group": "Even chromosomes"
      },
      {
        "x": 357.6,
        "y": 0.06,
        "group": "Even chromosomes"
      },
      {
        "x": 408.2,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 327.8,
        "y": 0.66,
        "group": "Even chromosomes"
      },
      {
        "x": 289.4,
        "y": 0.42,
        "group": "Even chromosomes"
      },
      {
        "x": 421.5,
        "y": 1.34,
        "group": "Even chromosomes"
      },
      {
        "x": 421.7,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 441.1,
        "y": 0.33,
        "group": "Even chromosomes"
      },
      {
        "x": 264.4,
        "y": 0.76,
        "group": "Even chromosomes"
      },
      {
        "x": 421.9,
        "y": 0.16,
        "group": "Even chromosomes"
      },
      {
        "x": 325.2,
        "y": 0.41,
        "group": "Even chromosomes"
      },
      {
        "x": 324.2,
        "y": 0.53,
        "group": "Even chromosomes"
      },
      {
        "x": 371.3,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 273,
        "y": 0.29,
        "group": "Even chromosomes"
      },
      {
        "x": 427.5,
        "y": 0.51,
        "group": "Even chromosomes"
      },
      {
        "x": 419,
        "y": 0.25,
        "group": "Even chromosomes"
      },
      {
        "x": 264.5,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 335.3,
        "y": 0,
        "group": "Even chromosomes"
      },
      {
        "x": 275.1,
        "y": 1.13,
        "group": "Even chromosomes"
      },
      {
        "x": 446.9,
        "y": 0.35,
        "group": "Even chromosomes"
      },
      {
        "x": 400,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 356.6,
        "y": 0.41,
        "group": "Even chromosomes"
      },
      {
        "x": 346.6,
        "y": 1.31,
        "group": "Even chromosomes"
      },
      {
        "x": 354.4,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 447.6,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 306.5,
        "y": 0.31,
        "group": "Even chromosomes"
      },
      {
        "x": 402.5,
        "y": 1.07,
        "group": "Even chromosomes"
      },
      {
        "x": 365.6,
        "y": 0.14,
        "group": "Even chromosomes"
      },
      {
        "x": 465.4,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 433.3,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 418.9,
        "y": 0.61,
        "group": "Even chromosomes"
      },
      {
        "x": 471.8,
        "y": 0.21,
        "group": "Even chromosomes"
      },
      {
        "x": 655.3,
        "y": 0,
        "group": "Odd chromosomes"
      },
      {
        "x": 493.3,
        "y": 0.51,
        "group": "Odd chromosomes"
      },
      {
        "x": 569.5,
        "y": 0.26,
        "group": "Odd chromosomes"
      },
      {
        "x": 507.7,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 639,
        "y": 0.97,
        "group": "Odd chromosomes"
      },
      {
        "x": 681.3,
        "y": 0.69,
        "group": "Odd chromosomes"
      },
      {
        "x": 558.4,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 543.7,
        "y": 0.49,
        "group": "Odd chromosomes"
      },
      {
        "x": 542.3,
        "y": 0.81,
        "group": "Odd chromosomes"
      },
      {
        "x": 626.9,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 546.9,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 584.5,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 547.6,
        "y": 0.41,
        "group": "Odd chromosomes"
      },
      {
        "x": 545.9,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 498.8,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 631.5,
        "y": 0.3,
        "group": "Odd chromosomes"
      },
      {
        "x": 499.8,
        "y": 0.15,
        "group": "Odd chromosomes"
      },
      {
        "x": 539.6,
        "y": 0.26,
        "group": "Odd chromosomes"
      },
      {
        "x": 510.7,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 669.1,
        "y": 0.87,
        "group": "Odd chromosomes"
      },
      {
        "x": 648.8,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 501.7,
        "y": 0.39,
        "group": "Odd chromosomes"
      },
      {
        "x": 601.3,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 659,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 495.5,
        "y": 1.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 670.1,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 529.3,
        "y": 0.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 612.1,
        "y": 0.33,
        "group": "Odd chromosomes"
      },
      {
        "x": 650.4,
        "y": 0.57,
        "group": "Odd chromosomes"
      },
      {
        "x": 561.9,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 668.2,
        "y": 1.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 593.3,
        "y": 0.72,
        "group": "Odd chromosomes"
      },
      {
        "x": 545.4,
        "y": 1.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 590,
        "y": 0.18,
        "group": "Odd chromosomes"
      },
      {
        "x": 523.3,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 598.6,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 636.1,
        "y": 1.11,
        "group": "Odd chromosomes"
      },
      {
        "x": 655.8,
        "y": 1.39,
        "group": "Odd chromosomes"
      },
      {
        "x": 561.8,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 526.5,
        "y": 0.31,
        "group": "Odd chromosomes"
      },
      {
        "x": 720.9,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 863.1,
        "y": 0.66,
        "group": "Even chromosomes"
      },
      {
        "x": 838.5,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 863.5,
        "y": 0.41,
        "group": "Even chromosomes"
      },
      {
        "x": 869.9,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 692.1,
        "y": 0.21,
        "group": "Even chromosomes"
      },
      {
        "x": 806,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 720.8,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 858.4,
        "y": 0,
        "group": "Even chromosomes"
      },
      {
        "x": 796,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 858.6,
        "y": 1.08,
        "group": "Even chromosomes"
      },
      {
        "x": 767.5,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 845.7,
        "y": 0.88,
        "group": "Even chromosomes"
      },
      {
        "x": 695.2,
        "y": 0.24,
        "group": "Even chromosomes"
      },
      {
        "x": 695,
        "y": 0.68,
        "group": "Even chromosomes"
      },
      {
        "x": 710.4,
        "y": 0.28,
        "group": "Even chromosomes"
      },
      {
        "x": 861,
        "y": 0.91,
        "group": "Even chromosomes"
      },
      {
        "x": 735.8,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 837.2,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 738.3,
        "y": 0.42,
        "group": "Even chromosomes"
      },
      {
        "x": 783.5,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 777.6,
        "y": 0.08,
        "group": "Even chromosomes"
      },
      {
        "x": 802,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 829.6,
        "y": 5.88,
        "group": "Even chromosomes"
      },
      {
        "x": 765.2,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 801.1,
        "y": 0,
        "group": "Even chromosomes"
      },
      {
        "x": 727.6,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 845.2,
        "y": 1.26,
        "group": "Even chromosomes"
      },
      {
        "x": 760.8,
        "y": 0.3,
        "group": "Even chromosomes"
      },
      {
        "x": 778.1,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 804.3,
        "y": 0.06,
        "group": "Even chromosomes"
      },
      {
        "x": 833.5,
        "y": 0.6,
        "group": "Even chromosomes"
      },
      {
        "x": 839.3,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 728,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 704.7,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 717.9,
        "y": 0.58,
        "group": "Even chromosomes"
      },
      {
        "x": 820.3,
        "y": 0.66,
        "group": "Even chromosomes"
      },
      {
        "x": 729.5,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 731.6,
        "y": 0.47,
        "group": "Even chromosomes"
      },
      {
        "x": 814,
        "y": 0.71,
        "group": "Even chromosomes"
      },
      {
        "x": 906.5,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 955.9,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 999.5,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 988.6,
        "y": 0.3,
        "group": "Odd chromosomes"
      },
      {
        "x": 1055.2,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 996.1,
        "y": 0.46,
        "group": "Odd chromosomes"
      },
      {
        "x": 1017.7,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 974,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 884.6,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 921.1,
        "y": 0.23,
        "group": "Odd chromosomes"
      },
      {
        "x": 896.7,
        "y": 0.78,
        "group": "Odd chromosomes"
      },
      {
        "x": 1025.6,
        "y": 0.48,
        "group": "Odd chromosomes"
      },
      {
        "x": 920,
        "y": 0.73,
        "group": "Odd chromosomes"
      },
      {
        "x": 908.5,
        "y": 0.07,
        "group": "Odd chromosomes"
      },
      {
        "x": 921,
        "y": 0.27,
        "group": "Odd chromosomes"
      },
      {
        "x": 901.9,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 917.8,
        "y": 0.27,
        "group": "Odd chromosomes"
      },
      {
        "x": 896.4,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 898.4,
        "y": 0.24,
        "group": "Odd chromosomes"
      },
      {
        "x": 1029.1,
        "y": 0.18,
        "group": "Odd chromosomes"
      },
      {
        "x": 882.6,
        "y": 0.5,
        "group": "Odd chromosomes"
      },
      {
        "x": 1046.3,
        "y": 0.11,
        "group": "Odd chromosomes"
      },
      {
        "x": 887.2,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 1020.6,
        "y": 0.74,
        "group": "Odd chromosomes"
      },
      {
        "x": 1048.6,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 1021.5,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 910.7,
        "y": 0.18,
        "group": "Odd chromosomes"
      },
      {
        "x": 999.7,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 890.7,
        "y": 1.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 939.8,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 908,
        "y": 0.95,
        "group": "Odd chromosomes"
      },
      {
        "x": 1000.8,
        "y": 0.64,
        "group": "Odd chromosomes"
      },
      {
        "x": 948.7,
        "y": 0.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 1006,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 981.7,
        "y": 0.7,
        "group": "Odd chromosomes"
      },
      {
        "x": 970.5,
        "y": 0.48,
        "group": "Odd chromosomes"
      },
      {
        "x": 914.8,
        "y": 0.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 917.2,
        "y": 0.67,
        "group": "Odd chromosomes"
      },
      {
        "x": 1038.2,
        "y": 0.18,
        "group": "Odd chromosomes"
      },
      {
        "x": 922.7,
        "y": 0.35,
        "group": "Odd chromosomes"
      },
      {
        "x": 1187.9,
        "y": 0.43,
        "group": "Even chromosomes"
      },
      {
        "x": 1109.9,
        "y": 0.08,
        "group": "Even chromosomes"
      },
      {
        "x": 1180.3,
        "y": 0.48,
        "group": "Even chromosomes"
      },
      {
        "x": 1214.4,
        "y": 0.84,
        "group": "Even chromosomes"
      },
      {
        "x": 1178.2,
        "y": 0.17,
        "group": "Even chromosomes"
      },
      {
        "x": 1226.9,
        "y": 0.61,
        "group": "Even chromosomes"
      },
      {
        "x": 1232.4,
        "y": 0.42,
        "group": "Even chromosomes"
      },
      {
        "x": 1229,
        "y": 0.4,
        "group": "Even chromosomes"
      },
      {
        "x": 1169,
        "y": 0.57,
        "group": "Even chromosomes"
      },
      {
        "x": 1197.8,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 1197.1,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 1202.8,
        "y": 0.3,
        "group": "Even chromosomes"
      },
      {
        "x": 1182,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 1174,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 1112.4,
        "y": 0.41,
        "group": "Even chromosomes"
      },
      {
        "x": 1085.4,
        "y": 1.03,
        "group": "Even chromosomes"
      },
      {
        "x": 1139.7,
        "y": 1.31,
        "group": "Even chromosomes"
      },
      {
        "x": 1170.9,
        "y": 0.29,
        "group": "Even chromosomes"
      },
      {
        "x": 1112.6,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 1132.7,
        "y": 0.14,
        "group": "Even chromosomes"
      },
      {
        "x": 1081.8,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 1204.8,
        "y": 0.59,
        "group": "Even chromosomes"
      },
      {
        "x": 1168.9,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 1206.7,
        "y": 0.46,
        "group": "Even chromosomes"
      },
      {
        "x": 1222.1,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 1202,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 1062.6,
        "y": 0.78,
        "group": "Even chromosomes"
      },
      {
        "x": 1121.1,
        "y": 1.6,
        "group": "Even chromosomes"
      },
      {
        "x": 1199.3,
        "y": 0.24,
        "group": "Even chromosomes"
      },
      {
        "x": 1156.8,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 1168.3,
        "y": 0.12,
        "group": "Even chromosomes"
      },
      {
        "x": 1078.7,
        "y": 0.51,
        "group": "Even chromosomes"
      },
      {
        "x": 1105.2,
        "y": 0.4,
        "group": "Even chromosomes"
      },
      {
        "x": 1197.4,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 1186.7,
        "y": 0.49,
        "group": "Even chromosomes"
      },
      {
        "x": 1114,
        "y": 0.06,
        "group": "Even chromosomes"
      },
      {
        "x": 1232.3,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 1219,
        "y": 0.16,
        "group": "Even chromosomes"
      },
      {
        "x": 1196.1,
        "y": 0.21,
        "group": "Even chromosomes"
      },
      {
        "x": 1229.9,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 1246.5,
        "y": 0.31,
        "group": "Odd chromosomes"
      },
      {
        "x": 1377.6,
        "y": 0.26,
        "group": "Odd chromosomes"
      },
      {
        "x": 1252.2,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 1238,
        "y": 0.85,
        "group": "Odd chromosomes"
      },
      {
        "x": 1334,
        "y": 1.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 1384.2,
        "y": 0.36,
        "group": "Odd chromosomes"
      },
      {
        "x": 1324.3,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 1296.3,
        "y": 0.13,
        "group": "Odd chromosomes"
      },
      {
        "x": 1262.6,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 1268.8,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 1258.4,
        "y": 0.5,
        "group": "Odd chromosomes"
      },
      {
        "x": 1274.6,
        "y": 0.27,
        "group": "Odd chromosomes"
      },
      {
        "x": 1251.5,
        "y": 1.29,
        "group": "Odd chromosomes"
      },
      {
        "x": 1245.5,
        "y": 0.62,
        "group": "Odd chromosomes"
      },
      {
        "x": 1287.3,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 1337.6,
        "y": 0.11,
        "group": "Odd chromosomes"
      },
      {
        "x": 1342.1,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 1351.5,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 1333.6,
        "y": 0.58,
        "group": "Odd chromosomes"
      },
      {
        "x": 1339.8,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 1376.9,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 1275.2,
        "y": 0.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 1318.1,
        "y": 0.59,
        "group": "Odd chromosomes"
      },
      {
        "x": 1370.6,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 1251.4,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 1265.3,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 1314.2,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 1357.2,
        "y": 0.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 1299.7,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 1274.5,
        "y": 0.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 1235.4,
        "y": 0.42,
        "group": "Odd chromosomes"
      },
      {
        "x": 1264.3,
        "y": 0,
        "group": "Odd chromosomes"
      },
      {
        "x": 1381.1,
        "y": 0.07,
        "group": "Odd chromosomes"
      },
      {
        "x": 1311.2,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 1242.5,
        "y": 0.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 1287.2,
        "y": 1.24,
        "group": "Odd chromosomes"
      },
      {
        "x": 1341,
        "y": 0.63,
        "group": "Odd chromosomes"
      },
      {
        "x": 1262.5,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 1269,
        "y": 0.76,
        "group": "Odd chromosomes"
      },
      {
        "x": 1327.6,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 1404.3,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 1462.2,
        "y": 0.22,
        "group": "Even chromosomes"
      },
      {
        "x": 1416.6,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 1459.7,
        "y": 0.78,
        "group": "Even chromosomes"
      },
      {
        "x": 1419.2,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 1457.4,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 1442.1,
        "y": 0.69,
        "group": "Even chromosomes"
      },
      {
        "x": 1467.1,
        "y": 0.95,
        "group": "Even chromosomes"
      },
      {
        "x": 1441.2,
        "y": 0.42,
        "group": "Even chromosomes"
      },
      {
        "x": 1487.3,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 1461.7,
        "y": 0.14,
        "group": "Even chromosomes"
      },
      {
        "x": 1450.7,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 1468.5,
        "y": 0.45,
        "group": "Even chromosomes"
      },
      {
        "x": 1464.8,
        "y": 0.99,
        "group": "Even chromosomes"
      },
      {
        "x": 1450.2,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 1503.2,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 1452.1,
        "y": 1.27,
        "group": "Even chromosomes"
      },
      {
        "x": 1507.9,
        "y": 0.58,
        "group": "Even chromosomes"
      },
      {
        "x": 1461,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 1454.3,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 1505.5,
        "y": 0.47,
        "group": "Even chromosomes"
      },
      {
        "x": 1530.1,
        "y": 0.72,
        "group": "Even chromosomes"
      },
      {
        "x": 1444.9,
        "y": 0.12,
        "group": "Even chromosomes"
      },
      {
        "x": 1433.3,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 1405.2,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 1524.5,
        "y": 0.33,
        "group": "Even chromosomes"
      },
      {
        "x": 1507.4,
        "y": 0.48,
        "group": "Even chromosomes"
      },
      {
        "x": 1425.2,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 1412.4,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 1421.4,
        "y": 0.28,
        "group": "Even chromosomes"
      },
      {
        "x": 1533.1,
        "y": 0.31,
        "group": "Even chromosomes"
      },
      {
        "x": 1523.9,
        "y": 0.84,
        "group": "Even chromosomes"
      },
      {
        "x": 1509.4,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 1532.6,
        "y": 0.38,
        "group": "Even chromosomes"
      },
      {
        "x": 1425.1,
        "y": 0.69,
        "group": "Even chromosomes"
      },
      {
        "x": 1416.6,
        "y": 1.29,
        "group": "Even chromosomes"
      },
      {
        "x": 1479.4,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 1474.8,
        "y": 0.55,
        "group": "Even chromosomes"
      },
      {
        "x": 1405.6,
        "y": 0.57,
        "group": "Even chromosomes"
      },
      {
        "x": 1536.3,
        "y": 0.16,
        "group": "Even chromosomes"
      },
      {
        "x": 1655.5,
        "y": 0.31,
        "group": "Odd chromosomes"
      },
      {
        "x": 1592,
        "y": 0.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 1605.4,
        "y": 1.6,
        "group": "Odd chromosomes"
      },
      {
        "x": 1614,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 1615.8,
        "y": 0.5,
        "group": "Odd chromosomes"
      },
      {
        "x": 1637.5,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 1619.9,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 1545.1,
        "y": 0.51,
        "group": "Odd chromosomes"
      },
      {
        "x": 1639.4,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 1561.8,
        "y": 0.58,
        "group": "Odd chromosomes"
      },
      {
        "x": 1657.6,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 1649.4,
        "y": 0.59,
        "group": "Odd chromosomes"
      },
      {
        "x": 1635.9,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 1586.9,
        "y": 0.11,
        "group": "Odd chromosomes"
      },
      {
        "x": 1573.4,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 1658,
        "y": 0.18,
        "group": "Odd chromosomes"
      },
      {
        "x": 1568.6,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 1629.3,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 1561.2,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 1574.5,
        "y": 0.84,
        "group": "Odd chromosomes"
      },
      {
        "x": 1574.7,
        "y": 0.19,
        "group": "Odd chromosomes"
      },
      {
        "x": 1630.7,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 1627.5,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 1658.3,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 1556.4,
        "y": 0.38,
        "group": "Odd chromosomes"
      },
      {
        "x": 1672.7,
        "y": 0.41,
        "group": "Odd chromosomes"
      },
      {
        "x": 1567.2,
        "y": 0.74,
        "group": "Odd chromosomes"
      },
      {
        "x": 1657.5,
        "y": 0.26,
        "group": "Odd chromosomes"
      },
      {
        "x": 1661.6,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 1627.7,
        "y": 0.39,
        "group": "Odd chromosomes"
      },
      {
        "x": 1629.1,
        "y": 0.81,
        "group": "Odd chromosomes"
      },
      {
        "x": 1539.3,
        "y": 0.24,
        "group": "Odd chromosomes"
      },
      {
        "x": 1650.7,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 1601.9,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 1611.2,
        "y": 0.19,
        "group": "Odd chromosomes"
      },
      {
        "x": 1558.8,
        "y": 0.29,
        "group": "Odd chromosomes"
      },
      {
        "x": 1544,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 1676,
        "y": 0.58,
        "group": "Odd chromosomes"
      },
      {
        "x": 1670,
        "y": 1.75,
        "group": "Odd chromosomes"
      },
      {
        "x": 1572.8,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 1688.1,
        "y": 0.14,
        "group": "Even chromosomes"
      },
      {
        "x": 1725.8,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 1738.4,
        "y": 0.31,
        "group": "Even chromosomes"
      },
      {
        "x": 1789.5,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 1789.6,
        "y": 0.31,
        "group": "Even chromosomes"
      },
      {
        "x": 1761.9,
        "y": 1.12,
        "group": "Even chromosomes"
      },
      {
        "x": 1799.3,
        "y": 0.12,
        "group": "Even chromosomes"
      },
      {
        "x": 1795.8,
        "y": 0,
        "group": "Even chromosomes"
      },
      {
        "x": 1743.4,
        "y": 4.4,
        "group": "Even chromosomes"
      },
      {
        "x": 1730.5,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 1749.8,
        "y": 0.43,
        "group": "Even chromosomes"
      },
      {
        "x": 1771.1,
        "y": 0.22,
        "group": "Even chromosomes"
      },
      {
        "x": 1681.8,
        "y": 3.89,
        "group": "Even chromosomes"
      },
      {
        "x": 1720.2,
        "y": 0.12,
        "group": "Even chromosomes"
      },
      {
        "x": 1701.9,
        "y": 1.14,
        "group": "Even chromosomes"
      },
      {
        "x": 1707.1,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 1688.7,
        "y": 0.4,
        "group": "Even chromosomes"
      },
      {
        "x": 1763.6,
        "y": 1.78,
        "group": "Even chromosomes"
      },
      {
        "x": 1689.7,
        "y": 0.31,
        "group": "Even chromosomes"
      },
      {
        "x": 1762.3,
        "y": 0.16,
        "group": "Even chromosomes"
      },
      {
        "x": 1801.5,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 1794.4,
        "y": 6.83,
        "group": "Even chromosomes"
      },
      {
        "x": 1766.7,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 1721.2,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 1813.5,
        "y": 1.02,
        "group": "Even chromosomes"
      },
      {
        "x": 1703.1,
        "y": 0.4,
        "group": "Even chromosomes"
      },
      {
        "x": 1776.5,
        "y": 0.25,
        "group": "Even chromosomes"
      },
      {
        "x": 1740.5,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 1738,
        "y": 0.89,
        "group": "Even chromosomes"
      },
      {
        "x": 1801.2,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 1689.6,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 1726.6,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 1691.3,
        "y": 0.51,
        "group": "Even chromosomes"
      },
      {
        "x": 1744.3,
        "y": 0.06,
        "group": "Even chromosomes"
      },
      {
        "x": 1795.1,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 1699.8,
        "y": 0.36,
        "group": "Even chromosomes"
      },
      {
        "x": 1796.8,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 1789.3,
        "y": 0.35,
        "group": "Even chromosomes"
      },
      {
        "x": 1693,
        "y": 0.7,
        "group": "Even chromosomes"
      },
      {
        "x": 1778.5,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 1896,
        "y": 0.92,
        "group": "Odd chromosomes"
      },
      {
        "x": 1875.3,
        "y": 0.84,
        "group": "Odd chromosomes"
      },
      {
        "x": 1946.8,
        "y": 0.36,
        "group": "Odd chromosomes"
      },
      {
        "x": 1853.5,
        "y": 0.56,
        "group": "Odd chromosomes"
      },
      {
        "x": 1930.3,
        "y": 0.44,
        "group": "Odd chromosomes"
      },
      {
        "x": 1895.7,
        "y": 0.49,
        "group": "Odd chromosomes"
      },
      {
        "x": 1880.4,
        "y": 0.51,
        "group": "Odd chromosomes"
      },
      {
        "x": 1873.7,
        "y": 0.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 1871.1,
        "y": 0.56,
        "group": "Odd chromosomes"
      },
      {
        "x": 1889.3,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 1887.8,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 1922.3,
        "y": 5.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 1943.8,
        "y": 0.44,
        "group": "Odd chromosomes"
      },
      {
        "x": 1876.4,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 1923.7,
        "y": 0.93,
        "group": "Odd chromosomes"
      },
      {
        "x": 1842.5,
        "y": 0.15,
        "group": "Odd chromosomes"
      },
      {
        "x": 1823.9,
        "y": 0,
        "group": "Odd chromosomes"
      },
      {
        "x": 1860.6,
        "y": 0.33,
        "group": "Odd chromosomes"
      },
      {
        "x": 1828.2,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 1897.7,
        "y": 0.9,
        "group": "Odd chromosomes"
      },
      {
        "x": 1844,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 1874.2,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 1942.5,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 1947.1,
        "y": 1.55,
        "group": "Odd chromosomes"
      },
      {
        "x": 1926.9,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 1878.2,
        "y": 0.35,
        "group": "Odd chromosomes"
      },
      {
        "x": 1833.2,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 1925.1,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 1865.2,
        "y": 0.25,
        "group": "Odd chromosomes"
      },
      {
        "x": 1930.8,
        "y": 1.53,
        "group": "Odd chromosomes"
      },
      {
        "x": 1890.3,
        "y": 0.39,
        "group": "Odd chromosomes"
      },
      {
        "x": 1926.6,
        "y": 0.44,
        "group": "Odd chromosomes"
      },
      {
        "x": 1863.5,
        "y": 0.3,
        "group": "Odd chromosomes"
      },
      {
        "x": 1944.5,
        "y": 0.11,
        "group": "Odd chromosomes"
      },
      {
        "x": 1839.2,
        "y": 0.24,
        "group": "Odd chromosomes"
      },
      {
        "x": 1866.8,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 1832.4,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 1854.1,
        "y": 0.48,
        "group": "Odd chromosomes"
      },
      {
        "x": 1888.2,
        "y": 0.84,
        "group": "Odd chromosomes"
      },
      {
        "x": 1848.1,
        "y": 0.56,
        "group": "Odd chromosomes"
      },
      {
        "x": 2039.4,
        "y": 3.34,
        "group": "Even chromosomes"
      },
      {
        "x": 1953.7,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2043.1,
        "y": 1,
        "group": "Even chromosomes"
      },
      {
        "x": 2020.6,
        "y": 0.49,
        "group": "Even chromosomes"
      },
      {
        "x": 1954.7,
        "y": 0.33,
        "group": "Even chromosomes"
      },
      {
        "x": 1988.1,
        "y": 1.18,
        "group": "Even chromosomes"
      },
      {
        "x": 1953.7,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 1954.4,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2028.7,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 2058.2,
        "y": 0.37,
        "group": "Even chromosomes"
      },
      {
        "x": 2073,
        "y": 0.06,
        "group": "Even chromosomes"
      },
      {
        "x": 2033,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 2029.2,
        "y": 0.6,
        "group": "Even chromosomes"
      },
      {
        "x": 1997.4,
        "y": 1.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2045.5,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 2002.5,
        "y": 0.61,
        "group": "Even chromosomes"
      },
      {
        "x": 2018.7,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 1967.5,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2033.7,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 2082,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 2079.5,
        "y": 1.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2016.6,
        "y": 2.98,
        "group": "Even chromosomes"
      },
      {
        "x": 2050.9,
        "y": 0.94,
        "group": "Even chromosomes"
      },
      {
        "x": 2030.8,
        "y": 1,
        "group": "Even chromosomes"
      },
      {
        "x": 2019.9,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 2020.6,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 1950.8,
        "y": 0.55,
        "group": "Even chromosomes"
      },
      {
        "x": 2070.5,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 1978.9,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2078.7,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 2069.9,
        "y": 0.47,
        "group": "Even chromosomes"
      },
      {
        "x": 2030.9,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2024.1,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 2051.1,
        "y": 0.47,
        "group": "Even chromosomes"
      },
      {
        "x": 1961.4,
        "y": 0.8,
        "group": "Even chromosomes"
      },
      {
        "x": 1990.2,
        "y": 0.92,
        "group": "Even chromosomes"
      },
      {
        "x": 2073,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 1981.9,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2032.9,
        "y": 1.69,
        "group": "Even chromosomes"
      },
      {
        "x": 1961.5,
        "y": 1.65,
        "group": "Even chromosomes"
      },
      {
        "x": 2186.8,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 2138.2,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2178.7,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 2174.7,
        "y": 0.52,
        "group": "Odd chromosomes"
      },
      {
        "x": 2184.2,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2123.5,
        "y": 0.98,
        "group": "Odd chromosomes"
      },
      {
        "x": 2179.7,
        "y": 0.74,
        "group": "Odd chromosomes"
      },
      {
        "x": 2086.8,
        "y": 0,
        "group": "Odd chromosomes"
      },
      {
        "x": 2092.1,
        "y": 0.57,
        "group": "Odd chromosomes"
      },
      {
        "x": 2164.7,
        "y": 0.76,
        "group": "Odd chromosomes"
      },
      {
        "x": 2163.5,
        "y": 0.78,
        "group": "Odd chromosomes"
      },
      {
        "x": 2091.3,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 2090.8,
        "y": 0.19,
        "group": "Odd chromosomes"
      },
      {
        "x": 2171.6,
        "y": 1.35,
        "group": "Odd chromosomes"
      },
      {
        "x": 2147.3,
        "y": 1.13,
        "group": "Odd chromosomes"
      },
      {
        "x": 2090.5,
        "y": 0.99,
        "group": "Odd chromosomes"
      },
      {
        "x": 2138.6,
        "y": 0.7,
        "group": "Odd chromosomes"
      },
      {
        "x": 2128.8,
        "y": 0.25,
        "group": "Odd chromosomes"
      },
      {
        "x": 2106.3,
        "y": 0,
        "group": "Odd chromosomes"
      },
      {
        "x": 2178.1,
        "y": 1.63,
        "group": "Odd chromosomes"
      },
      {
        "x": 2090.7,
        "y": 1.9,
        "group": "Odd chromosomes"
      },
      {
        "x": 2194.7,
        "y": 0.26,
        "group": "Odd chromosomes"
      },
      {
        "x": 2184.9,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 2101.8,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 2137.8,
        "y": 0.07,
        "group": "Odd chromosomes"
      },
      {
        "x": 2125.1,
        "y": 0.5,
        "group": "Odd chromosomes"
      },
      {
        "x": 2179.2,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2193.4,
        "y": 0.38,
        "group": "Odd chromosomes"
      },
      {
        "x": 2196.8,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2109.6,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 2099.4,
        "y": 0.26,
        "group": "Odd chromosomes"
      },
      {
        "x": 2192.6,
        "y": 0.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 2194.5,
        "y": 1.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 2099.4,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 2103.7,
        "y": 0.15,
        "group": "Odd chromosomes"
      },
      {
        "x": 2095.1,
        "y": 0.8,
        "group": "Odd chromosomes"
      },
      {
        "x": 2150.5,
        "y": 0.07,
        "group": "Odd chromosomes"
      },
      {
        "x": 2101.6,
        "y": 0.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 2127.1,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2098,
        "y": 0.36,
        "group": "Odd chromosomes"
      },
      {
        "x": 2254.1,
        "y": 1.68,
        "group": "Even chromosomes"
      },
      {
        "x": 2227.6,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 2222.4,
        "y": 0.14,
        "group": "Even chromosomes"
      },
      {
        "x": 2305.5,
        "y": 0.38,
        "group": "Even chromosomes"
      },
      {
        "x": 2283.3,
        "y": 0.75,
        "group": "Even chromosomes"
      },
      {
        "x": 2271.2,
        "y": 0.35,
        "group": "Even chromosomes"
      },
      {
        "x": 2239.9,
        "y": 0.39,
        "group": "Even chromosomes"
      },
      {
        "x": 2288.9,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 2237.3,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2296.6,
        "y": 0.37,
        "group": "Even chromosomes"
      },
      {
        "x": 2247.3,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 2286.6,
        "y": 0.5,
        "group": "Even chromosomes"
      },
      {
        "x": 2206,
        "y": 0.32,
        "group": "Even chromosomes"
      },
      {
        "x": 2304.9,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2220.4,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 2206.9,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 2201.9,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2216.3,
        "y": 0.38,
        "group": "Even chromosomes"
      },
      {
        "x": 2240.7,
        "y": 0.4,
        "group": "Even chromosomes"
      },
      {
        "x": 2293.1,
        "y": 0.26,
        "group": "Even chromosomes"
      },
      {
        "x": 2209.9,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 2227.2,
        "y": 0.7,
        "group": "Even chromosomes"
      },
      {
        "x": 2277.4,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 2262.5,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 2260.7,
        "y": 0.28,
        "group": "Even chromosomes"
      },
      {
        "x": 2233.7,
        "y": 0.25,
        "group": "Even chromosomes"
      },
      {
        "x": 2273.7,
        "y": 0.06,
        "group": "Even chromosomes"
      },
      {
        "x": 2256.3,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2275.1,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2290.1,
        "y": 0.91,
        "group": "Even chromosomes"
      },
      {
        "x": 2291.6,
        "y": 0.71,
        "group": "Even chromosomes"
      },
      {
        "x": 2273.3,
        "y": 0.24,
        "group": "Even chromosomes"
      },
      {
        "x": 2300.5,
        "y": 1.92,
        "group": "Even chromosomes"
      },
      {
        "x": 2269.6,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2279.8,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 2249.7,
        "y": 0.78,
        "group": "Even chromosomes"
      },
      {
        "x": 2204.3,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2296,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2259.3,
        "y": 0.8,
        "group": "Even chromosomes"
      },
      {
        "x": 2241.8,
        "y": 0.5,
        "group": "Even chromosomes"
      },
      {
        "x": 2358.9,
        "y": 0.75,
        "group": "Odd chromosomes"
      },
      {
        "x": 2314.7,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2351.6,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 2388,
        "y": 0.3,
        "group": "Odd chromosomes"
      },
      {
        "x": 2310.7,
        "y": 0.56,
        "group": "Odd chromosomes"
      },
      {
        "x": 2340.4,
        "y": 0.3,
        "group": "Odd chromosomes"
      },
      {
        "x": 2335.4,
        "y": 0.13,
        "group": "Odd chromosomes"
      },
      {
        "x": 2407.5,
        "y": 0.85,
        "group": "Odd chromosomes"
      },
      {
        "x": 2376.9,
        "y": 0.27,
        "group": "Odd chromosomes"
      },
      {
        "x": 2370.7,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 2378.1,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2364.2,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 2390.1,
        "y": 0.51,
        "group": "Odd chromosomes"
      },
      {
        "x": 2378.5,
        "y": 8.81,
        "group": "Odd chromosomes"
      },
      {
        "x": 2337.6,
        "y": 0.42,
        "group": "Odd chromosomes"
      },
      {
        "x": 2320.5,
        "y": 0.54,
        "group": "Odd chromosomes"
      },
      {
        "x": 2354.8,
        "y": 0.26,
        "group": "Odd chromosomes"
      },
      {
        "x": 2407,
        "y": 0.73,
        "group": "Odd chromosomes"
      },
      {
        "x": 2312.6,
        "y": 0.54,
        "group": "Odd chromosomes"
      },
      {
        "x": 2328.3,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 2382.8,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 2359.8,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 2328.2,
        "y": 0.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 2381.4,
        "y": 0.39,
        "group": "Odd chromosomes"
      },
      {
        "x": 2318.8,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 2356.4,
        "y": 0.13,
        "group": "Odd chromosomes"
      },
      {
        "x": 2364.5,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 2358.9,
        "y": 0.3,
        "group": "Odd chromosomes"
      },
      {
        "x": 2331.5,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 2351,
        "y": 0.41,
        "group": "Odd chromosomes"
      },
      {
        "x": 2338.8,
        "y": 1.65,
        "group": "Odd chromosomes"
      },
      {
        "x": 2368.6,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2366.9,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 2333.5,
        "y": 0.48,
        "group": "Odd chromosomes"
      },
      {
        "x": 2319.8,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 2314.6,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 2381.7,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2326.4,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 2398,
        "y": 2.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 2365.6,
        "y": 0.19,
        "group": "Odd chromosomes"
      },
      {
        "x": 2415.8,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 2461.3,
        "y": 2.08,
        "group": "Even chromosomes"
      },
      {
        "x": 2412,
        "y": 0.56,
        "group": "Even chromosomes"
      },
      {
        "x": 2414.4,
        "y": 0.68,
        "group": "Even chromosomes"
      },
      {
        "x": 2456.9,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 2466.2,
        "y": 0.22,
        "group": "Even chromosomes"
      },
      {
        "x": 2429.7,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 2433.7,
        "y": 0.72,
        "group": "Even chromosomes"
      },
      {
        "x": 2451,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 2432.8,
        "y": 0.55,
        "group": "Even chromosomes"
      },
      {
        "x": 2475.6,
        "y": 0.08,
        "group": "Even chromosomes"
      },
      {
        "x": 2470.6,
        "y": 0.28,
        "group": "Even chromosomes"
      },
      {
        "x": 2433.4,
        "y": 0.36,
        "group": "Even chromosomes"
      },
      {
        "x": 2412.6,
        "y": 0.73,
        "group": "Even chromosomes"
      },
      {
        "x": 2414.6,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 2468.2,
        "y": 0.23,
        "group": "Even chromosomes"
      },
      {
        "x": 2442.8,
        "y": 0.58,
        "group": "Even chromosomes"
      },
      {
        "x": 2484.9,
        "y": 0.35,
        "group": "Even chromosomes"
      },
      {
        "x": 2458,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2483.2,
        "y": 0.97,
        "group": "Even chromosomes"
      },
      {
        "x": 2489.7,
        "y": 0.95,
        "group": "Even chromosomes"
      },
      {
        "x": 2445.2,
        "y": 0.94,
        "group": "Even chromosomes"
      },
      {
        "x": 2465.9,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2482.5,
        "y": 0.47,
        "group": "Even chromosomes"
      },
      {
        "x": 2430.2,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 2497.7,
        "y": 0.25,
        "group": "Even chromosomes"
      },
      {
        "x": 2462.7,
        "y": 0.35,
        "group": "Even chromosomes"
      },
      {
        "x": 2418.6,
        "y": 0.84,
        "group": "Even chromosomes"
      },
      {
        "x": 2450.8,
        "y": 0.16,
        "group": "Even chromosomes"
      },
      {
        "x": 2425.4,
        "y": 0.14,
        "group": "Even chromosomes"
      },
      {
        "x": 2449.7,
        "y": 0.24,
        "group": "Even chromosomes"
      },
      {
        "x": 2442.4,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2469.2,
        "y": 1.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2464.7,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 2491,
        "y": 4.63,
        "group": "Even chromosomes"
      },
      {
        "x": 2424.6,
        "y": 0.95,
        "group": "Even chromosomes"
      },
      {
        "x": 2451.6,
        "y": 0.58,
        "group": "Even chromosomes"
      },
      {
        "x": 2481.6,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2414.9,
        "y": 1.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2460.2,
        "y": 0.16,
        "group": "Even chromosomes"
      },
      {
        "x": 2531.8,
        "y": 0.41,
        "group": "Odd chromosomes"
      },
      {
        "x": 2565.6,
        "y": 0.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 2561.1,
        "y": 0.23,
        "group": "Odd chromosomes"
      },
      {
        "x": 2532.6,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 2540,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 2511.9,
        "y": 0.25,
        "group": "Odd chromosomes"
      },
      {
        "x": 2506,
        "y": 0.73,
        "group": "Odd chromosomes"
      },
      {
        "x": 2538.2,
        "y": 0.11,
        "group": "Odd chromosomes"
      },
      {
        "x": 2571.7,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 2573.9,
        "y": 1.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 2535.6,
        "y": 0.9,
        "group": "Odd chromosomes"
      },
      {
        "x": 2539.4,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 2514.8,
        "y": 0.2,
        "group": "Odd chromosomes"
      },
      {
        "x": 2504.1,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 2578.5,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 2523.9,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 2502,
        "y": 0.89,
        "group": "Odd chromosomes"
      },
      {
        "x": 2567.3,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 2542.8,
        "y": 0.94,
        "group": "Odd chromosomes"
      },
      {
        "x": 2538.2,
        "y": 0.81,
        "group": "Odd chromosomes"
      },
      {
        "x": 2506.2,
        "y": 0.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 2509.1,
        "y": 0.94,
        "group": "Odd chromosomes"
      },
      {
        "x": 2564.2,
        "y": 0.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 2529.6,
        "y": 0.38,
        "group": "Odd chromosomes"
      },
      {
        "x": 2549.1,
        "y": 0.82,
        "group": "Odd chromosomes"
      },
      {
        "x": 2501.7,
        "y": 0.64,
        "group": "Odd chromosomes"
      },
      {
        "x": 2515.8,
        "y": 0.76,
        "group": "Odd chromosomes"
      },
      {
        "x": 2519.9,
        "y": 1.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 2564.1,
        "y": 0.14,
        "group": "Odd chromosomes"
      },
      {
        "x": 2533.6,
        "y": 0.27,
        "group": "Odd chromosomes"
      },
      {
        "x": 2542.9,
        "y": 0.45,
        "group": "Odd chromosomes"
      },
      {
        "x": 2515.6,
        "y": 0.02,
        "group": "Odd chromosomes"
      },
      {
        "x": 2548.8,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2504.5,
        "y": 1.37,
        "group": "Odd chromosomes"
      },
      {
        "x": 2576.1,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 2537.1,
        "y": 0.4,
        "group": "Odd chromosomes"
      },
      {
        "x": 2558.8,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 2563.1,
        "y": 0.56,
        "group": "Odd chromosomes"
      },
      {
        "x": 2518.9,
        "y": 5.69,
        "group": "Odd chromosomes"
      },
      {
        "x": 2527.8,
        "y": 0.54,
        "group": "Odd chromosomes"
      },
      {
        "x": 2614.6,
        "y": 0.35,
        "group": "Even chromosomes"
      },
      {
        "x": 2641.3,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 2651.8,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2633,
        "y": 0.31,
        "group": "Even chromosomes"
      },
      {
        "x": 2650.8,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 2587.2,
        "y": 0.88,
        "group": "Even chromosomes"
      },
      {
        "x": 2635.2,
        "y": 0.49,
        "group": "Even chromosomes"
      },
      {
        "x": 2605.3,
        "y": 0.51,
        "group": "Even chromosomes"
      },
      {
        "x": 2617.5,
        "y": 1.7,
        "group": "Even chromosomes"
      },
      {
        "x": 2596.1,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 2625.2,
        "y": 0.36,
        "group": "Even chromosomes"
      },
      {
        "x": 2650.1,
        "y": 0.3,
        "group": "Even chromosomes"
      },
      {
        "x": 2623.5,
        "y": 0.55,
        "group": "Even chromosomes"
      },
      {
        "x": 2601,
        "y": 0.3,
        "group": "Even chromosomes"
      },
      {
        "x": 2583,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2646.5,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 2608,
        "y": 0.08,
        "group": "Even chromosomes"
      },
      {
        "x": 2621.1,
        "y": 0.21,
        "group": "Even chromosomes"
      },
      {
        "x": 2655,
        "y": 0.24,
        "group": "Even chromosomes"
      },
      {
        "x": 2636.3,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2582.2,
        "y": 1.42,
        "group": "Even chromosomes"
      },
      {
        "x": 2603.8,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 2648.3,
        "y": 0.26,
        "group": "Even chromosomes"
      },
      {
        "x": 2630.9,
        "y": 0.43,
        "group": "Even chromosomes"
      },
      {
        "x": 2614.3,
        "y": 0.51,
        "group": "Even chromosomes"
      },
      {
        "x": 2600.8,
        "y": 0.72,
        "group": "Even chromosomes"
      },
      {
        "x": 2607.9,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2603.9,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 2587,
        "y": 0.06,
        "group": "Even chromosomes"
      },
      {
        "x": 2590,
        "y": 0.23,
        "group": "Even chromosomes"
      },
      {
        "x": 2641.9,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2589.6,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 2630.9,
        "y": 1.08,
        "group": "Even chromosomes"
      },
      {
        "x": 2615.3,
        "y": 0.52,
        "group": "Even chromosomes"
      },
      {
        "x": 2605.9,
        "y": 0.43,
        "group": "Even chromosomes"
      },
      {
        "x": 2612.6,
        "y": 0.59,
        "group": "Even chromosomes"
      },
      {
        "x": 2618,
        "y": 0.46,
        "group": "Even chromosomes"
      },
      {
        "x": 2598.5,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 2640.8,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 2602.7,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 2696,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 2704.4,
        "y": 0.21,
        "group": "Odd chromosomes"
      },
      {
        "x": 2681.7,
        "y": 0.53,
        "group": "Odd chromosomes"
      },
      {
        "x": 2699.9,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 2695.6,
        "y": 0.93,
        "group": "Odd chromosomes"
      },
      {
        "x": 2662.5,
        "y": 0.66,
        "group": "Odd chromosomes"
      },
      {
        "x": 2690.6,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2694.7,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 2712.1,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 2700.1,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 2657.2,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 2710.8,
        "y": 0.29,
        "group": "Odd chromosomes"
      },
      {
        "x": 2692.8,
        "y": 0.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 2694.6,
        "y": 1.1,
        "group": "Odd chromosomes"
      },
      {
        "x": 2661.6,
        "y": 0.39,
        "group": "Odd chromosomes"
      },
      {
        "x": 2664.8,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 2679.7,
        "y": 0.38,
        "group": "Odd chromosomes"
      },
      {
        "x": 2708.5,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 2679.7,
        "y": 0.29,
        "group": "Odd chromosomes"
      },
      {
        "x": 2677.1,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2660.3,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 2702.8,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 2665,
        "y": 0.39,
        "group": "Odd chromosomes"
      },
      {
        "x": 2678.3,
        "y": 0.23,
        "group": "Odd chromosomes"
      },
      {
        "x": 2705.9,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 2689.8,
        "y": 0.16,
        "group": "Odd chromosomes"
      },
      {
        "x": 2657.6,
        "y": 0.31,
        "group": "Odd chromosomes"
      },
      {
        "x": 2659.9,
        "y": 0.12,
        "group": "Odd chromosomes"
      },
      {
        "x": 2678.6,
        "y": 1.4,
        "group": "Odd chromosomes"
      },
      {
        "x": 2700.5,
        "y": 0.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 2685,
        "y": 0.38,
        "group": "Odd chromosomes"
      },
      {
        "x": 2657.3,
        "y": 0.49,
        "group": "Odd chromosomes"
      },
      {
        "x": 2670.3,
        "y": 1.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 2695.3,
        "y": 0.03,
        "group": "Odd chromosomes"
      },
      {
        "x": 2677.9,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 2692.5,
        "y": 0.36,
        "group": "Odd chromosomes"
      },
      {
        "x": 2658.2,
        "y": 1.93,
        "group": "Odd chromosomes"
      },
      {
        "x": 2697.3,
        "y": 0.24,
        "group": "Odd chromosomes"
      },
      {
        "x": 2697.8,
        "y": 0.01,
        "group": "Odd chromosomes"
      },
      {
        "x": 2666.9,
        "y": 0.48,
        "group": "Odd chromosomes"
      },
      {
        "x": 2744.9,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2737,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2717.1,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 2758,
        "y": 0.88,
        "group": "Even chromosomes"
      },
      {
        "x": 2758.4,
        "y": 0,
        "group": "Even chromosomes"
      },
      {
        "x": 2775.4,
        "y": 1.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2765.6,
        "y": 0.27,
        "group": "Even chromosomes"
      },
      {
        "x": 2717.5,
        "y": 0.29,
        "group": "Even chromosomes"
      },
      {
        "x": 2756.7,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 2720.3,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 2721.6,
        "y": 0.21,
        "group": "Even chromosomes"
      },
      {
        "x": 2743.4,
        "y": 0.26,
        "group": "Even chromosomes"
      },
      {
        "x": 2774.4,
        "y": 0.33,
        "group": "Even chromosomes"
      },
      {
        "x": 2744.9,
        "y": 0.26,
        "group": "Even chromosomes"
      },
      {
        "x": 2770.2,
        "y": 0.22,
        "group": "Even chromosomes"
      },
      {
        "x": 2744.5,
        "y": 8.26,
        "group": "Even chromosomes"
      },
      {
        "x": 2748.6,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2732.2,
        "y": 0.54,
        "group": "Even chromosomes"
      },
      {
        "x": 2764.1,
        "y": 0.02,
        "group": "Even chromosomes"
      },
      {
        "x": 2759.6,
        "y": 0.25,
        "group": "Even chromosomes"
      },
      {
        "x": 2752.8,
        "y": 1.62,
        "group": "Even chromosomes"
      },
      {
        "x": 2744.5,
        "y": 0.33,
        "group": "Even chromosomes"
      },
      {
        "x": 2729.3,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 2739.8,
        "y": 0.85,
        "group": "Even chromosomes"
      },
      {
        "x": 2721.5,
        "y": 0.36,
        "group": "Even chromosomes"
      },
      {
        "x": 2766.4,
        "y": 0.3,
        "group": "Even chromosomes"
      },
      {
        "x": 2753.6,
        "y": 0.15,
        "group": "Even chromosomes"
      },
      {
        "x": 2728.4,
        "y": 0.81,
        "group": "Even chromosomes"
      },
      {
        "x": 2718.9,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2727,
        "y": 0.47,
        "group": "Even chromosomes"
      },
      {
        "x": 2729.9,
        "y": 0.08,
        "group": "Even chromosomes"
      },
      {
        "x": 2723.5,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2716.8,
        "y": 1.57,
        "group": "Even chromosomes"
      },
      {
        "x": 2735.9,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2728.9,
        "y": 0.42,
        "group": "Even chromosomes"
      },
      {
        "x": 2721.2,
        "y": 0.34,
        "group": "Even chromosomes"
      },
      {
        "x": 2762.6,
        "y": 0.61,
        "group": "Even chromosomes"
      },
      {
        "x": 2740.2,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 2750.8,
        "y": 0.48,
        "group": "Even chromosomes"
      },
      {
        "x": 2743.4,
        "y": 0.3,
        "group": "Even chromosomes"
      },
      {
        "x": 2792.7,
        "y": 1.55,
        "group": "Odd chromosomes"
      },
      {
        "x": 2783.2,
        "y": 0.46,
        "group": "Odd chromosomes"
      },
      {
        "x": 2825.2,
        "y": 0.44,
        "group": "Odd chromosomes"
      },
      {
        "x": 2821.9,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2816.2,
        "y": 0.7,
        "group": "Odd chromosomes"
      },
      {
        "x": 2779.5,
        "y": 0.24,
        "group": "Odd chromosomes"
      },
      {
        "x": 2816.5,
        "y": 8.36,
        "group": "Odd chromosomes"
      },
      {
        "x": 2807.4,
        "y": 0.24,
        "group": "Odd chromosomes"
      },
      {
        "x": 2802.2,
        "y": 1.73,
        "group": "Odd chromosomes"
      },
      {
        "x": 2795.6,
        "y": 0.06,
        "group": "Odd chromosomes"
      },
      {
        "x": 2826.7,
        "y": 0.49,
        "group": "Odd chromosomes"
      },
      {
        "x": 2819.9,
        "y": 0.44,
        "group": "Odd chromosomes"
      },
      {
        "x": 2806.7,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2782,
        "y": 0.13,
        "group": "Odd chromosomes"
      },
      {
        "x": 2781.9,
        "y": 0.29,
        "group": "Odd chromosomes"
      },
      {
        "x": 2795.7,
        "y": 0.5,
        "group": "Odd chromosomes"
      },
      {
        "x": 2788.2,
        "y": 0.44,
        "group": "Odd chromosomes"
      },
      {
        "x": 2818.4,
        "y": 0.4,
        "group": "Odd chromosomes"
      },
      {
        "x": 2816.4,
        "y": 0.47,
        "group": "Odd chromosomes"
      },
      {
        "x": 2786.1,
        "y": 0.28,
        "group": "Odd chromosomes"
      },
      {
        "x": 2816.4,
        "y": 6.67,
        "group": "Odd chromosomes"
      },
      {
        "x": 2802.9,
        "y": 0.33,
        "group": "Odd chromosomes"
      },
      {
        "x": 2791.2,
        "y": 0.08,
        "group": "Odd chromosomes"
      },
      {
        "x": 2789.6,
        "y": 1.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 2788.1,
        "y": 0.04,
        "group": "Odd chromosomes"
      },
      {
        "x": 2802.1,
        "y": 0.61,
        "group": "Odd chromosomes"
      },
      {
        "x": 2801.4,
        "y": 0.22,
        "group": "Odd chromosomes"
      },
      {
        "x": 2821.9,
        "y": 0.15,
        "group": "Odd chromosomes"
      },
      {
        "x": 2825.2,
        "y": 0.15,
        "group": "Odd chromosomes"
      },
      {
        "x": 2817.7,
        "y": 0.5,
        "group": "Odd chromosomes"
      },
      {
        "x": 2800.7,
        "y": 0.8,
        "group": "Odd chromosomes"
      },
      {
        "x": 2800.5,
        "y": 0.4,
        "group": "Odd chromosomes"
      },
      {
        "x": 2799.8,
        "y": 0.32,
        "group": "Odd chromosomes"
      },
      {
        "x": 2815.9,
        "y": 0.34,
        "group": "Odd chromosomes"
      },
      {
        "x": 2799.5,
        "y": 0.07,
        "group": "Odd chromosomes"
      },
      {
        "x": 2793.1,
        "y": 0,
        "group": "Odd chromosomes"
      },
      {
        "x": 2779.6,
        "y": 1.78,
        "group": "Odd chromosomes"
      },
      {
        "x": 2793,
        "y": 0.17,
        "group": "Odd chromosomes"
      },
      {
        "x": 2809.5,
        "y": 0.4,
        "group": "Odd chromosomes"
      },
      {
        "x": 2820,
        "y": 0.27,
        "group": "Odd chromosomes"
      },
      {
        "x": 2855.5,
        "y": 0.09,
        "group": "Even chromosomes"
      },
      {
        "x": 2867.3,
        "y": 0.13,
        "group": "Even chromosomes"
      },
      {
        "x": 2872.6,
        "y": 0.14,
        "group": "Even chromosomes"
      },
      {
        "x": 2850.6,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 2868.2,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 2874.6,
        "y": 0.29,
        "group": "Even chromosomes"
      },
      {
        "x": 2862.3,
        "y": 0.23,
        "group": "Even chromosomes"
      },
      {
        "x": 2830.6,
        "y": 0.17,
        "group": "Even chromosomes"
      },
      {
        "x": 2828.1,
        "y": 0.07,
        "group": "Even chromosomes"
      },
      {
        "x": 2861.9,
        "y": 0.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2858.2,
        "y": 0.19,
        "group": "Even chromosomes"
      },
      {
        "x": 2831.8,
        "y": 0.16,
        "group": "Even chromosomes"
      },
      {
        "x": 2861.8,
        "y": 0.36,
        "group": "Even chromosomes"
      },
      {
        "x": 2837,
        "y": 0.03,
        "group": "Even chromosomes"
      },
      {
        "x": 2841.8,
        "y": 0.29,
        "group": "Even chromosomes"
      },
      {
        "x": 2827.2,
        "y": 0.7,
        "group": "Even chromosomes"
      },
      {
        "x": 2832.3,
        "y": 0.76,
        "group": "Even chromosomes"
      },
      {
        "x": 2842,
        "y": 0.1,
        "group": "Even chromosomes"
      },
      {
        "x": 2871.2,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 2857.6,
        "y": 0.18,
        "group": "Even chromosomes"
      },
      {
        "x": 2875.7,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2833.5,
        "y": 0,
        "group": "Even chromosomes"
      },
      {
        "x": 2839.4,
        "y": 0.01,
        "group": "Even chromosomes"
      },
      {
        "x": 2839.3,
        "y": 0.17,
        "group": "Even chromosomes"
      },
      {
        "x": 2843.5,
        "y": 0.6,
        "group": "Even chromosomes"
      },
      {
        "x": 2838.7,
        "y": 0.36,
        "group": "Even chromosomes"
      },
      {
        "x": 2861.1,
        "y": 0.62,
        "group": "Even chromosomes"
      },
      {
        "x": 2837.5,
        "y": 1.11,
        "group": "Even chromosomes"
      },
      {
        "x": 2863.3,
        "y": 2.49,
        "group": "Even chromosomes"
      },
      {
        "x": 2828.6,
        "y": 0.2,
        "group": "Even chromosomes"
      },
      {
        "x": 2837.9,
        "y": 0.05,
        "group": "Even chromosomes"
      },
      {
        "x": 2829.8,
        "y": 0.17,
        "group": "Even chromosomes"
      },
      {
        "x": 2866.5,
        "y": 0.32,
        "group": "Even chromosomes"
      },
      {
        "x": 2844.1,
        "y": 0.08,
        "group": "Even chromosomes"
      },
      {
        "x": 2856.4,
        "y": 0.04,
        "group": "Even chromosomes"
      },
      {
        "x": 2873.7,
        "y": 1.46,
        "group": "Even chromosomes"
      },
      {
        "x": 2845.9,
        "y": 0.32,
        "group": "Even chromosomes"
      },
      {
        "x": 2828.6,
        "y": 0.26,
        "group": "Even chromosomes"
      },
      {
        "x": 2864.1,
        "y": 0.55,
        "group": "Even chromosomes"
      },
      {
        "x": 2846.1,
        "y": 0.38,
        "group": "Even chromosomes"
      },
      {
        "x": 1180,
        "y": 8.52,
        "group": "Even chromosomes"
      },
      {
        "x": 1180.8,
        "y": 7.76,
        "group": "Even chromosomes"
      },
      {
        "x": 1181.6,
        "y": 7.6,
        "group": "Even chromosomes"
      },
      {
        "x": 1182.4,
        "y": 8.76,
        "group": "Even chromosomes"
      },
      {
        "x": 1183.2,
        "y": 8.78,
        "group": "Even chromosomes"
      },
      {
        "x": 2250,
        "y": 9.05,
        "group": "Odd chromosomes"
      },
      {
        "x": 2250.8,
        "y": 8.43,
        "group": "Odd chromosomes"
      },
      {
        "x": 2251.6,
        "y": 7.67,
        "group": "Odd chromosomes"
      },
      {
        "x": 2252.4,
        "y": 8.54,
        "group": "Odd chromosomes"
      },
      {
        "x": 2253.2,
        "y": 8.09,
        "group": "Odd chromosomes"
      },
      {
        "x": 2860,
        "y": 9.31,
        "group": "Even chromosomes"
      },
      {
        "x": 2860.8,
        "y": 7.93,
        "group": "Even chromosomes"
      },
      {
        "x": 2861.6,
        "y": 9.12,
        "group": "Even chromosomes"
      },
      {
        "x": 2862.4,
        "y": 8.79,
        "group": "Even chromosomes"
      },
      {
        "x": 2863.2,
        "y": 8.09,
        "group": "Even chromosomes"
      }
    ],
    "lines": [
      {
        "axis": "y",
        "value": 7.3,
        "label": "p = 5e-8"
      }
    ],
    "xTicks": [
      {
        "at": 124.5,
        "label": "1"
      },
      {
        "at": 370.5,
        "label": "2"
      },
      {
        "at": 591,
        "label": "3"
      },
      {
        "at": 785.5,
        "label": "4"
      },
      {
        "at": 971.5,
        "label": "5"
      },
      {
        "at": 1147.5,
        "label": "6"
      },
      {
        "at": 1312.5,
        "label": "7"
      },
      {
        "at": 1465,
        "label": "8"
      },
      {
        "at": 1608.5,
        "label": "9"
      },
      {
        "at": 1747,
        "label": "10"
      },
      {
        "at": 1882.5,
        "label": "11"
      },
      {
        "at": 2017,
        "label": "12"
      },
      {
        "at": 2141.5,
        "label": "13"
      },
      {
        "at": 2252.5,
        "label": "14"
      },
      {
        "at": 2357,
        "label": "15"
      },
      {
        "at": 2453,
        "label": "16"
      },
      {
        "at": 2538.5,
        "label": "17"
      },
      {
        "at": 2618,
        "label": "18"
      },
      {
        "at": 2686.5,
        "label": "19"
      },
      {
        "at": 2747.5,
        "label": "20"
      },
      {
        "at": 2803,
        "label": "21"
      },
      {
        "at": 2852.5,
        "label": "22"
      }
    ],
    "xRange": [
      0,
      2878
    ],
    "yRange": [
      0,
      10
    ],
    "xTitle": "Chromosome",
    "yTitle": "−log10 p"
  },
  "mobile": {
    "width": 400,
    "height": 420
  }
}
Genome-wide association
Genome-wide associationScatter plot of 895 points: x from 6.7 to 2875.7, y from 0 to 9.31. Groups (points): Odd chromosomes 445, Even chromosomes 450. Lines: p = 5e-8: y = 7.3, 18 points above it.Odd chromosomesEven chromosomes0246810123456789101112131415161718192022Chromosome−log10 pp = 5e-8
Genome-wide associationScatter plot of 895 points: x from 6.7 to 2875.7, y from 0 to 9.31. Groups (points): Odd chromosomes 445, Even chromosomes 450. Lines: p = 5e-8: y = 7.3, 18 points above it.Odd chromosomesEven chromosomes024681012345678910111214161821Chromosome−log10 pp = 5e-8

Source: Illustrative data, positions in megabases

Show chart data
Data for Genome-wide association — 20 of 895 points, the named or the highest
PointGroupChromosome−log10 p
891Even chromosomes28609.31
893Even chromosomes2861.69.12
886Odd chromosomes22509.05
574Odd chromosomes2378.58.81
894Even chromosomes2862.48.79
885Even chromosomes1183.28.78
884Even chromosomes1182.48.76
889Odd chromosomes2252.48.54
881Even chromosomes11808.52
887Odd chromosomes2250.88.43
807Odd chromosomes2816.58.36
776Even chromosomes2744.58.26
890Odd chromosomes2253.28.09
895Even chromosomes2863.28.09
892Even chromosomes2860.87.93
882Even chromosomes1180.87.76
888Odd chromosomes2251.67.67
883Even chromosomes1181.67.6
382Even chromosomes1794.46.83
821Odd chromosomes2816.46.67
  • Manhattan plot
  • Find the hits along a genome

Metabolic rate by body mass

examples/allometry.jsonDetail: Metabolic rate by body mass →
{
  "schemaVersion": 1,
  "type": "scatter",
  "title": "Metabolic rate by body mass",
  "source": "Illustrative data",
  "width": 760,
  "height": 480,
  "scatter": {
    "points": [
      {
        "x": 5.2,
        "y": 0.9,
        "group": "Small"
      },
      {
        "x": 64.8,
        "y": 7.9,
        "group": "Small"
      },
      {
        "x": 75.4,
        "y": 9.9,
        "group": "Small"
      },
      {
        "x": 325.4,
        "y": 31.2,
        "group": "Small"
      },
      {
        "x": 6,
        "y": 1.4,
        "group": "Small"
      },
      {
        "x": 25.8,
        "y": 9.2,
        "group": "Small"
      },
      {
        "x": 323.1,
        "y": 21.4,
        "group": "Small"
      },
      {
        "x": 2.8,
        "y": 0.7,
        "group": "Small"
      },
      {
        "x": 80.3,
        "y": 12.3,
        "group": "Small"
      },
      {
        "x": 167.4,
        "y": 14.4,
        "group": "Small"
      },
      {
        "x": 103.3,
        "y": 18.1,
        "group": "Small"
      },
      {
        "x": 59.3,
        "y": 9.3,
        "group": "Small"
      },
      {
        "x": 8,
        "y": 2.6,
        "group": "Small"
      },
      {
        "x": 26.2,
        "y": 4.5,
        "group": "Small"
      },
      {
        "x": 143.4,
        "y": 21.2,
        "group": "Small"
      },
      {
        "x": 579.8,
        "y": 37.1,
        "group": "Small"
      },
      {
        "x": 15.3,
        "y": 2.9,
        "group": "Small"
      },
      {
        "x": 640.9,
        "y": 40.8,
        "group": "Small"
      },
      {
        "x": 433.1,
        "y": 43.1,
        "group": "Small"
      },
      {
        "x": 4.5,
        "y": 1.1,
        "group": "Small"
      },
      {
        "x": 787.8,
        "y": 45.1,
        "group": "Small"
      },
      {
        "x": 8,
        "y": 1.8,
        "group": "Small"
      },
      {
        "x": 33.2,
        "y": 4.2,
        "group": "Small"
      },
      {
        "x": 56.9,
        "y": 8.9,
        "group": "Small"
      },
      {
        "x": 56.6,
        "y": 10.3,
        "group": "Small"
      },
      {
        "x": 612.1,
        "y": 469.3,
        "group": "Large"
      },
      {
        "x": 370.9,
        "y": 486.2,
        "group": "Large"
      },
      {
        "x": 3.1,
        "y": 1.7,
        "group": "Large"
      },
      {
        "x": 381.9,
        "y": 587.1,
        "group": "Large"
      },
      {
        "x": 51,
        "y": 33.5,
        "group": "Large"
      },
      {
        "x": 138.5,
        "y": 127.1,
        "group": "Large"
      },
      {
        "x": 52.6,
        "y": 61.7,
        "group": "Large"
      },
      {
        "x": 7.2,
        "y": 6.8,
        "group": "Large"
      },
      {
        "x": 932,
        "y": 1116.9,
        "group": "Large"
      },
      {
        "x": 1.8,
        "y": 1.1,
        "group": "Large"
      },
      {
        "x": 2.8,
        "y": 1.2,
        "group": "Large"
      },
      {
        "x": 7.6,
        "y": 5,
        "group": "Large"
      },
      {
        "x": 1.4,
        "y": 0.4,
        "group": "Large"
      },
      {
        "x": 69.8,
        "y": 78.2,
        "group": "Large"
      },
      {
        "x": 9.8,
        "y": 6.9,
        "group": "Large"
      },
      {
        "x": 439.3,
        "y": 541.8,
        "group": "Large"
      },
      {
        "x": 989.8,
        "y": 951.5,
        "group": "Large"
      },
      {
        "x": 8.5,
        "y": 7.1,
        "group": "Large"
      },
      {
        "x": 1.2,
        "y": 0.7,
        "group": "Large"
      },
      {
        "x": 3.9,
        "y": 1.7,
        "group": "Large"
      },
      {
        "x": 2.9,
        "y": 2,
        "group": "Large"
      },
      {
        "x": 1.3,
        "y": 0.8,
        "group": "Large"
      },
      {
        "x": 751.6,
        "y": 620.8,
        "group": "Large"
      },
      {
        "x": 489.8,
        "y": 372.6,
        "group": "Large"
      },
      {
        "x": 36.3,
        "y": 31.5,
        "group": "Large"
      }
    ],
    "regression": true,
    "xScale": "log",
    "yScale": "log",
    "xTitle": "Body mass (g)",
    "yTitle": "Metabolic rate (W)"
  },
  "mobile": {
    "width": 400,
    "height": 480
  }
}
Metabolic rate by body mass
Metabolic rate by body massScatter plot of 50 points: x from 1.2 to 989.8, y from 0.4 to 1116.9. Groups (points): Small 25, Large 25. Line for Small through 25 points, fitted to the logarithms: ln y = −0.900 + 0.740 ln x, r² = 0.960. Line for Large through 25 points, fitted to the logarithms: ln y = −0.663 + 1.117 ln x, r² = 0.990.SmallLarge0.111010010001101001000Body mass (g)Metabolic rate (W)5.2, 0.964.8, 7.975.4, 9.9325.4, 31.26, 1.425.8, 9.2323.1, 21.42.8, 0.780.3, 12.3167.4, 14.4103.3, 18.159.3, 9.38, 2.626.2, 4.5143.4, 21.2579.8, 37.115.3, 2.9640.9, 40.8433.1, 43.14.5, 1.1787.8, 45.18, 1.833.2, 4.256.9, 8.956.6, 10.3612.1, 469.3370.9, 486.23.1, 1.7381.9, 587.151, 33.5138.5, 127.152.6, 61.77.2, 6.8932, 1116.91.8, 1.12.8, 1.27.6, 51.4, 0.469.8, 78.29.8, 6.9439.3, 541.8989.8, 951.58.5, 7.11.2, 0.73.9, 1.72.9, 21.3, 0.8751.6, 620.8489.8, 372.636.3, 31.5
Metabolic rate by body massScatter plot of 50 points: x from 1.2 to 989.8, y from 0.4 to 1116.9. Groups (points): Small 25, Large 25. Line for Small through 25 points, fitted to the logarithms: ln y = −0.900 + 0.740 ln x, r² = 0.960. Line for Large through 25 points, fitted to the logarithms: ln y = −0.663 + 1.117 ln x, r² = 0.990.SmallLarge0.111010010001101001000Body mass (g)Metabolic rate (W)5.2, 0.964.8, 7.975.4, 9.9325.4, 31.26, 1.425.8, 9.2323.1, 21.42.8, 0.780.3, 12.3167.4, 14.4103.3, 18.159.3, 9.38, 2.626.2, 4.5143.4, 21.2579.8, 37.115.3, 2.9640.9, 40.8433.1, 43.14.5, 1.1787.8, 45.18, 1.833.2, 4.256.9, 8.956.6, 10.3612.1, 469.3370.9, 486.23.1, 1.7381.9, 587.151, 33.5138.5, 127.152.6, 61.77.2, 6.8932, 1116.91.8, 1.12.8, 1.27.6, 51.4, 0.469.8, 78.29.8, 6.9439.3, 541.8989.8, 951.58.5, 7.11.2, 0.73.9, 1.72.9, 21.3, 0.8751.6, 620.8489.8, 372.636.3, 31.5

Source: Illustrative data

Show chart data
Data for Metabolic rate by body mass
PointGroupBody mass (g)Metabolic rate (W)
1Small5.20.9
2Small64.87.9
3Small75.49.9
4Small325.431.2
5Small61.4
6Small25.89.2
7Small323.121.4
8Small2.80.7
9Small80.312.3
10Small167.414.4
11Small103.318.1
12Small59.39.3
13Small82.6
14Small26.24.5
15Small143.421.2
16Small579.837.1
17Small15.32.9
18Small640.940.8
19Small433.143.1
20Small4.51.1
21Small787.845.1
22Small81.8
23Small33.24.2
24Small56.98.9
25Small56.610.3
26Large612.1469.3
27Large370.9486.2
28Large3.11.7
29Large381.9587.1
30Large5133.5
31Large138.5127.1
32Large52.661.7
33Large7.26.8
34Large9321116.9
35Large1.81.1
36Large2.81.2
37Large7.65
38Large1.40.4
39Large69.878.2
40Large9.86.9
41Large439.3541.8
42Large989.8951.5
43Large8.57.1
44Large1.20.7
45Large3.91.7
46Large2.92
47Large1.30.8
48Large751.6620.8
49Large489.8372.6
50Large36.331.5
  • Scatter plot (regression, log axes)
  • Fit a power law

Feature priorities: impact against effort

examples/feature-priorities.jsonDetail: Feature priorities: impact against effort →
{
  "schemaVersion": 1,
  "type": "scatter",
  "title": "Feature priorities: impact against effort",
  "source": "Team estimates on a scale of 1 to 10, illustrative",
  "width": 800,
  "height": 520,
  "scatter": {
    "points": [
      {
        "x": 7.5,
        "y": 8.2,
        "label": "Analytics dashboard"
      },
      {
        "x": 2.5,
        "y": 8.9,
        "label": "Single sign-on"
      },
      {
        "x": 3.5,
        "y": 7,
        "label": "Saved filters"
      },
      {
        "x": 1.5,
        "y": 6.2,
        "label": "Bulk export"
      },
      {
        "x": 8.6,
        "y": 6.4,
        "label": "Offline mode"
      },
      {
        "x": 6.2,
        "y": 3.2,
        "label": "Dark mode"
      },
      {
        "x": 8.2,
        "y": 1.8,
        "label": "Legacy import"
      },
      {
        "x": 1.8,
        "y": 2.4,
        "label": "New icons"
      },
      {
        "x": 3.8,
        "y": 4,
        "label": "Keyboard shortcuts"
      },
      {
        "x": 5.8,
        "y": 9.1,
        "label": "Usage-based billing"
      }
    ],
    "quadrants": {
      "x": 5,
      "y": 5,
      "labels": {
        "topLeft": "Quick wins",
        "topRight": "Major projects",
        "bottomLeft": "Fill-ins",
        "bottomRight": "Thankless tasks"
      }
    },
    "xRange": [
      0,
      10
    ],
    "yRange": [
      0,
      10
    ],
    "xTitle": "Effort",
    "yTitle": "Impact"
  },
  "mobile": {
    "width": 400,
    "height": 480
  }
}
Feature priorities: impact against effort
Feature priorities: impact against effortScatter plot of 10 points: x from 1.5 to 8.6, y from 1.8 to 9.1. Quadrants divided at x = 5 and y = 5. Top left, Quick wins: 3 points (Single sign-on, Saved filters, Bulk export). Top right, Major projects: 3 points (Analytics dashboard, Offline mode, Usage-based billing). Bottom left, Fill-ins: 2 points (New icons, Keyboard shortcuts). Bottom right, Thankless tasks: 2 points (Dark mode, Legacy import).02468100246810EffortImpactQuick winsMajor projectsFill-insThankless tasksAnalytics dashboard: 7.5, 8.2Single sign-on: 2.5, 8.9Saved filters: 3.5, 7Bulk export: 1.5, 6.2Offline mode: 8.6, 6.4Dark mode: 6.2, 3.2Legacy import: 8.2, 1.8New icons: 1.8, 2.4Keyboard shortcuts: 3.8, 4Usage-based billing: 5.8, 9.1Analytics dashboardSingle sign-onSaved filtersBulk exportOffline modeDark modeLegacy importNew iconsKeyboard shortcutsUsage-based billing
Feature priorities: impact against effortScatter plot of 10 points: x from 1.5 to 8.6, y from 1.8 to 9.1. Quadrants divided at x = 5 and y = 5. Top left, Quick wins: 3 points (Single sign-on, Saved filters, Bulk export). Top right, Major projects: 3 points (Analytics dashboard, Offline mode, Usage-based billing). Bottom left, Fill-ins: 2 points (New icons, Keyboard shortcuts). Bottom right, Thankless tasks: 2 points (Dark mode, Legacy import).02468100246810EffortImpactQuick winsMajor projectsFill-insThankless tasksAnalytics dashboard: 7.5, 8.2Single sign-on: 2.5, 8.9Saved filters: 3.5, 7Bulk export: 1.5, 6.2Offline mode: 8.6, 6.4Dark mode: 6.2, 3.2Legacy import: 8.2, 1.8New icons: 1.8, 2.4Keyboard shortcuts: 3.8, 4Usage-based billing: 5.8, 9.1Analytics dashboardSingle sign-onSaved filtersBulk exportOffline modeDark modeLegacy importNew iconsKeyboard shortcutsUsage-based billing

Source: Team estimates on a scale of 1 to 10, illustrative

Show chart data
Data for Feature priorities: impact against effort
PointEffortImpactQuadrant
Analytics dashboard7.58.2Major projects
Single sign-on2.58.9Quick wins
Saved filters3.57Quick wins
Bulk export1.56.2Quick wins
Offline mode8.66.4Major projects
Dark mode6.23.2Thankless tasks
Legacy import8.21.8Thankless tasks
New icons1.82.4Fill-ins
Keyboard shortcuts3.84Fill-ins
Usage-based billing5.89.1Major projects
  • Scatter plot (quadrants)
  • Sort features by impact and effort

Overall survival by treatment

examples/overall-survival.jsonDetail: Overall survival by treatment →
{
  "schemaVersion": 1,
  "type": "survival",
  "title": "Overall survival by treatment",
  "source": "Illustrative trial data, 40 patients per arm",
  "width": 760,
  "height": 520,
  "survival": {
    "groups": [
      {
        "label": "Standard",
        "observations": [
          {
            "time": 8.4
          },
          {
            "time": 14,
            "event": false
          },
          {
            "time": 9.9
          },
          {
            "time": 2.9
          },
          {
            "time": 13.9
          },
          {
            "time": 1.4
          },
          {
            "time": 1.3
          },
          {
            "time": 1.3,
            "event": false
          },
          {
            "time": 28.9,
            "event": false
          },
          {
            "time": 14.9
          },
          {
            "time": 0.5,
            "event": false
          },
          {
            "time": 1.8,
            "event": false
          },
          {
            "time": 3
          },
          {
            "time": 0.4
          },
          {
            "time": 8.1
          },
          {
            "time": 10.3
          },
          {
            "time": 9.7
          },
          {
            "time": 8.3,
            "event": false
          },
          {
            "time": 29.9,
            "event": false
          },
          {
            "time": 21.2,
            "event": false
          },
          {
            "time": 5.3
          },
          {
            "time": 2.1,
            "event": false
          },
          {
            "time": 12,
            "event": false
          },
          {
            "time": 11.6,
            "event": false
          },
          {
            "time": 25.4,
            "event": false
          },
          {
            "time": 0
          },
          {
            "time": 14.1,
            "event": false
          },
          {
            "time": 11.9,
            "event": false
          },
          {
            "time": 1.1
          },
          {
            "time": 8.1,
            "event": false
          },
          {
            "time": 1.3
          },
          {
            "time": 22.7,
            "event": false
          },
          {
            "time": 1.8
          },
          {
            "time": 1.5
          },
          {
            "time": 5.3,
            "event": false
          },
          {
            "time": 11.5
          },
          {
            "time": 3
          },
          {
            "time": 2
          },
          {
            "time": 1.7
          },
          {
            "time": 3.4
          }
        ]
      },
      {
        "label": "New drug",
        "observations": [
          {
            "time": 24.1,
            "event": false
          },
          {
            "time": 9.4
          },
          {
            "time": 6.2
          },
          {
            "time": 19.3,
            "event": false
          },
          {
            "time": 2.7
          },
          {
            "time": 6.2
          },
          {
            "time": 9.9,
            "event": false
          },
          {
            "time": 2.2,
            "event": false
          },
          {
            "time": 2.5
          },
          {
            "time": 7.2
          },
          {
            "time": 12.1
          },
          {
            "time": 14.5,
            "event": false
          },
          {
            "time": 22.2
          },
          {
            "time": 4.6,
            "event": false
          },
          {
            "time": 24.5,
            "event": false
          },
          {
            "time": 5.7,
            "event": false
          },
          {
            "time": 28.2,
            "event": false
          },
          {
            "time": 5.7
          },
          {
            "time": 18.1,
            "event": false
          },
          {
            "time": 3.1,
            "event": false
          },
          {
            "time": 1
          },
          {
            "time": 7.1
          },
          {
            "time": 7.7
          },
          {
            "time": 8.8,
            "event": false
          },
          {
            "time": 5
          },
          {
            "time": 1.9
          },
          {
            "time": 21.3
          },
          {
            "time": 8.4,
            "event": false
          },
          {
            "time": 6.1,
            "event": false
          },
          {
            "time": 0.4
          },
          {
            "time": 1.8,
            "event": false
          },
          {
            "time": 5
          },
          {
            "time": 3.9,
            "event": false
          },
          {
            "time": 11.7
          },
          {
            "time": 19.7,
            "event": false
          },
          {
            "time": 17.5,
            "event": false
          },
          {
            "time": 1.1,
            "event": false
          },
          {
            "time": 0.5
          },
          {
            "time": 28.9,
            "event": false
          },
          {
            "time": 0.6
          }
        ]
      }
    ],
    "confidence": true,
    "timeTitle": "Months since randomization",
    "logRank": true
  },
  "mobile": {
    "width": 380,
    "height": 560
  }
}
Overall survival by treatment
Overall survival by treatmentKaplan-Meier curves of 2 groups, with 95% confidence bands. Standard: 40 observations, 23 events, median 9.9, 29.7% at the end. New drug: 40 observations, 20 events, median 11.7, 29.6% at the end. Log-rank test: χ² = 0.59, 1 degree of freedom, p = 0.444. Hazard ratio of New drug against Standard: 0.79 (95% confidence interval 0.43 to 1.44).StandardNew drug0%20%40%60%80%100%0102030Months since randomizationStandard: 40 observations, 23 events, median 9.9, 29.7% at the end.New drug: 40 observations, 20 events, median 11.7, 29.6% at the end.Log-rank p = 0.444Number at riskStandard401450New drug401360
Overall survival by treatmentKaplan-Meier curves of 2 groups, with 95% confidence bands. Standard: 40 observations, 23 events, median 9.9, 29.7% at the end. New drug: 40 observations, 20 events, median 11.7, 29.6% at the end. Log-rank test: χ² = 0.59, 1 degree of freedom, p = 0.444. Hazard ratio of New drug against Standard: 0.79 (95% confidence interval 0.43 to 1.44).StandardNew drug0%20%40%60%80%100%0102030Months since randomizationStandard: 40 observations, 23 events, median 9.9, 29.7% at the end.New drug: 40 observations, 20 events, median 11.7, 29.6% at the end.Log-rank p = 0.444Number at riskStandard401450New drug401360

Source: Illustrative trial data, 40 patients per arm

Show chart data
Data for Overall survival by treatment
GroupTimeSurvivallowerupperAt risk
Standard097.5%83.5%99.6%40
Standard1046.7%29.5%62.2%14
Standard2029.7%13.7%47.6%5
Standard3029.7%13.7%47.6%0
New drug0100.0%100.0%100.0%40
New drug1052.5%34.1%68.0%13
New drug2044.4%26.3%61.1%6
New drug3029.6%11.6%50.3%0
  • Kaplan-Meier curves
  • Compare survival between groups

Parts of a whole

From visit to order

examples/checkout-funnel.jsonDetail: From visit to order →
{
  "schemaVersion": 1,
  "type": "funnel",
  "title": "From visit to order",
  "source": "Illustrative shop data, one month",
  "width": 760,
  "height": 380,
  "funnel": {
    "stages": [
      {
        "label": "Visits",
        "value": 12400
      },
      {
        "label": "Product views",
        "value": 7300
      },
      {
        "label": "Added to cart",
        "value": 2100
      },
      {
        "label": "Checkout started",
        "value": 1250
      },
      {
        "label": "Orders",
        "value": 840
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 420
  }
}
From visit to order
From visit to orderFunnel of 5 stages, from Visits (12400) to Orders (840): 6.8% of the first stage remain. Stages, with the share of the stage before: Visits 12400; Product views 7300 (58.9%); Added to cart 2100 (28.8%); Checkout started 1250 (59.5%); Orders 840 (67.2%). The biggest drop is from Product views to Added to cart: 28.8% remain.Visits: 12400Visits12400Product views: 7300 (58.9% of the stage before)Product views7300Added to cart: 2100 (28.8% of the stage before)Added to cart2100Checkout started: 1250 (59.5% of the stage before)Checkout started1250Orders: 840 (67.2% of the stage before)Orders84058.9%28.8%59.5%67.2%Between the bars: the share kept from the stage before.
From visit to orderFunnel of 5 stages, from Visits (12400) to Orders (840): 6.8% of the first stage remain. Stages, with the share of the stage before: Visits 12400; Product views 7300 (58.9%); Added to cart 2100 (28.8%); Checkout started 1250 (59.5%); Orders 840 (67.2%). The biggest drop is from Product views to Added to cart: 28.8% remain.Visits: 12400Visits12400Product views: 7300 (58.9% of the stage before)Product views7300Added to cart: 2100 (28.8% of the stage before)Added to cart2100Checkout started: 1250 (59.5% of the stage before)Checkout started1250Orders: 840 (67.2% of the stage before)Orders84058.9%28.8%59.5%67.2%Between the bars: the share kept from the stage before.

Source: Illustrative shop data, one month

Show chart data
Data for From visit to order
StageValueShareRate
Visits12400100.0%
Product views730058.9%58.9%
Added to cart210016.9%28.8%
Checkout started125010.1%59.5%
Orders8406.8%67.2%
  • Funnel chart
  • Find where visitors drop out

Levels of support

examples/support-tiers.jsonDetail: Levels of support →
{
  "schemaVersion": 1,
  "type": "funnel",
  "title": "Levels of support",
  "source": "Illustrative support organization",
  "width": 760,
  "height": 360,
  "funnel": {
    "display": "pyramid",
    "stages": [
      {
        "label": "Escalation",
        "value": 20
      },
      {
        "label": "Specialists",
        "value": 140
      },
      {
        "label": "First line",
        "value": 900
      },
      {
        "label": "Self-service",
        "value": 6400
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 380
  }
}
Levels of support
Levels of supportPyramid of 4 levels, from the top: Escalation 20; Specialists 140; First line 900; Self-service 6400.Escalation: 20Escalation20Specialists: 140Specialists140First line: 900First line900Self-service: 6400Self-service6400
Levels of supportPyramid of 4 levels, from the top: Escalation 20; Specialists 140; First line 900; Self-service 6400.Escalation: 20Escalation20Specialists: 140Specialists140First line: 900First line900Self-service: 6400Self-service6400

Source: Illustrative support organization

Show chart data
Data for Levels of support
LevelPositionValue
Escalation120
Specialists2140
First line3900
Self-service46400
  • Pyramid chart
  • Rank levels of an organization

Revenue by region and product

examples/market-by-region.jsonDetail: Revenue by region and product →
{
  "schemaVersion": 1,
  "type": "mosaic",
  "title": "Revenue by region and product",
  "source": "Illustrative revenue in million euros",
  "width": 760,
  "height": 460,
  "mosaic": {
    "columns": [
      {
        "label": "Europe",
        "segments": [
          {
            "label": "Hardware",
            "value": 120
          },
          {
            "label": "Software",
            "value": 180
          },
          {
            "label": "Services",
            "value": 100
          }
        ]
      },
      {
        "label": "North America",
        "segments": [
          {
            "label": "Hardware",
            "value": 90
          },
          {
            "label": "Software",
            "value": 210
          },
          {
            "label": "Services",
            "value": 150
          }
        ]
      },
      {
        "label": "Asia",
        "segments": [
          {
            "label": "Hardware",
            "value": 140
          },
          {
            "label": "Software",
            "value": 60
          },
          {
            "label": "Services",
            "value": 40
          }
        ]
      },
      {
        "label": "Other",
        "segments": [
          {
            "label": "Hardware",
            "value": 60
          },
          {
            "label": "Software",
            "value": 50
          },
          {
            "label": "Services",
            "value": 40
          }
        ]
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 460
  }
}
Revenue by region and product
Revenue by region and productMosaic chart of 4 columns and 3 segments, 1240 in all. The width of a column is its share of the whole; its segments are shares of the column. Europe 32.3% (400): Hardware 30.0%, Software 45.0%, Services 25.0%; North America 36.3% (450): Hardware 20.0%, Software 46.7%, Services 33.3%; Asia 19.4% (240): Hardware 58.3%, Software 25.0%, Services 16.7%; Other 12.1% (150): Hardware 40.0%, Software 33.3%, Services 26.7%.HardwareSoftwareServicesEurope, Hardware: 120 (30.0% of the column, 9.7% of the whole)30.0%Europe, Software: 180 (45.0% of the column, 14.5% of the whole)45.0%Europe, Services: 100 (25.0% of the column, 8.1% of the whole)25.0%Europe400 (32.3%)North America, Hardware: 90 (20.0% of the column, 7.3% of the whole)20.0%North America, Software: 210 (46.7% of the column, 16.9% of the whole)46.7%North America, Services: 150 (33.3% of the column, 12.1% of the whole)33.3%North America450 (36.3%)Asia, Hardware: 140 (58.3% of the column, 11.3% of the whole)58.3%Asia, Software: 60 (25.0% of the column, 4.8% of the whole)25.0%Asia, Services: 40 (16.7% of the column, 3.2% of the whole)16.7%Asia240 (19.4%)Other, Hardware: 60 (40.0% of the column, 4.8% of the whole)40.0%Other, Software: 50 (33.3% of the column, 4.0% of the whole)33.3%Other, Services: 40 (26.7% of the column, 3.2% of the whole)26.7%Other150 (12.1%)
Revenue by region and productMosaic chart of 4 columns and 3 segments, 1240 in all. The width of a column is its share of the whole; its segments are shares of the column. Europe 32.3% (400): Hardware 30.0%, Software 45.0%, Services 25.0%; North America 36.3% (450): Hardware 20.0%, Software 46.7%, Services 33.3%; Asia 19.4% (240): Hardware 58.3%, Software 25.0%, Services 16.7%; Other 12.1% (150): Hardware 40.0%, Software 33.3%, Services 26.7%.HardwareSoftwareServicesEurope, Hardware: 120 (30.0% of the column, 9.7% of the whole)30.0%Europe, Software: 180 (45.0% of the column, 14.5% of the whole)45.0%Europe, Services: 100 (25.0% of the column, 8.1% of the whole)25.0%Europe400 (32.3%)North America, Hardware: 90 (20.0% of the column, 7.3% of the whole)20.0%North America, Software: 210 (46.7% of the column, 16.9% of the whole)46.7%North America, Services: 150 (33.3% of the column, 12.1% of the whole)33.3%North America450 (36.3%)Asia, Hardware: 140 (58.3% of the column, 11.3% of the whole)58.3%Asia, Software: 60 (25.0% of the column, 4.8% of the whole)25.0%Asia, Services: 40 (16.7% of the column, 3.2% of the whole)16.7%Asia240 (19.4%)Other, Hardware: 60 (40.0% of the column, 4.8% of the whole)Other, Software: 50 (33.3% of the column, 4.0% of the whole)Other, Services: 40 (26.7% of the column, 3.2% of the whole)Other12.1%

Source: Illustrative revenue in million euros

Show chart data
Data for Revenue by region and product
ColumnSegmentValueShare of columnShare of total
EuropeHardware12030.0%9.7%
EuropeSoftware18045.0%14.5%
EuropeServices10025.0%8.1%
EuropeTotal400100.0%32.3%
North AmericaHardware9020.0%7.3%
North AmericaSoftware21046.7%16.9%
North AmericaServices15033.3%12.1%
North AmericaTotal450100.0%36.3%
AsiaHardware14058.3%11.3%
AsiaSoftware6025.0%4.8%
AsiaServices4016.7%3.2%
AsiaTotal240100.0%19.4%
OtherHardware6040.0%4.8%
OtherSoftware5033.3%4.0%
OtherServices4026.7%3.2%
OtherTotal150100.0%12.1%
  • Mosaic chart
  • See two shares at once

Where the electricity came from

examples/energy-sources.jsonDetail: Where the electricity came from →
{
  "schemaVersion": 1,
  "type": "waffle",
  "title": "Where the electricity came from",
  "source": "Illustrative shares of one year",
  "width": 760,
  "height": 380,
  "waffle": {
    "parts": [
      {
        "label": "Wind",
        "value": 31
      },
      {
        "label": "Solar",
        "value": 12
      },
      {
        "label": "Gas",
        "value": 28
      },
      {
        "label": "Coal",
        "value": 17
      }
    ],
    "total": 100
  },
  "mobile": {
    "width": 380,
    "height": 520
  }
}
Where the electricity came from
Where the electricity came fromWaffle chart of 100 squares, each standing for 1. Parts, as value (share, squares): Wind 31 (31.0%, 31); Solar 12 (12.0%, 12); Gas 28 (28.0%, 28); Coal 17 (17.0%, 17); Rest 12 (12.0%, 12).Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Wind – 31 (31.0%)Solar – 12 (12.0%)Gas – 28 (28.0%)Coal – 17 (17.0%)Rest – 12 (12.0%)
Where the electricity came fromWaffle chart of 100 squares, each standing for 1. Parts, as value (share, squares): Wind 31 (31.0%, 31); Solar 12 (12.0%, 12); Gas 28 (28.0%, 28); Coal 17 (17.0%, 17); Rest 12 (12.0%, 12).Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Wind: 31 (31.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Solar: 12 (12.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Gas: 28 (28.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Coal: 17 (17.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Rest: 12 (12.0%)Wind – 31 (31.0%)Solar – 12 (12.0%)Gas – 28 (28.0%)Coal – 17 (17.0%)Rest – 12 (12.0%)

Source: Illustrative shares of one year

Show chart data
Data for Where the electricity came from
PartValueShareSquares
Wind3131.0%31
Solar1212.0%12
Gas2828.0%28
Coal1717.0%17
Rest1212.0%12
  • Waffle chart
  • Make a share countable

Seats after the election

examples/election-result.jsonDetail: Seats after the election →
{
  "schemaVersion": 1,
  "type": "parliament",
  "title": "Seats after the election",
  "source": "Illustrative result",
  "width": 760,
  "height": 520,
  "parliament": {
    "parties": [
      {
        "label": "Left alliance",
        "seats": 38
      },
      {
        "label": "Greens",
        "seats": 24
      },
      {
        "label": "Social democrats",
        "seats": 41
      },
      {
        "label": "Liberals",
        "seats": 18
      },
      {
        "label": "Conservatives",
        "seats": 52
      },
      {
        "label": "Populists",
        "seats": 27
      }
    ],
    "majority": true,
    "coalition": [
      "Greens",
      "Social democrats",
      "Liberals",
      "Left alliance"
    ]
  },
  "mobile": {
    "width": 380,
    "height": 620
  }
}
Seats after the election
Seats after the electionParliament with 200 seats and 6 parties: Left alliance 38 (19.0%), Greens 24 (12.0%), Social democrats 41 (20.5%), Liberals 18 (9.0%), Conservatives 52 (26.0%), Populists 27 (13.5%). A majority takes 101 seats. Coalition Greens + Social democrats + Liberals + Left alliance: 121 seats, a majority.Left alliance: seat 1 / 38Left alliance: seat 2 / 38Left alliance: seat 3 / 38Left alliance: seat 4 / 38Left alliance: seat 5 / 38Left alliance: seat 6 / 38Left alliance: seat 7 / 38Left alliance: seat 8 / 38Left alliance: seat 9 / 38Left alliance: seat 10 / 38Left alliance: seat 11 / 38Left alliance: seat 12 / 38Left alliance: seat 13 / 38Left alliance: seat 14 / 38Left alliance: seat 15 / 38Left alliance: seat 16 / 38Left alliance: seat 17 / 38Left alliance: seat 18 / 38Left alliance: seat 19 / 38Left alliance: seat 20 / 38Left alliance: seat 21 / 38Left alliance: seat 22 / 38Left alliance: seat 23 / 38Left alliance: seat 24 / 38Left alliance: seat 25 / 38Left alliance: seat 26 / 38Left alliance: seat 27 / 38Left alliance: seat 28 / 38Left alliance: seat 29 / 38Left alliance: seat 30 / 38Left alliance: seat 31 / 38Left alliance: seat 32 / 38Left alliance: seat 33 / 38Left alliance: seat 34 / 38Left alliance: seat 35 / 38Left alliance: seat 36 / 38Left alliance: seat 37 / 38Left alliance: seat 38 / 38Greens: seat 1 / 24Greens: seat 2 / 24Greens: seat 3 / 24Greens: seat 4 / 24Greens: seat 5 / 24Greens: seat 6 / 24Greens: seat 7 / 24Greens: seat 8 / 24Greens: seat 9 / 24Greens: seat 10 / 24Greens: seat 11 / 24Greens: seat 12 / 24Greens: seat 13 / 24Greens: seat 14 / 24Greens: seat 15 / 24Greens: seat 16 / 24Greens: seat 17 / 24Greens: seat 18 / 24Greens: seat 19 / 24Greens: seat 20 / 24Greens: seat 21 / 24Greens: seat 22 / 24Greens: seat 23 / 24Greens: seat 24 / 24Social democrats: seat 1 / 41Social democrats: seat 2 / 41Social democrats: seat 3 / 41Social democrats: seat 4 / 41Social democrats: seat 5 / 41Social democrats: seat 6 / 41Social democrats: seat 7 / 41Social democrats: seat 8 / 41Social democrats: seat 9 / 41Social democrats: seat 10 / 41Social democrats: seat 11 / 41Social democrats: seat 12 / 41Social democrats: seat 13 / 41Social democrats: seat 14 / 41Social democrats: seat 15 / 41Social democrats: seat 16 / 41Social democrats: seat 17 / 41Social democrats: seat 18 / 41Social democrats: seat 19 / 41Social democrats: seat 20 / 41Social democrats: seat 21 / 41Social democrats: seat 22 / 41Social democrats: seat 23 / 41Social democrats: seat 24 / 41Social democrats: seat 25 / 41Social democrats: seat 26 / 41Social democrats: seat 27 / 41Social democrats: seat 28 / 41Social democrats: seat 29 / 41Social democrats: seat 30 / 41Social democrats: seat 31 / 41Social democrats: seat 32 / 41Social democrats: seat 33 / 41Social democrats: seat 34 / 41Social democrats: seat 35 / 41Social democrats: seat 36 / 41Social democrats: seat 37 / 41Social democrats: seat 38 / 41Social democrats: seat 39 / 41Social democrats: seat 40 / 41Social democrats: seat 41 / 41Liberals: seat 1 / 18Liberals: seat 2 / 18Liberals: seat 3 / 18Liberals: seat 4 / 18Liberals: seat 5 / 18Liberals: seat 6 / 18Liberals: seat 7 / 18Liberals: seat 8 / 18Liberals: seat 9 / 18Liberals: seat 10 / 18Liberals: seat 11 / 18Liberals: seat 12 / 18Liberals: seat 13 / 18Liberals: seat 14 / 18Liberals: seat 15 / 18Liberals: seat 16 / 18Liberals: seat 17 / 18Liberals: seat 18 / 18Conservatives: seat 1 / 52Conservatives: seat 2 / 52Conservatives: seat 3 / 52Conservatives: seat 4 / 52Conservatives: seat 5 / 52Conservatives: seat 6 / 52Conservatives: seat 7 / 52Conservatives: seat 8 / 52Conservatives: seat 9 / 52Conservatives: seat 10 / 52Conservatives: seat 11 / 52Conservatives: seat 12 / 52Conservatives: seat 13 / 52Conservatives: seat 14 / 52Conservatives: seat 15 / 52Conservatives: seat 16 / 52Conservatives: seat 17 / 52Conservatives: seat 18 / 52Conservatives: seat 19 / 52Conservatives: seat 20 / 52Conservatives: seat 21 / 52Conservatives: seat 22 / 52Conservatives: seat 23 / 52Conservatives: seat 24 / 52Conservatives: seat 25 / 52Conservatives: seat 26 / 52Conservatives: seat 27 / 52Conservatives: seat 28 / 52Conservatives: seat 29 / 52Conservatives: seat 30 / 52Conservatives: seat 31 / 52Conservatives: seat 32 / 52Conservatives: seat 33 / 52Conservatives: seat 34 / 52Conservatives: seat 35 / 52Conservatives: seat 36 / 52Conservatives: seat 37 / 52Conservatives: seat 38 / 52Conservatives: seat 39 / 52Conservatives: seat 40 / 52Conservatives: seat 41 / 52Conservatives: seat 42 / 52Conservatives: seat 43 / 52Conservatives: seat 44 / 52Conservatives: seat 45 / 52Conservatives: seat 46 / 52Conservatives: seat 47 / 52Conservatives: seat 48 / 52Conservatives: seat 49 / 52Conservatives: seat 50 / 52Conservatives: seat 51 / 52Conservatives: seat 52 / 52Populists: seat 1 / 27Populists: seat 2 / 27Populists: seat 3 / 27Populists: seat 4 / 27Populists: seat 5 / 27Populists: seat 6 / 27Populists: seat 7 / 27Populists: seat 8 / 27Populists: seat 9 / 27Populists: seat 10 / 27Populists: seat 11 / 27Populists: seat 12 / 27Populists: seat 13 / 27Populists: seat 14 / 27Populists: seat 15 / 27Populists: seat 16 / 27Populists: seat 17 / 27Populists: seat 18 / 27Populists: seat 19 / 27Populists: seat 20 / 27Populists: seat 21 / 27Populists: seat 22 / 27Populists: seat 23 / 27Populists: seat 24 / 27Populists: seat 25 / 27Populists: seat 26 / 27Populists: seat 27 / 27200seats · majority 101Left alliance – 38 (19.0%)Greens – 24 (12.0%)Social democrats – 41 (20.5%)Liberals – 18 (9.0%)Conservatives – 52 (26.0%)Populists – 27 (13.5%)Coalition Greens + Social democrats + Liberals + Left alliance: 121 seats, a majority.
Seats after the electionParliament with 200 seats and 6 parties: Left alliance 38 (19.0%), Greens 24 (12.0%), Social democrats 41 (20.5%), Liberals 18 (9.0%), Conservatives 52 (26.0%), Populists 27 (13.5%). A majority takes 101 seats. Coalition Greens + Social democrats + Liberals + Left alliance: 121 seats, a majority.Left alliance: seat 1 / 38Left alliance: seat 2 / 38Left alliance: seat 3 / 38Left alliance: seat 4 / 38Left alliance: seat 5 / 38Left alliance: seat 6 / 38Left alliance: seat 7 / 38Left alliance: seat 8 / 38Left alliance: seat 9 / 38Left alliance: seat 10 / 38Left alliance: seat 11 / 38Left alliance: seat 12 / 38Left alliance: seat 13 / 38Left alliance: seat 14 / 38Left alliance: seat 15 / 38Left alliance: seat 16 / 38Left alliance: seat 17 / 38Left alliance: seat 18 / 38Left alliance: seat 19 / 38Left alliance: seat 20 / 38Left alliance: seat 21 / 38Left alliance: seat 22 / 38Left alliance: seat 23 / 38Left alliance: seat 24 / 38Left alliance: seat 25 / 38Left alliance: seat 26 / 38Left alliance: seat 27 / 38Left alliance: seat 28 / 38Left alliance: seat 29 / 38Left alliance: seat 30 / 38Left alliance: seat 31 / 38Left alliance: seat 32 / 38Left alliance: seat 33 / 38Left alliance: seat 34 / 38Left alliance: seat 35 / 38Left alliance: seat 36 / 38Left alliance: seat 37 / 38Left alliance: seat 38 / 38Greens: seat 1 / 24Greens: seat 2 / 24Greens: seat 3 / 24Greens: seat 4 / 24Greens: seat 5 / 24Greens: seat 6 / 24Greens: seat 7 / 24Greens: seat 8 / 24Greens: seat 9 / 24Greens: seat 10 / 24Greens: seat 11 / 24Greens: seat 12 / 24Greens: seat 13 / 24Greens: seat 14 / 24Greens: seat 15 / 24Greens: seat 16 / 24Greens: seat 17 / 24Greens: seat 18 / 24Greens: seat 19 / 24Greens: seat 20 / 24Greens: seat 21 / 24Greens: seat 22 / 24Greens: seat 23 / 24Greens: seat 24 / 24Social democrats: seat 1 / 41Social democrats: seat 2 / 41Social democrats: seat 3 / 41Social democrats: seat 4 / 41Social democrats: seat 5 / 41Social democrats: seat 6 / 41Social democrats: seat 7 / 41Social democrats: seat 8 / 41Social democrats: seat 9 / 41Social democrats: seat 10 / 41Social democrats: seat 11 / 41Social democrats: seat 12 / 41Social democrats: seat 13 / 41Social democrats: seat 14 / 41Social democrats: seat 15 / 41Social democrats: seat 16 / 41Social democrats: seat 17 / 41Social democrats: seat 18 / 41Social democrats: seat 19 / 41Social democrats: seat 20 / 41Social democrats: seat 21 / 41Social democrats: seat 22 / 41Social democrats: seat 23 / 41Social democrats: seat 24 / 41Social democrats: seat 25 / 41Social democrats: seat 26 / 41Social democrats: seat 27 / 41Social democrats: seat 28 / 41Social democrats: seat 29 / 41Social democrats: seat 30 / 41Social democrats: seat 31 / 41Social democrats: seat 32 / 41Social democrats: seat 33 / 41Social democrats: seat 34 / 41Social democrats: seat 35 / 41Social democrats: seat 36 / 41Social democrats: seat 37 / 41Social democrats: seat 38 / 41Social democrats: seat 39 / 41Social democrats: seat 40 / 41Social democrats: seat 41 / 41Liberals: seat 1 / 18Liberals: seat 2 / 18Liberals: seat 3 / 18Liberals: seat 4 / 18Liberals: seat 5 / 18Liberals: seat 6 / 18Liberals: seat 7 / 18Liberals: seat 8 / 18Liberals: seat 9 / 18Liberals: seat 10 / 18Liberals: seat 11 / 18Liberals: seat 12 / 18Liberals: seat 13 / 18Liberals: seat 14 / 18Liberals: seat 15 / 18Liberals: seat 16 / 18Liberals: seat 17 / 18Liberals: seat 18 / 18Conservatives: seat 1 / 52Conservatives: seat 2 / 52Conservatives: seat 3 / 52Conservatives: seat 4 / 52Conservatives: seat 5 / 52Conservatives: seat 6 / 52Conservatives: seat 7 / 52Conservatives: seat 8 / 52Conservatives: seat 9 / 52Conservatives: seat 10 / 52Conservatives: seat 11 / 52Conservatives: seat 12 / 52Conservatives: seat 13 / 52Conservatives: seat 14 / 52Conservatives: seat 15 / 52Conservatives: seat 16 / 52Conservatives: seat 17 / 52Conservatives: seat 18 / 52Conservatives: seat 19 / 52Conservatives: seat 20 / 52Conservatives: seat 21 / 52Conservatives: seat 22 / 52Conservatives: seat 23 / 52Conservatives: seat 24 / 52Conservatives: seat 25 / 52Conservatives: seat 26 / 52Conservatives: seat 27 / 52Conservatives: seat 28 / 52Conservatives: seat 29 / 52Conservatives: seat 30 / 52Conservatives: seat 31 / 52Conservatives: seat 32 / 52Conservatives: seat 33 / 52Conservatives: seat 34 / 52Conservatives: seat 35 / 52Conservatives: seat 36 / 52Conservatives: seat 37 / 52Conservatives: seat 38 / 52Conservatives: seat 39 / 52Conservatives: seat 40 / 52Conservatives: seat 41 / 52Conservatives: seat 42 / 52Conservatives: seat 43 / 52Conservatives: seat 44 / 52Conservatives: seat 45 / 52Conservatives: seat 46 / 52Conservatives: seat 47 / 52Conservatives: seat 48 / 52Conservatives: seat 49 / 52Conservatives: seat 50 / 52Conservatives: seat 51 / 52Conservatives: seat 52 / 52Populists: seat 1 / 27Populists: seat 2 / 27Populists: seat 3 / 27Populists: seat 4 / 27Populists: seat 5 / 27Populists: seat 6 / 27Populists: seat 7 / 27Populists: seat 8 / 27Populists: seat 9 / 27Populists: seat 10 / 27Populists: seat 11 / 27Populists: seat 12 / 27Populists: seat 13 / 27Populists: seat 14 / 27Populists: seat 15 / 27Populists: seat 16 / 27Populists: seat 17 / 27Populists: seat 18 / 27Populists: seat 19 / 27Populists: seat 20 / 27Populists: seat 21 / 27Populists: seat 22 / 27Populists: seat 23 / 27Populists: seat 24 / 27Populists: seat 25 / 27Populists: seat 26 / 27Populists: seat 27 / 27200seats · majority 101Left alliance – 38 (19.0%)Greens – 24 (12.0%)Social democrats – 41 (20.5%)Liberals – 18 (9.0%)Conservatives – 52 (26.0%)Populists – 27 (13.5%)Coalition Greens + Social democrats + Liberals + Lef…

Source: Illustrative result

Show chart data
Data for Seats after the election
PartySeatsShareCoalition
Left alliance3819.0%yes
Greens2412.0%yes
Social democrats4120.5%yes
Liberals189.0%yes
Conservatives5226.0%
Populists2713.5%
  • Parliament chart
  • Show who holds the seats

Where the budget goes

examples/budget-by-department.jsonDetail: Where the budget goes →
{
  "schemaVersion": 1,
  "type": "treemap",
  "title": "Where the budget goes",
  "source": "Illustrative budget in millions",
  "width": 760,
  "height": 460,
  "treemap": {
    "items": [
      {
        "label": "Schools",
        "value": 310,
        "group": "Society"
      },
      {
        "label": "Universities",
        "value": 140,
        "group": "Society"
      },
      {
        "label": "Hospitals",
        "value": 280,
        "group": "Society"
      },
      {
        "label": "Pensions",
        "value": 220,
        "group": "Society"
      },
      {
        "label": "Roads",
        "value": 120,
        "group": "Infrastructure"
      },
      {
        "label": "Rail",
        "value": 95,
        "group": "Infrastructure"
      },
      {
        "label": "Net",
        "value": 55,
        "group": "Infrastructure"
      },
      {
        "label": "Police",
        "value": 85,
        "group": "Security"
      },
      {
        "label": "Defence",
        "value": 150,
        "group": "Security"
      },
      {
        "label": "Fire",
        "value": 50,
        "group": "Security"
      },
      {
        "label": "Parks",
        "value": 45,
        "group": "Environment"
      },
      {
        "label": "Water",
        "value": 75,
        "group": "Environment"
      },
      {
        "label": "Waste",
        "value": 60,
        "group": "Environment"
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 560
  }
}
Where the budget goes
Where the budget goesTreemap of 13 items, together 1685; the rectangle of each has the area of its value. Largest: Schools (18.4%), Hospitals (16.6%), Pensions (13.1%). Groups: Society 56.4%, Infrastructure 16.0%, Security 16.9%, Environment 10.7%.SocietyInfrastructureSecurityEnvironmentSchools: 310 (18.4%)Schools310Hospitals: 280 (16.6%)Hospitals280Pensions: 220 (13.1%)Pensions220Defence: 150 (8.9%)Defence150Universities: 140 (8.3%)Universities140Roads: 120 (7.1%)Roads120Rail: 95 (5.6%)Rail95Police: 85 (5.0%)Police85Water: 75 (4.5%)Water75Waste: 60 (3.6%)Waste60Net: 55 (3.3%)Net55Fire: 50 (3.0%)Fire50Parks: 45 (2.7%)Parks45
Where the budget goesTreemap of 13 items, together 1685; the rectangle of each has the area of its value. Largest: Schools (18.4%), Hospitals (16.6%), Pensions (13.1%). Groups: Society 56.4%, Infrastructure 16.0%, Security 16.9%, Environment 10.7%.SocietyInfrastructureSecurityEnvironmentSchools: 310 (18.4%)Schools310Hospitals: 280 (16.6%)Hospitals280Pensions: 220 (13.1%)Pensions220Defence: 150 (8.9%)Defence150Universities: 140 (8.3%)Universities140Roads: 120 (7.1%)Roads120Rail: 95 (5.6%)Rail95Police: 85 (5.0%)Police85Water: 75 (4.5%)Water75Waste: 60 (3.6%)Waste60Net: 55 (3.3%)Net55Fire: 50 (3.0%)Fire50Parks: 45 (2.7%)

Source: Illustrative budget in millions

Show chart data
Data for Where the budget goes
ItemValueShareGroup
Schools31018.4%Society
Hospitals28016.6%Society
Pensions22013.1%Society
Defence1508.9%Security
Universities1408.3%Society
Roads1207.1%Infrastructure
Rail955.6%Infrastructure
Police855.0%Security
Water754.5%Environment
Waste603.6%Environment
Net553.3%Infrastructure
Fire503.0%Security
Parks452.7%Environment
  • Treemap
  • Show many parts of a whole

The budget by sector and department

examples/budget-by-sector.jsonDetail: The budget by sector and department →
{
  "schemaVersion": 1,
  "type": "treemap",
  "title": "The budget by sector and department",
  "source": "Illustrative budget in millions",
  "width": 760,
  "height": 480,
  "treemap": {
    "items": [
      {
        "label": "Society",
        "children": [
          {
            "label": "Schools",
            "value": 310
          },
          {
            "label": "Hospitals",
            "value": 280
          },
          {
            "label": "Pensions",
            "value": 220
          },
          {
            "label": "Universities",
            "value": 140
          }
        ]
      },
      {
        "label": "Security",
        "children": [
          {
            "label": "Defence",
            "value": 150
          },
          {
            "label": "Police",
            "value": 85
          },
          {
            "label": "Fire",
            "value": 50
          }
        ]
      },
      {
        "label": "Infrastructure",
        "children": [
          {
            "label": "Roads",
            "value": 120
          },
          {
            "label": "Rail",
            "value": 95
          },
          {
            "label": "Net",
            "value": 55
          }
        ]
      },
      {
        "label": "Nature",
        "children": [
          {
            "label": "Water",
            "value": 75
          },
          {
            "label": "Waste",
            "value": 60
          },
          {
            "label": "Parks",
            "value": 45
          }
        ]
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 640
  }
}
The budget by sector and department
The budget by sector and departmentTreemap of 13 items, together 1685; the rectangle of each has the area of its value. Largest: Society › Schools (18.4%), Society › Hospitals (16.6%), Society › Pensions (13.1%). Groups: Society 56.4%, Security 16.9%, Infrastructure 16.0%, Nature 10.7%.SocietySecurityInfrastructureNatureSociety: 950 (56.4%)SocietySociety › Schools: 310 (18.4%)Schools310Society › Hospitals: 280 (16.6%)Hospitals280Society › Pensions: 220 (13.1%)Pensions220Society › Universities: 140 (8.3%)Universities140Security: 285 (16.9%)SecuritySecurity › Defence: 150 (8.9%)Defence150Security › Police: 85 (5.0%)Police85Security › Fire: 50 (3.0%)Fire50Infrastructure: 270 (16.0%)InfrastructureInfrastructure › Roads: 120 (7.1%)Roads120Infrastructure › Rail: 95 (5.6%)Rail95Infrastructure › Net: 55 (3.3%)Net55Nature: 180 (10.7%)NatureNature › Water: 75 (4.5%)Water75Nature › Waste: 60 (3.6%)Waste60Nature › Parks: 45 (2.7%)Parks45
The budget by sector and departmentTreemap of 13 items, together 1685; the rectangle of each has the area of its value. Largest: Society › Schools (18.4%), Society › Hospitals (16.6%), Society › Pensions (13.1%). Groups: Society 56.4%, Security 16.9%, Infrastructure 16.0%, Nature 10.7%.SocietySecurityInfrastructureNatureSociety: 950 (56.4%)SocietySociety › Schools: 310 (18.4%)Schools310Society › Hospitals: 280 (16.6%)Hospitals280Society › Pensions: 220 (13.1%)Pensions220Society › Universities: 140 (8.3%)Universities140Security: 285 (16.9%)SecuritySecurity › Defence: 150 (8.9%)Defence150Security › Police: 85 (5.0%)Police85Security › Fire: 50 (3.0%)Fire50Infrastructure: 270 (16.0%)InfrastructureInfrastructure › Roads: 120 (7.1%)Roads120Infrastructure › Rail: 95 (5.6%)Rail95Infrastructure › Net: 55 (3.3%)Net55Nature: 180 (10.7%)NatureNature › Water: 75 (4.5%)Water75Nature › Waste: 60 (3.6%)Waste60Nature › Parks: 45 (2.7%)Parks45

Source: Illustrative budget in millions

Show chart data
Data for The budget by sector and department
ItemValueShareGroup
Society95056.4%Society
Society › Schools31018.4%Society
Society › Hospitals28016.6%Society
Society › Pensions22013.1%Society
Society › Universities1408.3%Society
Security28516.9%Security
Security › Defence1508.9%Security
Security › Police855.0%Security
Security › Fire503.0%Security
Infrastructure27016.0%Infrastructure
Infrastructure › Roads1207.1%Infrastructure
Infrastructure › Rail955.6%Infrastructure
Infrastructure › Net553.3%Infrastructure
Nature18010.7%Nature
Nature › Water754.5%Nature
Nature › Waste603.6%Nature
Nature › Parks452.7%Nature
  • Treemap (nested)
  • Show parts inside parts

Flows

From energy source to use

examples/energy-flow.jsonDetail: From energy source to use →
{
  "schemaVersion": 1,
  "type": "sankey",
  "title": "From energy source to use",
  "source": "Illustrative flows in TWh",
  "width": 760,
  "height": 460,
  "sankey": {
    "links": [
      {
        "from": "Gas",
        "to": "Power",
        "value": 120
      },
      {
        "from": "Gas",
        "to": "Heating",
        "value": 160
      },
      {
        "from": "Coal",
        "to": "Power",
        "value": 80
      },
      {
        "from": "Wind",
        "to": "Power",
        "value": 90
      },
      {
        "from": "Solar",
        "to": "Power",
        "value": 40
      },
      {
        "from": "Oil",
        "to": "Transport",
        "value": 150
      },
      {
        "from": "Oil",
        "to": "Industry",
        "value": 50
      },
      {
        "from": "Power",
        "to": "Industry",
        "value": 120
      },
      {
        "from": "Power",
        "to": "Households",
        "value": 100
      },
      {
        "from": "Power",
        "to": "Transport",
        "value": 20
      },
      {
        "from": "Power",
        "to": "Losses",
        "value": 90
      },
      {
        "from": "Heating",
        "to": "Households",
        "value": 160
      }
    ]
  },
  "mobile": {
    "width": 380,
    "height": 560
  }
}
From energy source to use
From energy source to useSankey diagram of 11 nodes and 12 links; 690 enter it. Biggest links: Gas → Heating (160), Heating → Households (160), Oil → Transport (150).Gas → Power: 120Gas → Heating: 160Coal → Power: 80Wind → Power: 90Solar → Power: 40Oil → Transport: 150Oil → Industry: 50Power → Industry: 120Power → Households: 100Power → Transport: 20Power → Losses: 90Heating → Households: 160Gas: 280Gas280Power: 330Power330Heating: 160Heating160Coal: 80Coal80Wind: 90Wind90Solar: 40Solar 40Oil: 200Oil200Transport: 170Transport170Industry: 170Industry170Households: 260Households260Losses: 90Losses90
From energy source to useSankey diagram of 11 nodes and 12 links; 690 enter it. Biggest links: Gas → Heating (160), Heating → Households (160), Oil → Transport (150).Gas → Power: 120Gas → Heating: 160Coal → Power: 80Wind → Power: 90Solar → Power: 40Oil → Transport: 150Oil → Industry: 50Power → Industry: 120Power → Households: 100Power → Transport: 20Power → Losses: 90Heating → Households: 160Gas: 280Gas280Power: 330Power330Heating: 160Heating160Coal: 80Coal80Wind: 90Wind90Solar: 40Solar40Oil: 200Oil200Transport: 170Transport170Industry: 170Industry170Households: 260Households260Losses: 90Losses90

Source: Illustrative flows in TWh

Show chart data
Data for From energy source to use
fromtoValueShare
GasHeating16023.2%
HeatingHouseholds16023.2%
OilTransport15021.7%
GasPower12017.4%
PowerIndustry12017.4%
PowerHouseholds10014.5%
WindPower9013.0%
PowerLosses9013.0%
CoalPower8011.6%
OilIndustry507.2%
SolarPower405.8%
PowerTransport202.9%
  • Sankey diagram
  • Follow a quantity from source to use

Water in a town, with recycling

examples/water-cycle.jsonDetail: Water in a town, with recycling →
{
  "schemaVersion": 1,
  "type": "sankey",
  "title": "Water in a town, with recycling",
  "source": "Illustrative flows in million cubic metres",
  "width": 880,
  "height": 520,
  "sankey": {
    "links": [
      {
        "from": "Intake",
        "to": "Treatment",
        "value": 100
      },
      {
        "from": "Recycling",
        "to": "Treatment",
        "value": 40,
        "back": true
      },
      {
        "from": "Treatment",
        "to": "Households",
        "value": 60
      },
      {
        "from": "Treatment",
        "to": "Industry",
        "value": 80
      },
      {
        "from": "Households",
        "to": "Wastewater",
        "value": 50
      },
      {
        "from": "Industry",
        "to": "Wastewater",
        "value": 60
      },
      {
        "from": "Wastewater",
        "to": "Recycling",
        "value": 40
      },
      {
        "from": "Wastewater",
        "to": "River",
        "value": 70
      }
    ]
  }
}
Water in a town, with recycling
Water in a town, with recyclingSankey diagram of 7 nodes and 8 links; 100 enter it. Biggest links: Intake → Treatment (100), Treatment → Industry (80), Wastewater → River (70).Intake → Treatment: 100Recycling → Treatment: 40Treatment → Households: 60Treatment → Industry: 80Households → Wastewater: 50Industry → Wastewater: 60Wastewater → Recycling: 40Wastewater → River: 70Intake: 100Intake100Treatment: 140Treatment140Recycling: 40Recycling40Households: 60Households60Industry: 80Industry80Wastewater: 110Wastewater110River: 70River70

Source: Illustrative flows in million cubic metres

Show chart data
Data for Water in a town, with recycling
fromtoValueShare
IntakeTreatment100100.0%
TreatmentIndustry8080.0%
WastewaterRiver7070.0%
TreatmentHouseholds6060.0%
IndustryWastewater6060.0%
HouseholdsWastewater5050.0%
RecyclingTreatment4040.0%
WastewaterRecycling4040.0%
  • Sankey diagram (flow back)
  • Show a cycle in a flow

Voter movement

examples/voter-movement.jsonDetail: Voter movement →
{
  "schemaVersion": 1,
  "type": "sankey",
  "title": "Voter movement",
  "width": 760,
  "height": 460,
  "sankey": {
    "order": "listed",
    "nodes": [
      {
        "label": "Red 2021",
        "column": 0,
        "color": 2
      },
      {
        "label": "Green 2021",
        "column": 0,
        "color": 3
      },
      {
        "label": "Blue 2021",
        "column": 0,
        "color": 1
      },
      {
        "label": "Red 2025",
        "column": 1,
        "color": 2
      },
      {
        "label": "Green 2025",
        "column": 1,
        "color": 3
      },
      {
        "label": "Blue 2025",
        "column": 1,
        "color": 1
      },
      {
        "label": "Did not vote",
        "column": 1,
        "color": 4
      }
    ],
    "links": [
      {
        "from": "Red 2021",
        "to": "Red 2025",
        "value": 40
      },
      {
        "from": "Red 2021",
        "to": "Green 2025",
        "value": 10
      },
      {
        "from": "Red 2021",
        "to": "Did not vote",
        "value": 5
      },
      {
        "from": "Green 2021",
        "to": "Green 2025",
        "value": 25
      },
      {
        "from": "Green 2021",
        "to": "Red 2025",
        "value": 8
      },
      {
        "from": "Blue 2021",
        "to": "Blue 2025",
        "value": 30
      },
      {
        "from": "Blue 2021",
        "to": "Red 2025",
        "value": 6
      },
      {
        "from": "Blue 2021",
        "to": "Did not vote",
        "value": 9
      }
    ]
  },
  "source": "Illustrative survey, in thousands of voters",
  "mobile": {
    "width": 400,
    "height": 520
  }
}
Voter movement
Voter movementSankey diagram of 7 nodes and 8 links; 133 enter it. Biggest links: Red 2021 → Red 2025 (40), Blue 2021 → Blue 2025 (30), Green 2021 → Green 2025 (25).Red 2021 → Red 2025: 40Red 2021 → Green 2025: 10Red 2021 → Did not vote: 5Green 2021 → Green 2025: 25Green 2021 → Red 2025: 8Blue 2021 → Blue 2025: 30Blue 2021 → Red 2025: 6Blue 2021 → Did not vote: 9Red 2021: 55Red 202155Green 2021: 33Green 202133Blue 2021: 45Blue 202145Red 2025: 54Red 202554Green 2025: 35Green 202535Blue 2025: 30Blue 202530Did not vote: 14Did not vote14
Voter movementSankey diagram of 7 nodes and 8 links; 133 enter it. Biggest links: Red 2021 → Red 2025 (40), Blue 2021 → Blue 2025 (30), Green 2021 → Green 2025 (25).Red 2021 → Red 2025: 40Red 2021 → Green 2025: 10Red 2021 → Did not vote: 5Green 2021 → Green 2025: 25Green 2021 → Red 2025: 8Blue 2021 → Blue 2025: 30Blue 2021 → Red 2025: 6Blue 2021 → Did not vote: 9Red 2021: 55Red 202155Green 2021: 33Green 202133Blue 2021: 45Blue 202145Red 2025: 54Red 202554Green 2025: 35Green 202535Blue 2025: 30Blue 202530Did not vote: 14Did not vote14

Source: Illustrative survey, in thousands of voters

Show chart data
Data for Voter movement
fromtoValueShare
Red 2021Red 20254030.1%
Blue 2021Blue 20253022.6%
Green 2021Green 20252518.8%
Red 2021Green 2025107.5%
Blue 2021Did not vote96.8%
Green 2021Red 202586.0%
Blue 2021Red 202564.5%
Red 2021Did not vote53.8%
  • Sankey diagram (fixed columns)
  • Follow voters between two elections

Sequence and state diagrams

Reading an item through the cache

examples/cache-lookup.jsonDetail: Reading an item through the cache →
{
  "schemaVersion": 1,
  "type": "sequence",
  "title": "Reading an item through the cache",
  "source": "Service handbook, request flow",
  "width": 800,
  "height": 670,
  "sequence": {
    "participants": [
      {
        "id": "user",
        "label": "Reader",
        "kind": "actor"
      },
      {
        "id": "api",
        "label": "Item API",
        "sublabel": "HTTP :8080"
      },
      {
        "id": "cache",
        "label": "Cache",
        "sublabel": "in memory",
        "kind": "database"
      },
      {
        "id": "db",
        "label": "Item store",
        "sublabel": "Postgres",
        "kind": "database"
      },
      {
        "id": "events",
        "label": "Change feed",
        "kind": "queue"
      }
    ],
    "messages": [
      {
        "from": "user",
        "to": "api",
        "label": "GET /items/42"
      },
      {
        "from": "api",
        "to": "api",
        "label": "check token"
      },
      {
        "from": "api",
        "to": "cache",
        "label": "get item:42"
      },
      {
        "from": "cache",
        "to": "api",
        "label": "hit",
        "kind": "reply"
      },
      {
        "from": "cache",
        "to": "api",
        "label": "miss",
        "kind": "reply"
      },
      {
        "from": "api",
        "to": "db",
        "label": "SELECT item 42"
      },
      {
        "from": "db",
        "to": "api",
        "label": "row",
        "kind": "reply"
      },
      {
        "from": "api",
        "to": "cache",
        "label": "set item:42, 5 min",
        "kind": "async"
      },
      {
        "from": "api",
        "to": "events",
        "label": "item.read",
        "kind": "async"
      },
      {
        "from": "api",
        "to": "user",
        "label": "200 OK",
        "kind": "reply"
      }
    ],
    "fragments": [
      {
        "kind": "alt",
        "label": "cached",
        "from": 3,
        "to": 7,
        "else": [
          {
            "from": 4,
            "label": "not cached"
          }
        ]
      }
    ],
    "numbered": true
  }
}
Focus
Reading an item through the cache
Reading an item through the cacheSequence diagram with 5 participants: Reader (actor), Item API, Cache (database), Item store (database) and Change feed (queue). 10 messages, in order: 1. Reader to Item API: GET /items/42. 2. Item API to itself: check token. 3. Item API to Cache: get item:42. 4. Cache to Item API: hit (reply). 5. Cache to Item API: miss (reply). 6. Item API to Item store: SELECT item 42. 7. Item store to Item API: row (reply). 8. Item API to Cache: set item:42, 5 min (asynchronous). 9. Item API to Change feed: item.read (asynchronous). 10. Item API to Reader: 200 OK (reply). Fragment alt "cached" spans messages 4–8, else "not cached" from message 5.alt[cached][not cached]1. Reader → Item API: GET /items/42GET /items/4212. Item API → Item API: check tokencheck token23. Item API → Cache: get item:42get item:4234. Cache → Item API: hithit45. Cache → Item API: missmiss56. Item API → Item store: SELECT item 42SELECT item 4267. Item store → Item API: rowrow78. Item API → Cache: set item:42, 5 minset item:42, 5 min89. Item API → Change feed: item.readitem.read910. Item API → Reader: 200 OK200 OK10ReaderReaderItem API – HTTP :8080Item APIHTTP :8080Cache – in memoryCachein memoryItem store – PostgresItem storePostgresChange feedChange feed

Source: Service handbook, request flow

Show chart data
Data for Reading an item through the cache
No.FromToMessageKindFragment
1ReaderItem APIGET /items/42call
2Item APIItem APIcheck tokencall
3Item APICacheget item:42call
4CacheItem APIhitreplyalt [cached]
5CacheItem APImissreplyalt [not cached]
6Item APIItem storeSELECT item 42callalt [not cached]
7Item storeItem APIrowreplyalt [not cached]
8Item APICacheset item:42, 5 minasynchronousalt [not cached]
9Item APIChange feeditem.readasynchronous
10Item APIReader200 OKreply
  • Sequence diagram
  • Explain a request flow

Exporting a report in the background

examples/async-export.jsonDetail: Exporting a report in the background →
{
  "schemaVersion": 1,
  "type": "sequence",
  "title": "Exporting a report in the background",
  "source": "Service handbook, export flow",
  "width": 1300,
  "height": 400,
  "sequence": {
    "orientation": "landscape",
    "participants": [
      {
        "id": "client",
        "label": "Browser",
        "kind": "actor"
      },
      {
        "id": "api",
        "label": "Export API"
      },
      {
        "id": "queue",
        "label": "Jobs",
        "kind": "queue"
      },
      {
        "id": "worker",
        "label": "Worker"
      },
      {
        "id": "files",
        "label": "File storage",
        "kind": "external"
      }
    ],
    "messages": [
      {
        "from": "client",
        "to": "api",
        "label": "POST /exports"
      },
      {
        "from": "api",
        "to": "queue",
        "label": "enqueue",
        "kind": "async"
      },
      {
        "from": "api",
        "to": "client",
        "label": "202, job id",
        "kind": "reply"
      },
      {
        "from": "worker",
        "to": "queue",
        "label": "take job"
      },
      {
        "from": "worker",
        "to": "files",
        "label": "write report"
      },
      {
        "from": "client",
        "to": "api",
        "label": "GET /exports/7"
      },
      {
        "from": "api",
        "to": "client",
        "label": "running",
        "kind": "reply"
      },
      {
        "from": "worker",
        "to": "api",
        "label": "done",
        "kind": "async"
      },
      {
        "from": "client",
        "to": "api",
        "label": "GET /exports/7"
      },
      {
        "from": "api",
        "to": "client",
        "label": "download link",
        "kind": "reply"
      }
    ],
    "fragments": [
      {
        "kind": "loop",
        "label": "every 5 s",
        "from": 5,
        "to": 6
      }
    ]
  }
}
Focus
Exporting a report in the background
Exporting a report in the backgroundSequence diagram with 5 participants: Browser (actor), Export API, Jobs (queue), Worker and File storage (external). 10 messages, in order: 1. Browser to Export API: POST /exports. 2. Export API to Jobs: enqueue (asynchronous). 3. Export API to Browser: 202, job id (reply). 4. Worker to Jobs: take job. 5. Worker to File storage: write report. 6. Browser to Export API: GET /exports/7. 7. Export API to Browser: running (reply). 8. Worker to Export API: done (asynchronous). 9. Browser to Export API: GET /exports/7. 10. Export API to Browser: download link (reply). Fragment loop "every 5 s" spans messages 6–7.loop[every 5 s]1. Browser → Export API: POST /exportsPOST /exports2. Export API → Jobs: enqueueenqueue3. Export API → Browser: 202, job id202, job id4. Worker → Jobs: take jobtake job5. Worker → File storage: write reportwrite report6. Browser → Export API: GET /exports/7GET /exports/77. Export API → Browser: runningrunning8. Worker → Export API: donedone9. Browser → Export API: GET /exports/7GET /exports/710. Export API → Browser: download linkdownload linkBrowserBrowserExport APIExport APIJobsJobsWorkerWorkerFile storageFile storage

Source: Service handbook, export flow

Show chart data
Data for Exporting a report in the background
No.FromToMessageKindFragment
1BrowserExport APIPOST /exportscall
2Export APIJobsenqueueasynchronous
3Export APIBrowser202, job idreply
4WorkerJobstake jobcall
5WorkerFile storagewrite reportcall
6BrowserExport APIGET /exports/7callloop [every 5 s]
7Export APIBrowserrunningreplyloop [every 5 s]
8WorkerExport APIdoneasynchronous
9BrowserExport APIGET /exports/7call
10Export APIBrowserdownload linkreply
  • Sequence diagram (landscape)
  • Fit a flow into a wide format

Sign-in with OIDC and a backend for frontend

examples/sign-in-sequence.jsonDetail: Sign-in with OIDC and a backend for frontend →
{
  "schemaVersion": 1,
  "type": "sequence",
  "title": "Sign-in with OIDC and a backend for frontend",
  "source": "Illustrative reference architecture",
  "width": 900,
  "height": 900,
  "sequence": {
    "participants": [
      {
        "id": "browser",
        "label": "Browser",
        "kind": "actor"
      },
      {
        "id": "bff",
        "label": "Web / BFF",
        "sublabel": "SvelteKit"
      },
      {
        "id": "idp",
        "label": "Keycloak",
        "sublabel": "OIDC"
      },
      {
        "id": "api",
        "label": "Domain API",
        "sublabel": "Rust"
      },
      {
        "id": "db",
        "label": "Postgres",
        "sublabel": "RLS",
        "kind": "database"
      }
    ],
    "messages": [
      {
        "from": "browser",
        "to": "bff",
        "label": "GET /grades"
      },
      {
        "from": "bff",
        "to": "browser",
        "label": "Redirect, PKCE",
        "kind": "reply"
      },
      {
        "from": "browser",
        "to": "idp",
        "label": "Sign in, 2FA"
      },
      {
        "from": "idp",
        "to": "browser",
        "label": "Code",
        "kind": "reply"
      },
      {
        "from": "browser",
        "to": "bff",
        "label": "Callback with code"
      },
      {
        "from": "bff",
        "to": "idp",
        "label": "Exchange code"
      },
      {
        "from": "idp",
        "to": "bff",
        "label": "Tokens",
        "kind": "reply"
      },
      {
        "from": "bff",
        "to": "bff",
        "label": "Create session"
      },
      {
        "from": "bff",
        "to": "api",
        "label": "Load grades"
      },
      {
        "from": "api",
        "to": "db",
        "label": "Set tenant, SELECT"
      },
      {
        "from": "db",
        "to": "api",
        "label": "own school only",
        "kind": "reply"
      },
      {
        "from": "api",
        "to": "bff",
        "label": "Grades",
        "kind": "reply"
      },
      {
        "from": "bff",
        "to": "browser",
        "label": "Page, session cookie",
        "kind": "reply"
      },
      {
        "from": "idp",
        "to": "bff",
        "label": "Backchannel logout",
        "kind": "async"
      },
      {
        "from": "bff",
        "to": "bff",
        "label": "End sessions"
      }
    ],
    "fragments": [
      {
        "kind": "opt",
        "label": "central sign-out",
        "from": 13,
        "to": 14
      }
    ],
    "numbered": true
  },
  "mobile": {
    "width": 400,
    "height": 920
  }
}
Focus
Sign-in with OIDC and a backend for frontend
Sign-in with OIDC and a backend for frontendSequence diagram with 5 participants: Browser (actor), Web / BFF, Keycloak, Domain API and Postgres (database). 15 messages, in order: 1. Browser to Web / BFF: GET /grades. 2. Web / BFF to Browser: Redirect, PKCE (reply). 3. Browser to Keycloak: Sign in, 2FA. 4. Keycloak to Browser: Code (reply). 5. Browser to Web / BFF: Callback with code. 6. Web / BFF to Keycloak: Exchange code. 7. Keycloak to Web / BFF: Tokens (reply). 8. Web / BFF to itself: Create session. 9. Web / BFF to Domain API: Load grades. 10. Domain API to Postgres: Set tenant, SELECT. 11. Postgres to Domain API: own school only (reply). 12. Domain API to Web / BFF: Grades (reply). 13. Web / BFF to Browser: Page, session cookie (reply). 14. Keycloak to Web / BFF: Backchannel logout (asynchronous). 15. Web / BFF to itself: End sessions. Fragment opt "central sign-out" spans messages 14–15.opt[central sign-out]1. Browser → Web / BFF: GET /gradesGET /grades12. Web / BFF → Browser: Redirect, PKCERedirect, PKCE23. Browser → Keycloak: Sign in, 2FASign in, 2FA34. Keycloak → Browser: CodeCode45. Browser → Web / BFF: Callback with codeCallback with code56. Web / BFF → Keycloak: Exchange codeExchange code67. Keycloak → Web / BFF: TokensTokens78. Web / BFF → Web / BFF: Create sessionCreate session89. Web / BFF → Domain API: Load gradesLoad grades910. Domain API → Postgres: Set tenant, SELECTSet tenant, SELECT1011. Postgres → Domain API: own school onlyown school only1112. Domain API → Web / BFF: GradesGrades1213. Web / BFF → Browser: Page, session cookiePage, session cookie1314. Keycloak → Web / BFF: Backchannel logoutBackchannel logout1415. Web / BFF → Web / BFF: End sessionsEnd sessions15BrowserBrowserWeb / BFF – SvelteKitWeb / BFFSvelteKitKeycloak – OIDCKeycloakOIDCDomain API – RustDomain APIRustPostgres – RLSPostgresRLS
Sign-in with OIDC and a backend for frontendSequence diagram with 5 participants: Browser (actor), Web / BFF, Keycloak, Domain API and Postgres (database). 15 messages, in order: 1. Browser to Web / BFF: GET /grades. 2. Web / BFF to Browser: Redirect, PKCE (reply). 3. Browser to Keycloak: Sign in, 2FA. 4. Keycloak to Browser: Code (reply). 5. Browser to Web / BFF: Callback with code. 6. Web / BFF to Keycloak: Exchange code. 7. Keycloak to Web / BFF: Tokens (reply). 8. Web / BFF to itself: Create session. 9. Web / BFF to Domain API: Load grades. 10. Domain API to Postgres: Set tenant, SELECT. 11. Postgres to Domain API: own school only (reply). 12. Domain API to Web / BFF: Grades (reply). 13. Web / BFF to Browser: Page, session cookie (reply). 14. Keycloak to Web / BFF: Backchannel logout (asynchronous). 15. Web / BFF to itself: End sessions. Fragment opt "central sign-out" spans messages 14–15.opt[central sign-out]1. Browser → Web / BFF: GET /gradesGET /grades12. Web / BFF → Browser: Redirect, PKCERedirect, PKCE23. Browser → Keycloak: Sign in, 2FASign in, 2FA34. Keycloak → Browser: CodeCode45. Browser → Web / BFF: Callback with codeCallback with code56. Web / BFF → Keycloak: Exchange codeExchange code67. Keycloak → Web / BFF: TokensTokens78. Web / BFF → Web / BFF: Create sessionCreate session89. Web / BFF → Domain API: Load gradesLoad grades910. Domain API → Postgres: Set tenant, SELECTSet tenant, SELECT1011. Postgres → Domain API: own school onlyown school only1112. Domain API → Web / BFF: GradesGrades1213. Web / BFF → Browser: Page, session cookiePage, session cookie1314. Keycloak → Web / BFF: Backchannel logoutBackchannel logout1415. Web / BFF → Web / BFF: End sessionsEnd sessions15BrowserBrowserWeb / BFF – SvelteKitWeb /BFFSvelteKitKeycloak – OIDCKeycloakOIDCDomain API – RustDomainAPIRustPostgres – RLSPostgresRLS

Source: Illustrative reference architecture

Show chart data
Data for Sign-in with OIDC and a backend for frontend
No.FromToMessageKindFragment
1BrowserWeb / BFFGET /gradescall
2Web / BFFBrowserRedirect, PKCEreply
3BrowserKeycloakSign in, 2FAcall
4KeycloakBrowserCodereply
5BrowserWeb / BFFCallback with codecall
6Web / BFFKeycloakExchange codecall
7KeycloakWeb / BFFTokensreply
8Web / BFFWeb / BFFCreate sessioncall
9Web / BFFDomain APILoad gradescall
10Domain APIPostgresSet tenant, SELECTcall
11PostgresDomain APIown school onlyreply
12Domain APIWeb / BFFGradesreply
13Web / BFFBrowserPage, session cookiereply
14KeycloakWeb / BFFBackchannel logoutasynchronousopt [central sign-out]
15Web / BFFWeb / BFFEnd sessionscallopt [central sign-out]
  • Sequence diagram with a fragment and a phone variant
  • Explain a sign-in across services

Sign-in: the token exchange

examples/sign-in-focus.jsonDetail: Sign-in: the token exchange →
{
  "schemaVersion": 1,
  "type": "sequence",
  "title": "Sign-in: the token exchange",
  "source": "Illustrative reference architecture",
  "width": 900,
  "height": 900,
  "sequence": {
    "participants": [
      {
        "id": "browser",
        "label": "Browser",
        "kind": "actor"
      },
      {
        "id": "bff",
        "label": "Web / BFF",
        "sublabel": "SvelteKit"
      },
      {
        "id": "idp",
        "label": "Keycloak",
        "sublabel": "OIDC"
      },
      {
        "id": "api",
        "label": "Domain API",
        "sublabel": "Rust"
      },
      {
        "id": "db",
        "label": "Postgres",
        "sublabel": "RLS",
        "kind": "database"
      }
    ],
    "messages": [
      {
        "from": "browser",
        "to": "bff",
        "label": "GET /grades"
      },
      {
        "from": "bff",
        "to": "browser",
        "label": "Redirect, PKCE",
        "kind": "reply"
      },
      {
        "from": "browser",
        "to": "idp",
        "label": "Sign in, 2FA"
      },
      {
        "from": "idp",
        "to": "browser",
        "label": "Code",
        "kind": "reply"
      },
      {
        "from": "browser",
        "to": "bff",
        "label": "Callback with code"
      },
      {
        "from": "bff",
        "to": "idp",
        "label": "Exchange code"
      },
      {
        "from": "idp",
        "to": "bff",
        "label": "Tokens",
        "kind": "reply"
      },
      {
        "from": "bff",
        "to": "bff",
        "label": "Create session"
      },
      {
        "from": "bff",
        "to": "api",
        "label": "Load grades"
      },
      {
        "from": "api",
        "to": "db",
        "label": "Set tenant, SELECT"
      },
      {
        "from": "db",
        "to": "api",
        "label": "own school only",
        "kind": "reply"
      },
      {
        "from": "api",
        "to": "bff",
        "label": "Grades",
        "kind": "reply"
      },
      {
        "from": "bff",
        "to": "browser",
        "label": "Page, session cookie",
        "kind": "reply"
      },
      {
        "from": "idp",
        "to": "bff",
        "label": "Backchannel logout",
        "kind": "async"
      },
      {
        "from": "bff",
        "to": "bff",
        "label": "End sessions"
      }
    ],
    "fragments": [
      {
        "kind": "opt",
        "label": "central sign-out",
        "from": 13,
        "to": 14
      }
    ],
    "numbered": true
  },
  "mobile": {
    "width": 400,
    "height": 920
  },
  "emphasis": {
    "nodes": [
      "idp"
    ],
    "path": [
      "bff",
      "idp"
    ]
  },
  "legend": "auto"
}
Focus
Sign-in: the token exchange
Sign-in: the token exchangeSequence diagram with 5 participants: Browser (actor), Web / BFF, Keycloak, Domain API and Postgres (database). 15 messages, in order: 1. Browser to Web / BFF: GET /grades. 2. Web / BFF to Browser: Redirect, PKCE (reply). 3. Browser to Keycloak: Sign in, 2FA. 4. Keycloak to Browser: Code (reply). 5. Browser to Web / BFF: Callback with code. 6. Web / BFF to Keycloak: Exchange code. 7. Keycloak to Web / BFF: Tokens (reply). 8. Web / BFF to itself: Create session. 9. Web / BFF to Domain API: Load grades. 10. Domain API to Postgres: Set tenant, SELECT. 11. Postgres to Domain API: own school only (reply). 12. Domain API to Web / BFF: Grades (reply). 13. Web / BFF to Browser: Page, session cookie (reply). 14. Keycloak to Web / BFF: Backchannel logout (asynchronous). 15. Web / BFF to itself: End sessions. Fragment opt "central sign-out" spans messages 14–15. Emphasized: Keycloak. Emphasized path: Web / BFF → Keycloak. Legend: call, reply, asynchronous, emphasized, emphasized path.opt[central sign-out]1. Browser → Web / BFF: GET /gradesGET /grades12. Web / BFF → Browser: Redirect, PKCERedirect, PKCE23. Browser → Keycloak: Sign in, 2FASign in, 2FA34. Keycloak → Browser: CodeCode45. Browser → Web / BFF: Callback with codeCallback with code56. Web / BFF → Keycloak: Exchange codeExchange code67. Keycloak → Web / BFF: TokensTokens78. Web / BFF → Web / BFF: Create sessionCreate session89. Web / BFF → Domain API: Load gradesLoad grades910. Domain API → Postgres: Set tenant, SELECTSet tenant, SELECT1011. Postgres → Domain API: own school onlyown school only1112. Domain API → Web / BFF: GradesGrades1213. Web / BFF → Browser: Page, session cookiePage, session cookie1314. Keycloak → Web / BFF: Backchannel logoutBackchannel logout1415. Web / BFF → Web / BFF: End sessionsEnd sessions15BrowserBrowserWeb / BFF – SvelteKitWeb / BFFSvelteKitKeycloak – OIDCKeycloakOIDCDomain API – RustDomain APIRustPostgres – RLSPostgresRLSCallReplyAsynchronousEmphasizedEmphasized path
Sign-in: the token exchangeSequence diagram with 5 participants: Browser (actor), Web / BFF, Keycloak, Domain API and Postgres (database). 15 messages, in order: 1. Browser to Web / BFF: GET /grades. 2. Web / BFF to Browser: Redirect, PKCE (reply). 3. Browser to Keycloak: Sign in, 2FA. 4. Keycloak to Browser: Code (reply). 5. Browser to Web / BFF: Callback with code. 6. Web / BFF to Keycloak: Exchange code. 7. Keycloak to Web / BFF: Tokens (reply). 8. Web / BFF to itself: Create session. 9. Web / BFF to Domain API: Load grades. 10. Domain API to Postgres: Set tenant, SELECT. 11. Postgres to Domain API: own school only (reply). 12. Domain API to Web / BFF: Grades (reply). 13. Web / BFF to Browser: Page, session cookie (reply). 14. Keycloak to Web / BFF: Backchannel logout (asynchronous). 15. Web / BFF to itself: End sessions. Fragment opt "central sign-out" spans messages 14–15. Emphasized: Keycloak. Emphasized path: Web / BFF → Keycloak. Legend: call, reply, asynchronous, emphasized, emphasized path.opt[central sign-out]1. Browser → Web / BFF: GET /gradesGET /grades12. Web / BFF → Browser: Redirect, PKCERedirect, PKCE23. Browser → Keycloak: Sign in, 2FASign in, 2FA34. Keycloak → Browser: CodeCode45. Browser → Web / BFF: Callback with codeCallback with code56. Web / BFF → Keycloak: Exchange codeExchange code67. Keycloak → Web / BFF: TokensTokens78. Web / BFF → Web / BFF: Create sessionCreate session89. Web / BFF → Domain API: Load gradesLoad grades910. Domain API → Postgres: Set tenant, SELECTSet tenant, SELECT1011. Postgres → Domain API: own school onlyown school only1112. Domain API → Web / BFF: GradesGrades1213. Web / BFF → Browser: Page, session cookiePage, session cookie1314. Keycloak → Web / BFF: Backchannel logoutBackchannel logout1415. Web / BFF → Web / BFF: End sessionsEnd sessions15BrowserBrowserWeb / BFF – SvelteKitWeb /BFFSvelteKitKeycloak – OIDCKeycloakOIDCDomain API – RustDomainAPIRustPostgres – RLSPostgresRLSCallReplyAsynchronousEmphasizedEmphasized path

Source: Illustrative reference architecture

Show chart data
Data for Sign-in: the token exchange
No.FromToMessageKindFragmentEmphasis
1BrowserWeb / BFFGET /gradescall
2Web / BFFBrowserRedirect, PKCEreply
3BrowserKeycloakSign in, 2FAcall
4KeycloakBrowserCodereply
5BrowserWeb / BFFCallback with codecall
6Web / BFFKeycloakExchange codecallon emphasized path
7KeycloakWeb / BFFTokensreplyon emphasized path
8Web / BFFWeb / BFFCreate sessioncall
9Web / BFFDomain APILoad gradescall
10Domain APIPostgresSet tenant, SELECTcall
11PostgresDomain APIown school onlyreply
12Domain APIWeb / BFFGradesreply
13Web / BFFBrowserPage, session cookiereply
14KeycloakWeb / BFFBackchannel logoutasynchronousopt [central sign-out]on emphasized path
15Web / BFFWeb / BFFEnd sessionscallopt [central sign-out]
  • Sequence diagram with emphasis and a legend
  • Point at one exchange between two systems

Life of a support ticket

examples/ticket-states.jsonDetail: Life of a support ticket →
{
  "schemaVersion": 1,
  "type": "state",
  "title": "Life of a support ticket",
  "source": "Support handbook, ticket states",
  "width": 900,
  "height": 900,
  "state": {
    "initial": "new",
    "states": [
      {
        "id": "new",
        "label": "New"
      },
      {
        "id": "triaged",
        "label": "Triaged"
      },
      {
        "id": "severity",
        "label": "Severity?",
        "kind": "choice"
      },
      {
        "id": "handling",
        "label": "Being handled",
        "kind": "composite"
      },
      {
        "id": "progress",
        "label": "In progress",
        "sublabel": "assigned",
        "in": "handling"
      },
      {
        "id": "waiting",
        "label": "Waiting for customer",
        "in": "handling"
      },
      {
        "id": "resolved",
        "label": "Resolved"
      },
      {
        "id": "closed",
        "label": "Closed",
        "final": true
      },
      {
        "id": "rejected",
        "label": "Rejected",
        "final": true
      }
    ],
    "transitions": [
      {
        "from": "new",
        "to": "triaged",
        "event": "review"
      },
      {
        "from": "triaged",
        "to": "severity",
        "event": "classify"
      },
      {
        "from": "severity",
        "to": "progress",
        "guard": "valid",
        "action": "assign"
      },
      {
        "from": "severity",
        "to": "rejected",
        "guard": "duplicate"
      },
      {
        "from": "progress",
        "to": "waiting",
        "event": "ask"
      },
      {
        "from": "waiting",
        "to": "progress",
        "event": "reply"
      },
      {
        "from": "waiting",
        "to": "waiting",
        "event": "after 3 days",
        "action": "remind"
      },
      {
        "from": "progress",
        "to": "resolved",
        "event": "fix shipped"
      },
      {
        "from": "resolved",
        "to": "progress",
        "event": "reopen",
        "dash": "dashed"
      },
      {
        "from": "resolved",
        "to": "closed",
        "event": "after 7 days"
      }
    ],
    "mainPath": [
      "new",
      "triaged",
      "severity",
      "progress",
      "resolved",
      "closed"
    ]
  }
}
Focus
Life of a support ticket
Life of a support ticketState diagram with 9 states and 10 transitions. It starts in New. Final states: Closed and Rejected. Main path: New → Triaged → Severity? → In progress → Resolved → Closed. New to Triaged on review. Triaged to Severity? on classify. Severity? to In progress on [valid] / assign. Severity? to Rejected on [duplicate]. In progress to Waiting for customer on ask. In progress to Resolved on fix shipped. Waiting for customer to In progress on reply. Waiting for customer to itself on after 3 days / remind. Resolved to In progress on reopen. Resolved to Closed on after 7 days. Composite state Being handled contains In progress, Waiting for customer. Choices: Severity?.Being handledStart → NewNew → Triaged: reviewTriaged → Severity?: classifySeverity? → In progress: [valid] / assignSeverity? → Rejected: [duplicate]In progress → Waiting for customer: askWaiting for customer → In progress: replyIn progress → Resolved: fix shippedResolved → In progress: reopenResolved → Closed: after 7 daysWaiting for customer → Waiting for customer: after 3 days / remindreviewclassify[valid] / assign[duplicate]askreplyfix shippedreopenafter 7 daysafter 3 days / remindStartNewNewTriagedTriagedSeverity?Severity?In progress – assignedIn progressassignedWaiting for customerWaiting for customerResolvedResolvedClosedClosedRejectedRejected

Source: Support handbook, ticket states

Show chart data
Data for Life of a support ticket
FromEventGuardActionTo
StartNew
NewreviewTriaged
TriagedclassifySeverity?
Severity?validassignIn progress
Severity?duplicateRejected
In progressaskWaiting for customer
In progressfix shippedResolved
Waiting for customerreplyIn progress
Waiting for customerafter 3 daysremindWaiting for customer
ResolvedreopenIn progress
Resolvedafter 7 daysClosed
  • State diagram
  • Explain a lifecycle

Flow charts

From commit to release

examples/release-flow.jsonDetail: From commit to release →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "From commit to release",
  "source": "Team handbook, release process",
  "width": 1120,
  "height": 1020,
  "flow": {
    "lanes": [
      {
        "id": "dev",
        "label": "Development"
      },
      {
        "id": "ci",
        "label": "Continuous integration"
      },
      {
        "id": "ops",
        "label": "Operations"
      }
    ],
    "nodes": [
      {
        "id": "commit",
        "label": "Commit pushed",
        "kind": "start",
        "lane": "dev"
      },
      {
        "id": "review",
        "label": "Code review",
        "lane": "dev"
      },
      {
        "id": "build",
        "label": "Build",
        "sublabel": "locked inputs",
        "lane": "ci"
      },
      {
        "id": "tests",
        "label": "Run tests",
        "lane": "ci"
      },
      {
        "id": "green",
        "label": "All green?",
        "kind": "decision",
        "lane": "ci"
      },
      {
        "id": "fix",
        "label": "Fix failures",
        "lane": "dev"
      },
      {
        "id": "staging",
        "label": "Deploy to staging",
        "lane": "ops"
      },
      {
        "id": "approve",
        "label": "Approved?",
        "kind": "decision",
        "lane": "ops"
      },
      {
        "id": "prod",
        "label": "Deploy to production",
        "lane": "ops"
      },
      {
        "id": "done",
        "label": "Released",
        "kind": "end",
        "lane": "ops"
      }
    ],
    "edges": [
      {
        "from": "commit",
        "to": "review"
      },
      {
        "from": "review",
        "to": "build",
        "label": "merged"
      },
      {
        "from": "build",
        "to": "tests"
      },
      {
        "from": "tests",
        "to": "green"
      },
      {
        "from": "green",
        "to": "staging",
        "label": "yes"
      },
      {
        "from": "green",
        "to": "fix",
        "label": "no"
      },
      {
        "from": "fix",
        "to": "build",
        "label": "retry"
      },
      {
        "from": "staging",
        "to": "approve"
      },
      {
        "from": "approve",
        "to": "prod",
        "label": "yes"
      },
      {
        "from": "approve",
        "to": "review",
        "label": "changes requested",
        "dash": "dashed"
      },
      {
        "from": "prod",
        "to": "done"
      }
    ],
    "groups": [
      {
        "label": "Quality gates",
        "nodes": [
          "build",
          "tests",
          "green"
        ]
      }
    ],
    "mainPath": [
      "commit",
      "review",
      "build",
      "tests",
      "green",
      "staging",
      "approve",
      "prod",
      "done"
    ]
  }
}
Focus
From commit to release
From commit to releaseFlow chart with 10 steps and 11 connections in 3 lanes: Development, Continuous integration and Operations. Main path: Commit pushed → Code review → Build → Run tests → All green? → Deploy to staging → Approved? → Deploy to production → Released. Loop: Code review → Build → Run tests → All green? → Deploy to staging → Approved? → Code review. Bottleneck: Approved?; without it the diagram falls apart. Commit pushed (start) in Development: leads to Code review. Code review in Development: leads to Build (merged). Build in Continuous integration: leads to Run tests. Run tests in Continuous integration: leads to All green?. All green? (decision) in Continuous integration: leads to Deploy to staging (yes) and Fix failures (no). Fix failures in Development: leads to Build (retry). Deploy to staging in Operations: leads to Approved?. Approved? (decision) in Operations: leads to Deploy to production (yes) and Code review (changes requested). Deploy to production in Operations: leads to Released. Released (end) in Operations: no further step. Group "Quality gates": Build, Run tests, All green?.DevelopmentContinuous integrationOperationsQuality gatesCommit pushed → Code reviewCode review → Build: mergedBuild → Run testsRun tests → All green?All green? → Deploy to staging: yesAll green? → Fix failures: noFix failures → Build: retryDeploy to staging → Approved?Approved? → Deploy to production: yesApproved? → Code review: changes requestedDeploy to production → Releasedmergedyesnoretryyeschanges requestedCommit pushedCommit pushedCode reviewCode reviewBuild – locked inputsBuildlocked inputsRun testsRun testsAll green?All green?Fix failuresFix failuresDeploy to stagingDeploy to stagingApproved?Approved?Deploy to productionDeploy to productionReleasedReleased

Source: Team handbook, release process

Show chart data
Data for From commit to release
StepKindLaneGroupLeads to
Commit pushedstartDevelopmentCode review
Code reviewstepDevelopmentBuild (merged)
BuildstepContinuous integrationQuality gatesRun tests
Run testsstepContinuous integrationQuality gatesAll green?
All green?decisionContinuous integrationQuality gatesDeploy to staging (yes), Fix failures (no)
Fix failuresstepDevelopmentBuild (retry)
Deploy to stagingstepOperationsApproved?
Approved?decisionOperationsDeploy to production (yes), Code review (changes requested)
Deploy to productionstepOperationsReleased
ReleasedendOperations
  • Flow chart (lanes)
  • Explain a process across teams

From commit to release: the quality gate

examples/release-focus.jsonDetail: From commit to release: the quality gate →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "From commit to release: the quality gate",
  "source": "Team handbook, release process",
  "width": 1120,
  "height": 1064,
  "flow": {
    "lanes": [
      {
        "id": "dev",
        "label": "Development"
      },
      {
        "id": "ci",
        "label": "Continuous integration"
      },
      {
        "id": "ops",
        "label": "Operations"
      }
    ],
    "nodes": [
      {
        "id": "commit",
        "label": "Commit pushed",
        "kind": "start",
        "lane": "dev"
      },
      {
        "id": "review",
        "label": "Code review",
        "lane": "dev"
      },
      {
        "id": "build",
        "label": "Build",
        "sublabel": "locked inputs",
        "lane": "ci"
      },
      {
        "id": "tests",
        "label": "Run tests",
        "lane": "ci"
      },
      {
        "id": "green",
        "label": "All green?",
        "kind": "decision",
        "lane": "ci"
      },
      {
        "id": "fix",
        "label": "Fix failures",
        "lane": "dev"
      },
      {
        "id": "staging",
        "label": "Deploy to staging",
        "lane": "ops"
      },
      {
        "id": "approve",
        "label": "Approved?",
        "kind": "decision",
        "lane": "ops"
      },
      {
        "id": "prod",
        "label": "Deploy to production",
        "lane": "ops"
      },
      {
        "id": "done",
        "label": "Released",
        "kind": "end",
        "lane": "ops"
      }
    ],
    "edges": [
      {
        "from": "commit",
        "to": "review"
      },
      {
        "from": "review",
        "to": "build",
        "label": "merged"
      },
      {
        "from": "build",
        "to": "tests"
      },
      {
        "from": "tests",
        "to": "green"
      },
      {
        "from": "green",
        "to": "staging",
        "label": "yes"
      },
      {
        "from": "green",
        "to": "fix",
        "label": "no"
      },
      {
        "from": "fix",
        "to": "build",
        "label": "retry"
      },
      {
        "from": "staging",
        "to": "approve"
      },
      {
        "from": "approve",
        "to": "prod",
        "label": "yes"
      },
      {
        "from": "approve",
        "to": "review",
        "label": "changes requested",
        "dash": "dashed"
      },
      {
        "from": "prod",
        "to": "done"
      }
    ],
    "groups": [
      {
        "label": "Quality gates",
        "nodes": [
          "build",
          "tests",
          "green"
        ]
      }
    ],
    "mainPath": [
      "commit",
      "review",
      "build",
      "tests",
      "green",
      "staging",
      "approve",
      "prod",
      "done"
    ]
  },
  "emphasis": {
    "nodes": [
      "green"
    ],
    "path": [
      "build",
      "tests",
      "green",
      "staging"
    ]
  },
  "legend": "auto",
  "mobile": {
    "width": 584,
    "height": 1500
  }
}
Focus
From commit to release: the quality gate
From commit to release: the quality gateFlow chart with 10 steps and 11 connections in 3 lanes: Development, Continuous integration and Operations. Main path: Commit pushed → Code review → Build → Run tests → All green? → Deploy to staging → Approved? → Deploy to production → Released. Loop: Code review → Build → Run tests → All green? → Deploy to staging → Approved? → Code review. Bottleneck: Approved?; without it the diagram falls apart. Commit pushed (start) in Development: leads to Code review. Code review in Development: leads to Build (merged). Build in Continuous integration: leads to Run tests. Run tests in Continuous integration: leads to All green?. All green? (decision) in Continuous integration: leads to Deploy to staging (yes) and Fix failures (no). Fix failures in Development: leads to Build (retry). Deploy to staging in Operations: leads to Approved?. Approved? (decision) in Operations: leads to Deploy to production (yes) and Code review (changes requested). Deploy to production in Operations: leads to Released. Released (end) in Operations: no further step. Group "Quality gates": Build, Run tests, All green?. Emphasized: All green?. Emphasized path: Build → Run tests → All green? → Deploy to staging. Legend: start, end, step, decision, emphasized, solid line, dashed line, emphasized path.DevelopmentContinuous integrationOperationsQuality gatesCommit pushed → Code reviewCode review → Build: mergedBuild → Run testsRun tests → All green?All green? → Deploy to staging: yesAll green? → Fix failures: noFix failures → Build: retryDeploy to staging → Approved?Approved? → Deploy to production: yesApproved? → Code review: changes requestedDeploy to production → Releasedmergedyesnoretryyeschanges requestedCommit pushedCommit pushedCode reviewCode reviewBuild – locked inputsBuildlocked inputsRun testsRun testsAll green?All green?Fix failuresFix failuresDeploy to stagingDeploy to stagingApproved?Approved?Deploy to productionDeploy to productionReleasedReleasedStartEndStepDecisionEmphasizedSolid lineDashed lineEmphasized path
From commit to release: the quality gateFlow chart with 10 steps and 11 connections in 3 lanes: Development, Continuous integration and Operations. Main path: Commit pushed → Code review → Build → Run tests → All green? → Deploy to staging → Approved? → Deploy to production → Released. Loop: Code review → Build → Run tests → All green? → Deploy to staging → Approved? → Code review. Bottleneck: Approved?; without it the diagram falls apart. Commit pushed (start) in Development: leads to Code review. Code review in Development: leads to Build (merged). Build in Continuous integration: leads to Run tests. Run tests in Continuous integration: leads to All green?. All green? (decision) in Continuous integration: leads to Deploy to staging (yes) and Fix failures (no). Fix failures in Development: leads to Build (retry). Deploy to staging in Operations: leads to Approved?. Approved? (decision) in Operations: leads to Deploy to production (yes) and Code review (changes requested). Deploy to production in Operations: leads to Released. Released (end) in Operations: no further step. Group "Quality gates": Build, Run tests, All green?. Emphasized: All green?. Emphasized path: Build → Run tests → All green? → Deploy to staging. Legend: start, end, step, decision, emphasized, solid line, dashed line, emphasized path.DevelopmentContinuous integrationOperationsQuality gatesCommit pushed → Code reviewCode review → Build: mergedBuild → Run testsRun tests → All green?All green? → Deploy to staging: yesAll green? → Fix failures: noFix failures → Build: retryDeploy to staging → Approved?Approved? → Deploy to production: yesApproved? → Code review: changes requestedDeploy to production → Releasedmergedyesnoretryyeschanges requestedCommit pushedCommit pushedCode reviewCode reviewBuild – locked inputsBuildlocked inputsRun testsRun testsAll green?All green?Fix failuresFix failuresDeploy to stagingDeploy to stagingApproved?Approved?Deploy to productionDeploy to productionReleasedReleasedStartEndStepDecisionEmphasizedSolid lineDashed lineEmphasized path

Source: Team handbook, release process

Show chart data
Data for From commit to release: the quality gate
StepKindLaneGroupLeads toEmphasis
Commit pushedstartDevelopmentCode review
Code reviewstepDevelopmentBuild (merged)
BuildstepContinuous integrationQuality gatesRun testson emphasized path
Run testsstepContinuous integrationQuality gatesAll green?on emphasized path
All green?decisionContinuous integrationQuality gatesDeploy to staging (yes), Fix failures (no)emphasized, on emphasized path
Fix failuresstepDevelopmentBuild (retry)
Deploy to stagingstepOperationsApproved?on emphasized path
Approved?decisionOperationsDeploy to production (yes), Code review (changes requested)
Deploy to productionstepOperationsReleased
ReleasedendOperations
  • Flow chart with emphasis and a legend
  • Point at the step that matters

Handling an order

examples/order-flow.jsonDetail: Handling an order →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "Handling an order",
  "source": "Shop operations handbook",
  "width": 1320,
  "height": 420,
  "flow": {
    "nodes": [
      {
        "id": "received",
        "label": "Order received",
        "kind": "start"
      },
      {
        "id": "paid",
        "label": "Payment cleared?",
        "kind": "decision"
      },
      {
        "id": "reserve",
        "label": "Reserve stock"
      },
      {
        "id": "stock",
        "label": "Inventory",
        "kind": "store"
      },
      {
        "id": "available",
        "label": "In stock?",
        "kind": "decision"
      },
      {
        "id": "backorder",
        "label": "Backorder",
        "sublabel": "supplier",
        "kind": "subprocess"
      },
      {
        "id": "ship",
        "label": "Ship parcel"
      },
      {
        "id": "notify",
        "label": "Notify customer",
        "kind": "io"
      },
      {
        "id": "delivered",
        "label": "Delivered",
        "kind": "end"
      },
      {
        "id": "cancelled",
        "label": "Cancelled",
        "kind": "end"
      }
    ],
    "edges": [
      {
        "from": "received",
        "to": "paid"
      },
      {
        "from": "paid",
        "to": "reserve",
        "label": "yes"
      },
      {
        "from": "paid",
        "to": "notify",
        "label": "no"
      },
      {
        "from": "reserve",
        "to": "stock",
        "label": "update",
        "dash": "dotted"
      },
      {
        "from": "reserve",
        "to": "available"
      },
      {
        "from": "available",
        "to": "ship",
        "label": "yes"
      },
      {
        "from": "available",
        "to": "backorder",
        "label": "no"
      },
      {
        "from": "backorder",
        "to": "reserve",
        "label": "restocked",
        "dash": "dashed"
      },
      {
        "from": "ship",
        "to": "delivered"
      },
      {
        "from": "notify",
        "to": "cancelled"
      }
    ],
    "mainPath": [
      "received",
      "paid",
      "reserve",
      "available",
      "ship",
      "delivered"
    ]
  }
}
Focus
Handling an order
Handling an orderFlow chart with 10 steps and 10 connections. Main path: Order received → Payment cleared? → Reserve stock → In stock? → Ship parcel → Delivered. Most connected: Reserve stock (4 connections). Nothing leads out of Inventory. Loop: Reserve stock → In stock? → Backorder → Reserve stock. Order received (start): leads to Payment cleared?. Payment cleared? (decision): leads to Reserve stock (yes) and Notify customer (no). Reserve stock: leads to Inventory (update) and In stock?. Notify customer (input or output): leads to Cancelled. Inventory (data store): no further step. In stock? (decision): leads to Ship parcel (yes) and Backorder (no). Cancelled (end): no further step. Ship parcel: leads to Delivered. Backorder (subprocess): leads to Reserve stock (restocked). Delivered (end): no further step.Order received → Payment cleared?Payment cleared? → Reserve stock: yesPayment cleared? → Notify customer: noReserve stock → Inventory: updateReserve stock → In stock?In stock? → Ship parcel: yesIn stock? → Backorder: noBackorder → Reserve stock: restockedShip parcel → DeliveredNotify customer → CancelledyesnoupdateyesnorestockedOrder receivedOrder receivedPayment cleared?Payment cleared?Reserve stockReserve stockInventoryInventoryIn stock?In stock?Backorder – supplierBackordersupplierShip parcelShip parcelNotify customerNotify customerDeliveredDeliveredCancelledCancelled

Source: Shop operations handbook

Show chart data
Data for Handling an order
StepKindLeads to
Order receivedstartPayment cleared?
Payment cleared?decisionReserve stock (yes), Notify customer (no)
Reserve stockstepInventory (update), In stock?
Notify customerinput or outputCancelled
Inventorydata store
In stock?decisionShip parcel (yes), Backorder (no)
Cancelledend
Ship parcelstepDelivered
BackordersubprocessReserve stock (restocked)
Deliveredend
  • Flow chart (landscape)
  • Fit a process into a wide format

Contract review

examples/contract-review.jsonDetail: Contract review →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "Contract review",
  "source": "Legal operations handbook",
  "width": 720,
  "height": 860,
  "flow": {
    "nodes": [
      {
        "id": "request",
        "label": "Contract requested",
        "kind": "start"
      },
      {
        "id": "draft",
        "label": "Draft contract",
        "sublabel": "from the template"
      },
      {
        "id": "legal",
        "label": "Legal review"
      },
      {
        "id": "compliant",
        "label": "Compliant?",
        "kind": "decision"
      },
      {
        "id": "terms",
        "label": "Negotiate terms"
      },
      {
        "id": "agreed",
        "label": "Terms agreed?",
        "kind": "decision"
      },
      {
        "id": "sign",
        "label": "Sign",
        "sublabel": "both parties"
      },
      {
        "id": "archive",
        "label": "Contract archive",
        "kind": "store"
      },
      {
        "id": "done",
        "label": "In force",
        "kind": "end"
      }
    ],
    "edges": [
      {
        "from": "request",
        "to": "draft"
      },
      {
        "from": "draft",
        "to": "legal"
      },
      {
        "from": "legal",
        "to": "compliant"
      },
      {
        "from": "compliant",
        "to": "terms",
        "label": "yes"
      },
      {
        "from": "compliant",
        "to": "draft",
        "label": "no",
        "dash": "dashed",
        "fromSide": "right",
        "toSide": "right"
      },
      {
        "from": "terms",
        "to": "agreed"
      },
      {
        "from": "agreed",
        "to": "sign",
        "label": "yes"
      },
      {
        "from": "agreed",
        "to": "terms",
        "label": "no, revise",
        "dash": "dashed",
        "fromSide": "left",
        "toSide": "left"
      },
      {
        "from": "sign",
        "to": "archive",
        "fromSide": "left"
      },
      {
        "from": "sign",
        "to": "done"
      }
    ],
    "mainPath": {
      "from": "request",
      "to": "done"
    }
  },
  "mobile": {
    "width": 360,
    "height": 860
  }
}
Focus
Contract review
Contract reviewFlow chart with 9 steps and 10 connections. Main path: Contract requested → Draft contract → Legal review → Compliant? → Negotiate terms → Terms agreed? → Sign → In force. Nothing leads out of Contract archive. Loops: Draft contract → Legal review → Compliant? → Draft contract; Negotiate terms → Terms agreed? → Negotiate terms. Contract requested (start): leads to Draft contract. Draft contract: leads to Legal review. Legal review: leads to Compliant?. Compliant? (decision): leads to Negotiate terms (yes) and Draft contract (no). Negotiate terms: leads to Terms agreed?. Terms agreed? (decision): leads to Sign (yes) and Negotiate terms (no, revise). Sign: leads to Contract archive and In force. Contract archive (data store): no further step. In force (end): no further step.Contract requested → Draft contractDraft contract → Legal reviewLegal review → Compliant?Compliant? → Negotiate terms: yesCompliant? → Draft contract: noNegotiate terms → Terms agreed?Terms agreed? → Sign: yesTerms agreed? → Negotiate terms: no, reviseSign → Contract archiveSign → In forceyesnoyesno, reviseContract requestedContract requestedDraft contract – from the templateDraft contractfrom the templateLegal reviewLegal reviewCompliant?Compliant?Negotiate termsNegotiate termsTerms agreed?Terms agreed?Sign – both partiesSignboth partiesContract archiveContract archiveIn forceIn force
Contract reviewFlow chart with 9 steps and 10 connections. Main path: Contract requested → Draft contract → Legal review → Compliant? → Negotiate terms → Terms agreed? → Sign → In force. Nothing leads out of Contract archive. Loops: Draft contract → Legal review → Compliant? → Draft contract; Negotiate terms → Terms agreed? → Negotiate terms. Contract requested (start): leads to Draft contract. Draft contract: leads to Legal review. Legal review: leads to Compliant?. Compliant? (decision): leads to Negotiate terms (yes) and Draft contract (no). Negotiate terms: leads to Terms agreed?. Terms agreed? (decision): leads to Sign (yes) and Negotiate terms (no, revise). Sign: leads to Contract archive and In force. Contract archive (data store): no further step. In force (end): no further step.Contract requested → Draft contractDraft contract → Legal reviewLegal review → Compliant?Compliant? → Negotiate terms: yesCompliant? → Draft contract: noNegotiate terms → Terms agreed?Terms agreed? → Sign: yesTerms agreed? → Negotiate terms: no, reviseSign → Contract archiveSign → In forceyesnoyesno, reviseContract requestedContractrequestedDraft contract – from the templateDraftcontractfrom thetemplateLegal reviewLegal reviewCompliant?Compliant?Negotiate termsNegotiatetermsTerms agreed?Termsagreed?Sign – both partiesSignboth partiesContract archiveContractarchiveIn forceIn force

Source: Legal operations handbook

Show chart data
Data for Contract review
StepKindLeads to
Contract requestedstartDraft contract
Draft contractstepLegal review
Legal reviewstepCompliant?
Compliant?decisionNegotiate terms (yes), Draft contract (no)
Negotiate termsstepTerms agreed?
Terms agreed?decisionSign (yes), Negotiate terms (no, revise)
SignstepContract archive, In force
Contract archivedata store
In forceend
  • Flow chart with port sides
  • Keep loops back apart from the way forward

Order fulfilment with parallel checks

examples/order-fulfilment.jsonDetail: Order fulfilment with parallel checks →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "Order fulfilment with parallel checks",
  "source": "Warehouse handbook, order path",
  "width": 960,
  "height": 700,
  "flow": {
    "nodes": [
      {
        "id": "received",
        "label": "Order received",
        "kind": "start"
      },
      {
        "id": "split",
        "label": "Split into tasks"
      },
      {
        "id": "stock",
        "label": "Reserve stock"
      },
      {
        "id": "payment",
        "label": "Capture payment"
      },
      {
        "id": "fraud",
        "label": "Check fraud score"
      },
      {
        "id": "address",
        "label": "Validate address"
      },
      {
        "id": "pack",
        "label": "Pack parcel"
      },
      {
        "id": "express",
        "label": "Express?",
        "kind": "decision"
      },
      {
        "id": "courier",
        "label": "Hand to courier"
      },
      {
        "id": "post",
        "label": "Send by post"
      },
      {
        "id": "shipped",
        "label": "Shipped",
        "kind": "end"
      }
    ],
    "edges": [
      {
        "from": "received",
        "to": "split"
      },
      {
        "from": "split",
        "to": "stock"
      },
      {
        "from": "split",
        "to": "payment"
      },
      {
        "from": "split",
        "to": "fraud"
      },
      {
        "from": "split",
        "to": "address"
      },
      {
        "from": "stock",
        "to": "pack"
      },
      {
        "from": "payment",
        "to": "pack"
      },
      {
        "from": "fraud",
        "to": "pack"
      },
      {
        "from": "address",
        "to": "pack"
      },
      {
        "from": "pack",
        "to": "express"
      },
      {
        "from": "express",
        "to": "courier",
        "label": "yes"
      },
      {
        "from": "express",
        "to": "post",
        "label": "no"
      },
      {
        "from": "courier",
        "to": "shipped"
      },
      {
        "from": "post",
        "to": "shipped"
      }
    ],
    "groups": [
      {
        "label": "Checks",
        "nodes": [
          "stock",
          "payment",
          "fraud",
          "address"
        ]
      }
    ],
    "mainPath": [
      "received",
      "split",
      "payment",
      "pack",
      "express",
      "courier",
      "shipped"
    ],
    "sharedTrunks": true
  }
}
Focus
Order fulfilment with parallel checks
Order fulfilment with parallel checksFlow chart with 11 steps and 14 connections. Main path: Order received → Split into tasks → Capture payment → Pack parcel → Express? → Hand to courier → Shipped. Most connected: Split into tasks and Pack parcel (5 connections each). Bottlenecks: Pack parcel and Express?; without either the diagram falls apart. Order received (start): leads to Split into tasks. Split into tasks: leads to Reserve stock, Capture payment, Check fraud score and Validate address. Reserve stock: leads to Pack parcel. Capture payment: leads to Pack parcel. Check fraud score: leads to Pack parcel. Validate address: leads to Pack parcel. Pack parcel: leads to Express?. Express? (decision): leads to Hand to courier (yes) and Send by post (no). Hand to courier: leads to Shipped. Send by post: leads to Shipped. Shipped (end): no further step. Group "Checks": Reserve stock, Capture payment, Check fraud score, Validate address.ChecksOrder received → Split into tasksSplit into tasks → Reserve stockSplit into tasks → Capture paymentSplit into tasks → Check fraud scoreSplit into tasks → Validate addressReserve stock → Pack parcelCapture payment → Pack parcelCheck fraud score → Pack parcelValidate address → Pack parcelPack parcel → Express?Express? → Hand to courier: yesExpress? → Send by post: noHand to courier → ShippedSend by post → ShippedyesnoOrder receivedOrder receivedSplit into tasksSplit into tasksReserve stockReserve stockCapture paymentCapture paymentCheck fraud scoreCheck fraud scoreValidate addressValidate addressPack parcelPack parcelExpress?Express?Hand to courierHand to courierSend by postSend by postShippedShipped

Source: Warehouse handbook, order path

Show chart data
Data for Order fulfilment with parallel checks
StepKindGroupLeads to
Order receivedstartSplit into tasks
Split into tasksstepReserve stock, Capture payment, Check fraud score, Validate address
Reserve stockstepChecksPack parcel
Capture paymentstepChecksPack parcel
Check fraud scorestepChecksPack parcel
Validate addressstepChecksPack parcel
Pack parcelstepExpress?
Express?decisionHand to courier (yes), Send by post (no)
Hand to courierstepShipped
Send by poststepShipped
Shippedend
  • Flow chart with shared trunks
  • Show parallel work without a tangle

How insurance claims were settled

examples/claim-handling.jsonDetail: How insurance claims were settled →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "How insurance claims were settled",
  "source": "Claims system, 2025",
  "width": 960,
  "height": 300,
  "flow": {
    "orientation": "landscape",
    "nodes": [
      {
        "id": "in",
        "label": "Claim received",
        "sublabel": "12,400 claims",
        "kind": "start"
      },
      {
        "id": "check",
        "label": "First check",
        "sublabel": "12,400",
        "parts": [
          {
            "label": "settled",
            "value": 5200
          },
          {
            "label": "assessed",
            "value": 6400
          },
          {
            "label": "rejected",
            "value": 800
          }
        ]
      },
      {
        "id": "assess",
        "label": "Assessment",
        "sublabel": "6,400",
        "parts": [
          {
            "label": "settled",
            "value": 4100
          },
          {
            "label": "rejected",
            "value": 1300
          },
          {
            "label": "appealed",
            "value": 1000
          }
        ]
      },
      {
        "id": "appeal",
        "label": "Appeal",
        "sublabel": "1,000",
        "parts": [
          {
            "label": "settled",
            "value": 450
          },
          {
            "label": "rejected",
            "value": 550
          }
        ]
      },
      {
        "id": "done",
        "label": "Closed",
        "kind": "end"
      }
    ],
    "edges": [
      {
        "from": "in",
        "to": "check"
      },
      {
        "from": "check",
        "to": "assess"
      },
      {
        "from": "check",
        "to": "done"
      },
      {
        "from": "assess",
        "to": "appeal"
      },
      {
        "from": "assess",
        "to": "done"
      },
      {
        "from": "appeal",
        "to": "done"
      }
    ],
    "mainPath": {
      "from": "in",
      "to": "done"
    }
  }
}
Focus
How insurance claims were settled
How insurance claims were settledFlow chart with 5 steps and 6 connections. Main path: Claim received → First check → Closed. Most connected: First check, Assessment and Closed (3 connections each). Claim received (start): leads to First check. First check: leads to Assessment and Closed. Assessment: leads to Appeal and Closed. Appeal: leads to Closed. Closed (end): no further step. Parts: First check: settled 5200 (42%), assessed 6400 (52%), rejected 800 (6%); Assessment: settled 4100 (64%), rejected 1300 (20%), appealed 1000 (16%); Appeal: settled 450 (45%), rejected 550 (55%).Claim received → First checkFirst check → AssessmentFirst check → ClosedAssessment → AppealAssessment → ClosedAppeal → ClosedClaim received – 12,400 claimsClaim received12,400 claimsFirst check – 12,400First check12,400settled 5200 (42%)assessed 6400 (52%)rejected 800 (6%)Assessment – 6,400Assessment6,400settled 4100 (64%)rejected 1300 (20%)appealed 1000 (16%)Appeal – 1,000Appeal1,000settled 450 (45%)rejected 550 (55%)ClosedClosedsettledassessedrejectedappealed

Source: Claims system, 2025

Show chart data
Data for How insurance claims were settled
StepKindPartsLeads to
Claim receivedstartFirst check
First checkstepsettled 5200 (42%), assessed 6400 (52%), rejected 800 (6%)Assessment, Closed
Assessmentstepsettled 4100 (64%), rejected 1300 (20%), appealed 1000 (16%)Appeal, Closed
Appealstepsettled 450 (45%), rejected 550 (55%)Closed
Closedend
  • Flow chart with the shares of each step
  • Show what happens to the cases at each step

Study selection (PRISMA 2020)

examples/study-selection.jsonDetail: Study selection (PRISMA 2020) →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "Study selection (PRISMA 2020)",
  "source": "Illustrative counts. Reports excluded: wrong population 61, wrong outcome 48, other 33",
  "width": 720,
  "height": 980,
  "flow": {
    "nodes": [
      {
        "id": "databases",
        "label": "Records from databases",
        "sublabel": "n = 1,482",
        "kind": "io"
      },
      {
        "id": "registers",
        "label": "Records from registers",
        "sublabel": "n = 214",
        "kind": "io"
      },
      {
        "id": "duplicates",
        "label": "Duplicates removed",
        "sublabel": "n = 389",
        "kind": "external"
      },
      {
        "id": "screened",
        "label": "Records screened",
        "sublabel": "n = 1,307"
      },
      {
        "id": "excluded",
        "label": "Records excluded",
        "sublabel": "n = 1,121",
        "kind": "external"
      },
      {
        "id": "sought",
        "label": "Reports sought",
        "sublabel": "n = 186"
      },
      {
        "id": "missing",
        "label": "Reports not retrieved",
        "sublabel": "n = 9",
        "kind": "external"
      },
      {
        "id": "assessed",
        "label": "Reports assessed",
        "sublabel": "n = 177"
      },
      {
        "id": "reasons",
        "label": "Reports excluded",
        "sublabel": "n = 142",
        "kind": "external"
      },
      {
        "id": "studies",
        "label": "Studies included",
        "sublabel": "n = 35",
        "kind": "end"
      }
    ],
    "edges": [
      {
        "from": "databases",
        "to": "duplicates"
      },
      {
        "from": "registers",
        "to": "duplicates"
      },
      {
        "from": "duplicates",
        "to": "screened"
      },
      {
        "from": "screened",
        "to": "excluded"
      },
      {
        "from": "screened",
        "to": "sought"
      },
      {
        "from": "sought",
        "to": "missing"
      },
      {
        "from": "sought",
        "to": "assessed"
      },
      {
        "from": "assessed",
        "to": "reasons"
      },
      {
        "from": "assessed",
        "to": "studies"
      }
    ],
    "mainPath": [
      "databases",
      "duplicates",
      "screened",
      "sought",
      "assessed",
      "studies"
    ],
    "groups": [
      {
        "label": "Identification",
        "nodes": [
          "databases",
          "registers",
          "duplicates"
        ]
      },
      {
        "label": "Screening",
        "nodes": [
          "screened",
          "excluded",
          "sought",
          "missing",
          "assessed",
          "reasons"
        ]
      },
      {
        "label": "Included",
        "nodes": [
          "studies"
        ]
      }
    ]
  },
  "mobile": {
    "width": 440,
    "height": 960
  }
}
Focus
Study selection (PRISMA 2020)
Study selection (PRISMA 2020)Flow chart with 10 steps and 9 connections. Main path: Records from databases → Duplicates removed → Records screened → Reports sought → Reports assessed → Studies included. Nothing leads into Records from databases and Records from registers. Nothing leads out of Records excluded, Reports not retrieved and Reports excluded. Bottlenecks: Records screened and Reports sought; without either the diagram falls apart. Records from databases (input or output): leads to Duplicates removed. Records from registers (input or output): leads to Duplicates removed. Duplicates removed (external): leads to Records screened. Records screened: leads to Records excluded and Reports sought. Records excluded (external): no further step. Reports sought: leads to Reports not retrieved and Reports assessed. Reports not retrieved (external): no further step. Reports assessed: leads to Reports excluded and Studies included. Reports excluded (external): no further step. Studies included (end): no further step. Group "Identification": Records from databases, Records from registers, Duplicates removed. Group "Screening": Records screened, Records excluded, Reports sought, Reports not retrieved, Reports assessed, Reports excluded. Group "Included": Studies included.IncludedScreeningIdentificationRecords from databases → Duplicates removedRecords from registers → Duplicates removedDuplicates removed → Records screenedRecords screened → Records excludedRecords screened → Reports soughtReports sought → Reports not retrievedReports sought → Reports assessedReports assessed → Reports excludedReports assessed → Studies includedRecords from databases – n = 1,482Records from databasesn = 1,482Records from registers – n = 214Records from registersn = 214Duplicates removed – n = 389Duplicates removedn = 389Records screened – n = 1,307Records screenedn = 1,307Records excluded – n = 1,121Records excludedn = 1,121Reports sought – n = 186Reports soughtn = 186Reports not retrieved – n = 9Reports not retrievedn = 9Reports assessed – n = 177Reports assessedn = 177Reports excluded – n = 142Reports excludedn = 142Studies included – n = 35Studies includedn = 35
Study selection (PRISMA 2020)Flow chart with 10 steps and 9 connections. Main path: Records from databases → Duplicates removed → Records screened → Reports sought → Reports assessed → Studies included. Nothing leads into Records from databases and Records from registers. Nothing leads out of Records excluded, Reports not retrieved and Reports excluded. Bottlenecks: Records screened and Reports sought; without either the diagram falls apart. Records from databases (input or output): leads to Duplicates removed. Records from registers (input or output): leads to Duplicates removed. Duplicates removed (external): leads to Records screened. Records screened: leads to Records excluded and Reports sought. Records excluded (external): no further step. Reports sought: leads to Reports not retrieved and Reports assessed. Reports not retrieved (external): no further step. Reports assessed: leads to Reports excluded and Studies included. Reports excluded (external): no further step. Studies included (end): no further step. Group "Identification": Records from databases, Records from registers, Duplicates removed. Group "Screening": Records screened, Records excluded, Reports sought, Reports not retrieved, Reports assessed, Reports excluded. Group "Included": Studies included.IncludedScreeningIdentificationRecords from databases → Duplicates removedRecords from registers → Duplicates removedDuplicates removed → Records screenedRecords screened → Records excludedRecords screened → Reports soughtReports sought → Reports not retrievedReports sought → Reports assessedReports assessed → Reports excludedReports assessed → Studies includedRecords from databases – n = 1,482Records fromdatabasesn = 1,482Records from registers – n = 214Records fromregistersn = 214Duplicates removed – n = 389Duplicatesremovedn = 389Records screened – n = 1,307Recordsscreenedn = 1,307Records excluded – n = 1,121Recordsexcludedn = 1,121Reports sought – n = 186Reportssoughtn = 186Reports not retrieved – n = 9Reports notretrievedn = 9Reports assessed – n = 177Reportsassessedn = 177Reports excluded – n = 142Reportsexcludedn = 142Studies included – n = 35Studiesincludedn = 35

Source: Illustrative counts. Reports excluded: wrong population 61, wrong outcome 48, other 33

Show chart data
Data for Study selection (PRISMA 2020)
StepKindGroupLeads to
Records from databasesinput or outputIdentificationDuplicates removed
Records from registersinput or outputIdentificationDuplicates removed
Duplicates removedexternalIdentificationRecords screened
Records screenedstepScreeningRecords excluded, Reports sought
Records excludedexternalScreening
Reports soughtstepScreeningReports not retrieved, Reports assessed
Reports not retrievedexternalScreening
Reports assessedstepScreeningReports excluded, Studies included
Reports excludedexternalScreening
Studies includedendIncluded
  • Flow chart (PRISMA)
  • Report how studies were selected

Instanzenzug in Zivilsachen

examples/court-instances.jsonDetail: Instanzenzug in Zivilsachen →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "Instanzenzug in Zivilsachen",
  "source": "Vereinfacht, Deutschland",
  "locale": "de",
  "width": 760,
  "height": 640,
  "flow": {
    "nodes": [
      {
        "id": "ag",
        "label": "Amtsgericht",
        "sublabel": "Streitwert bis 5.000 €",
        "kind": "start"
      },
      {
        "id": "lg1",
        "label": "Landgericht",
        "sublabel": "Streitwert über 5.000 €",
        "kind": "start"
      },
      {
        "id": "lg2",
        "label": "Landgericht",
        "sublabel": "Berufung"
      },
      {
        "id": "olg1",
        "label": "Oberlandesgericht",
        "sublabel": "Berufung"
      },
      {
        "id": "bgh",
        "label": "Bundesgerichtshof",
        "sublabel": "Revision",
        "kind": "end"
      }
    ],
    "edges": [
      {
        "from": "ag",
        "to": "lg2",
        "label": "Berufung"
      },
      {
        "from": "lg1",
        "to": "olg1",
        "label": "Berufung"
      },
      {
        "from": "lg2",
        "to": "bgh",
        "label": "Revision, wenn zugelassen"
      },
      {
        "from": "olg1",
        "to": "bgh",
        "label": "Revision, wenn zugelassen"
      }
    ]
  },
  "mobile": {
    "width": 440,
    "height": 720
  }
}
Fokus
Instanzenzug in Zivilsachen
Instanzenzug in ZivilsachenAblaufdiagramm mit 5 Schritten und 4 Verbindungen. Engstelle: Bundesgerichtshof; ohne sie zerfällt das Diagramm. Amtsgericht (Start): führt zu Landgericht (Berufung). Landgericht (Start): führt zu Oberlandesgericht (Berufung). Landgericht: führt zu Bundesgerichtshof (Revision, wenn zugelassen). Oberlandesgericht: führt zu Bundesgerichtshof (Revision, wenn zugelassen). Bundesgerichtshof (Ende): kein weiterer Schritt.Amtsgericht → Landgericht: BerufungLandgericht → Oberlandesgericht: BerufungLandgericht → Bundesgerichtshof: Revision, wenn zugelassenOberlandesgericht → Bundesgerichtshof: Revision, wenn zugelassenBerufungBerufungRevision, wennzugelassenRevision, wennzugelassenAmtsgericht – Streitwert bis 5.000 €AmtsgerichtStreitwert bis 5.000 €Landgericht – Streitwert über 5.000 €LandgerichtStreitwert über 5.000 €Landgericht – BerufungLandgerichtBerufungOberlandesgericht – BerufungOberlandesgerichtBerufungBundesgerichtshof – RevisionBundesgerichtshofRevision
Instanzenzug in ZivilsachenAblaufdiagramm mit 5 Schritten und 4 Verbindungen. Engstelle: Bundesgerichtshof; ohne sie zerfällt das Diagramm. Amtsgericht (Start): führt zu Landgericht (Berufung). Landgericht (Start): führt zu Oberlandesgericht (Berufung). Landgericht: führt zu Bundesgerichtshof (Revision, wenn zugelassen). Oberlandesgericht: führt zu Bundesgerichtshof (Revision, wenn zugelassen). Bundesgerichtshof (Ende): kein weiterer Schritt.Amtsgericht → Landgericht: BerufungLandgericht → Oberlandesgericht: BerufungLandgericht → Bundesgerichtshof: Revision, wenn zugelassenOberlandesgericht → Bundesgerichtshof: Revision, wenn zugelassenBerufungBerufungRevision, wennzugelassenRevision, wennzugelassenAmtsgericht – Streitwert bis 5.000 €AmtsgerichtStreitwert bis5.000 €Landgericht – Streitwert über 5.000 €LandgerichtStreitwert über5.000 €Landgericht – BerufungLandgerichtBerufungOberlandesgericht – BerufungOberlandesgerichtBerufungBundesgerichtshof – RevisionBundesgerichtshofRevision

Quelle: Vereinfacht, Deutschland

Diagrammdaten anzeigen
Daten zu Instanzenzug in Zivilsachen
SchrittArtFührt zu
AmtsgerichtStartLandgericht (Berufung)
LandgerichtStartOberlandesgericht (Berufung)
LandgerichtSchrittBundesgerichtshof (Revision, wenn zugelassen)
OberlandesgerichtSchrittBundesgerichtshof (Revision, wenn zugelassen)
BundesgerichtshofEnde
  • Flow chart (Instanzenzug)
  • Show a chain of appeals

Architecture diagrams

Web shop on one cloud region

examples/shop-architecture.jsonDetail: Web shop on one cloud region →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Web shop on one cloud region",
  "source": "Architecture handbook, overview",
  "width": 1820,
  "height": 540,
  "architecture": {
    "boundaries": [
      {
        "id": "region",
        "label": "Cloud region eu-central-1"
      },
      {
        "id": "network",
        "label": "Private network",
        "in": "region"
      },
      {
        "id": "data",
        "label": "Data zone",
        "in": "network"
      }
    ],
    "components": [
      {
        "id": "customer",
        "label": "Customer",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Web shop",
        "sublabel": "browser",
        "kind": "frontend"
      },
      {
        "id": "cdn",
        "label": "Content network",
        "kind": "external"
      },
      {
        "id": "api",
        "label": "Shop API",
        "sublabel": "Node.js",
        "in": "network"
      },
      {
        "id": "cache",
        "label": "Session cache",
        "sublabel": "Redis",
        "kind": "cache",
        "in": "network"
      },
      {
        "id": "events",
        "label": "Order events",
        "kind": "queue",
        "in": "network"
      },
      {
        "id": "worker",
        "label": "Order worker",
        "in": "network"
      },
      {
        "id": "db",
        "label": "Orders",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "data"
      },
      {
        "id": "files",
        "label": "Invoices",
        "sublabel": "object storage",
        "kind": "storage",
        "in": "region"
      },
      {
        "id": "pay",
        "label": "Payment provider",
        "kind": "external"
      },
      {
        "id": "auth",
        "label": "Sign-in",
        "sublabel": "identity provider",
        "kind": "security",
        "in": "network"
      }
    ],
    "connections": [
      {
        "from": "customer",
        "to": "web",
        "label": "browses"
      },
      {
        "from": "web",
        "to": "cdn",
        "label": "loads assets",
        "technology": "HTTPS",
        "dash": "dashed"
      },
      {
        "from": "web",
        "to": "api",
        "label": "calls",
        "technology": "HTTPS/JSON"
      },
      {
        "from": "api",
        "to": "cache",
        "label": "sessions",
        "technology": "RESP"
      },
      {
        "from": "api",
        "to": "auth",
        "label": "checks token",
        "technology": "OIDC"
      },
      {
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL/TLS"
      },
      {
        "from": "api",
        "to": "events",
        "label": "publishes",
        "technology": "AMQP"
      },
      {
        "from": "events",
        "to": "worker",
        "label": "delivers"
      },
      {
        "from": "worker",
        "to": "pay",
        "label": "charges",
        "technology": "HTTPS"
      },
      {
        "from": "worker",
        "to": "files",
        "label": "stores PDF",
        "technology": "S3 API"
      },
      {
        "from": "worker",
        "to": "db",
        "label": "updates",
        "technology": "SQL/TLS"
      }
    ],
    "mainPath": [
      "customer",
      "web",
      "api",
      "events",
      "worker",
      "pay"
    ]
  }
}
Focus
Web shop on one cloud region
Web shop on one cloud regionArchitecture diagram with 11 components and 11 connections in 3 boundaries. Cloud region eu-central-1: Invoices, Private network. Private network (in Cloud region eu-central-1): Shop API, Session cache, Order events, Order worker, Sign-in, Data zone. Data zone (in Private network): Orders. Main path: Customer → Web shop → Shop API → Order events → Order worker → Payment provider. Most connected: Shop API (5 connections). Nothing leads into Customer. Bottleneck: Shop API; without it the diagram falls apart. Customer (person): connects to Web shop (browses). Web shop (frontend): connects to Content network (loads assets, via HTTPS) and Shop API (calls, via HTTPS/JSON). Shop API (service): connects to Session cache (sessions, via RESP), Sign-in (checks token, via OIDC), Orders (reads, writes, via SQL/TLS) and Order events (publishes, via AMQP). Content network (external system): no outgoing connection. Session cache (cache): no outgoing connection. Order events (queue): connects to Order worker (delivers). Sign-in (security): no outgoing connection. Order worker (service): connects to Payment provider (charges, via HTTPS), Invoices (stores PDF, via S3 API) and Orders (updates, via SQL/TLS). Orders (database): no outgoing connection. Invoices (storage): no outgoing connection. Payment provider (external system): no outgoing connection.Cloud region eu-central-1Private networkData zoneCustomer → Web shop: browsesWeb shop → Content network: loads assets [HTTPS]Web shop → Shop API: calls [HTTPS/JSON]Shop API → Session cache: sessions [RESP]Shop API → Sign-in: checks token [OIDC]Shop API → Orders: reads, writes [SQL/TLS]Shop API → Order events: publishes [AMQP]Order events → Order worker: deliversOrder worker → Payment provider: charges [HTTPS]Order worker → Invoices: stores PDF [S3 API]Order worker → Orders: updates [SQL/TLS]browsesloads assets[HTTPS]calls[HTTPS/JSON]sessions[RESP]checks token[OIDC]reads, writes[SQL/TLS]publishes[AMQP]deliverscharges[HTTPS]stores PDF[S3 API]updates[SQL/TLS]CustomerCustomerWeb shop – browserWeb shopbrowserContent networkContent networkShop API – Node.jsShop APINode.jsSession cache – RedisSession cacheRedisOrder eventsOrder eventsOrder workerOrder workerOrders – PostgresOrdersPostgresInvoices – object storageInvoicesobject storagePayment providerPayment providerSign-in – identity providerSign-inidentity provider

Source: Architecture handbook, overview

Show chart data
Data for Web shop on one cloud region
ComponentKindBoundaryConnects to
CustomerpersonWeb shop (browses)
Web shopfrontendContent network (loads assets, via HTTPS), Shop API (calls, via HTTPS/JSON)
Shop APIserviceCloud region eu-central-1 › Private networkSession cache (sessions, via RESP), Sign-in (checks token, via OIDC), Orders (reads, writes, via SQL/TLS), Order events (publishes, via AMQP)
Content networkexternal system
Session cachecacheCloud region eu-central-1 › Private network
Order eventsqueueCloud region eu-central-1 › Private networkOrder worker (delivers)
Sign-insecurityCloud region eu-central-1 › Private network
Order workerserviceCloud region eu-central-1 › Private networkPayment provider (charges, via HTTPS), Invoices (stores PDF, via S3 API), Orders (updates, via SQL/TLS)
OrdersdatabaseCloud region eu-central-1 › Private network › Data zone
InvoicesstorageCloud region eu-central-1
Payment providerexternal system
  • Architecture diagram
  • Show where the parts of a system run

Multi-tenant line-of-business application

examples/tenant-architecture.jsonDetail: Multi-tenant line-of-business application →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Multi-tenant line-of-business application",
  "source": "Illustrative reference architecture",
  "width": 1200,
  "height": 1100,
  "architecture": {
    "boundaries": [
      {
        "id": "rz",
        "label": "Data center"
      },
      {
        "id": "netz",
        "label": "Application network",
        "in": "rz"
      },
      {
        "id": "daten",
        "label": "Data zone",
        "in": "netz"
      }
    ],
    "components": [
      {
        "id": "nutzer",
        "label": "Teacher, parent",
        "kind": "person"
      },
      {
        "id": "browser",
        "label": "Browser",
        "kind": "frontend"
      },
      {
        "id": "proxy",
        "label": "Reverse proxy",
        "sublabel": "TLS 1.3, WAF",
        "kind": "security",
        "in": "rz"
      },
      {
        "id": "web",
        "label": "Web / BFF",
        "sublabel": "SvelteKit",
        "in": "netz"
      },
      {
        "id": "idp",
        "label": "Sign-in",
        "sublabel": "Keycloak, OIDC",
        "kind": "security",
        "in": "netz"
      },
      {
        "id": "api",
        "label": "Domain API",
        "sublabel": "Rust",
        "in": "netz"
      },
      {
        "id": "db",
        "label": "Domain data",
        "sublabel": "Postgres, RLS per tenant",
        "kind": "database",
        "in": "daten"
      },
      {
        "id": "audit",
        "label": "Audit log",
        "sublabel": "append only",
        "kind": "database",
        "in": "daten"
      },
      {
        "id": "backup",
        "label": "Backup",
        "sublabel": "second site",
        "kind": "storage"
      },
      {
        "id": "alt",
        "label": "School records",
        "sublabel": "legacy system",
        "kind": "external"
      },
      {
        "id": "soc",
        "label": "SIEM / SOC",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "nutzer",
        "to": "browser",
        "label": "uses"
      },
      {
        "from": "browser",
        "to": "proxy",
        "label": "calls",
        "technology": "HTTPS"
      },
      {
        "from": "proxy",
        "to": "web",
        "label": "forwards"
      },
      {
        "from": "web",
        "to": "idp",
        "label": "signs in",
        "technology": "OIDC"
      },
      {
        "from": "web",
        "to": "api",
        "label": "queries",
        "technology": "user context"
      },
      {
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL/TLS"
      },
      {
        "from": "api",
        "to": "audit",
        "label": "logs"
      },
      {
        "from": "alt",
        "to": "api",
        "label": "master data",
        "technology": "REST/JSON"
      },
      {
        "from": "api",
        "to": "soc",
        "label": "events",
        "technology": "Syslog",
        "dash": "dashed"
      },
      {
        "from": "db",
        "to": "backup",
        "label": "backs up",
        "dash": "dashed"
      }
    ],
    "mainPath": [
      "nutzer",
      "browser",
      "proxy",
      "web",
      "api",
      "db"
    ],
    "orientation": "portrait"
  },
  "mobile": {
    "width": 464,
    "height": 1180
  }
}
Focus
Multi-tenant line-of-business application
Multi-tenant line-of-business applicationArchitecture diagram with 11 components and 10 connections in 3 boundaries. Data center: Reverse proxy, Application network. Application network (in Data center): Web / BFF, Sign-in, Domain API, Data zone. Data zone (in Application network): Domain data, Audit log. Main path: Teacher, parent → Browser → Reverse proxy → Web / BFF → Domain API → Domain data. Most connected: Domain API (5 connections). Nothing leads into Teacher, parent and School records. Teacher, parent (person): connects to Browser (uses). Browser (frontend): connects to Reverse proxy (calls, via HTTPS). School records (external system): connects to Domain API (master data, via REST/JSON). Reverse proxy (security): connects to Web / BFF (forwards). Web / BFF (service): connects to Sign-in (signs in, via OIDC) and Domain API (queries, via user context). Sign-in (security): no outgoing connection. Domain API (service): connects to Domain data (reads, writes, via SQL/TLS), Audit log (logs) and SIEM / SOC (events, via Syslog). Domain data (database): connects to Backup (backs up). Audit log (database): no outgoing connection. Backup (storage): no outgoing connection. SIEM / SOC (external system): no outgoing connection.Data centerApplication networkData zoneTeacher, parent → Browser: usesBrowser → Reverse proxy: calls [HTTPS]Reverse proxy → Web / BFF: forwardsWeb / BFF → Sign-in: signs in [OIDC]Web / BFF → Domain API: queries [user context]Domain API → Domain data: reads, writes [SQL/TLS]Domain API → Audit log: logsSchool records → Domain API: master data [REST/JSON]Domain API → SIEM / SOC: events [Syslog]Domain data → Backup: backs upusescalls[HTTPS]forwardssigns in[OIDC]queries[user context]reads, writes[SQL/TLS]logsmaster data[REST/JSON]events[Syslog]backs upTeacher, parentTeacher, parentBrowserBrowserReverse proxy – TLS 1.3, WAFReverse proxyTLS 1.3, WAFWeb / BFF – SvelteKitWeb / BFFSvelteKitSign-in – Keycloak, OIDCSign-inKeycloak, OIDCDomain API – RustDomain APIRustDomain data – Postgres, RLS per tenantDomain dataPostgres, RLS per tenantAudit log – append onlyAudit logappend onlyBackup – second siteBackupsecond siteSchool records – legacy systemSchool recordslegacy systemSIEM / SOCSIEM / SOC
Multi-tenant line-of-business applicationArchitecture diagram with 11 components and 10 connections in 3 boundaries. Data center: Reverse proxy, Application network. Application network (in Data center): Web / BFF, Sign-in, Domain API, Data zone. Data zone (in Application network): Domain data, Audit log. Main path: Teacher, parent → Browser → Reverse proxy → Web / BFF → Domain API → Domain data. Most connected: Domain API (5 connections). Nothing leads into Teacher, parent and School records. Teacher, parent (person): connects to Browser (uses). Browser (frontend): connects to Reverse proxy (calls, via HTTPS). School records (external system): connects to Domain API (master data, via REST/JSON). Reverse proxy (security): connects to Web / BFF (forwards). Web / BFF (service): connects to Sign-in (signs in, via OIDC) and Domain API (queries, via user context). Sign-in (security): no outgoing connection. Domain API (service): connects to Domain data (reads, writes, via SQL/TLS), Audit log (logs) and SIEM / SOC (events, via Syslog). Domain data (database): connects to Backup (backs up). Audit log (database): no outgoing connection. Backup (storage): no outgoing connection. SIEM / SOC (external system): no outgoing connection.Data centerApplication networkData zoneTeacher, parent → Browser: usesBrowser → Reverse proxy: calls [HTTPS]Reverse proxy → Web / BFF: forwardsWeb / BFF → Sign-in: signs in [OIDC]Web / BFF → Domain API: queries [user context]Domain API → Domain data: reads, writes [SQL/TLS]Domain API → Audit log: logsSchool records → Domain API: master data [REST/JSON]Domain API → SIEM / SOC: events [Syslog]Domain data → Backup: backs upusescalls[HTTPS]forwardssigns in[OIDC]queries[user context]reads, writes[SQL/TLS]logsmaster data[REST/JSON]events[Syslog]backs upTeacher, parentTeacher,parentBrowserBrowserReverse proxy – TLS 1.3, WAFReverse proxyTLS 1.3, WAFWeb / BFF – SvelteKitWeb / BFFSvelteKitSign-in – Keycloak, OIDCSign-inKeycloak, OIDCDomain API – RustDomain APIRustDomain data – Postgres, RLS per tenantDomain dataPostgres, RLSper tenantAudit log – append onlyAudit logappend onlyBackup – second siteBackupsecond siteSchool records – legacy systemSchoolrecordslegacy systemSIEM / SOCSIEM / SOC

Source: Illustrative reference architecture

Show chart data
Data for Multi-tenant line-of-business application
ComponentKindBoundaryConnects to
Teacher, parentpersonBrowser (uses)
BrowserfrontendReverse proxy (calls, via HTTPS)
School recordsexternal systemDomain API (master data, via REST/JSON)
Reverse proxysecurityData centerWeb / BFF (forwards)
Web / BFFserviceData center › Application networkSign-in (signs in, via OIDC), Domain API (queries, via user context)
Sign-insecurityData center › Application network
Domain APIserviceData center › Application networkDomain data (reads, writes, via SQL/TLS), Audit log (logs), SIEM / SOC (events, via Syslog)
Domain datadatabaseData center › Application network › Data zoneBackup (backs up)
Audit logdatabaseData center › Application network › Data zone
Backupstorage
SIEM / SOCexternal system
  • Architecture diagram with a main path
  • Show the path of a request through a system

Tenant architecture: the sign-in and data path

examples/shop-focus.jsonDetail: Tenant architecture: the sign-in and data path →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Tenant architecture: the sign-in and data path",
  "source": "Illustrative reference architecture",
  "width": 1200,
  "height": 1144,
  "architecture": {
    "boundaries": [
      {
        "id": "rz",
        "label": "Data center"
      },
      {
        "id": "netz",
        "label": "Application network",
        "in": "rz"
      },
      {
        "id": "daten",
        "label": "Data zone",
        "in": "netz"
      }
    ],
    "components": [
      {
        "id": "nutzer",
        "label": "Teacher, parent",
        "kind": "person"
      },
      {
        "id": "browser",
        "label": "Browser",
        "kind": "frontend"
      },
      {
        "id": "proxy",
        "label": "Reverse proxy",
        "sublabel": "TLS 1.3, WAF",
        "kind": "security",
        "in": "rz"
      },
      {
        "id": "web",
        "label": "Web / BFF",
        "sublabel": "SvelteKit",
        "in": "netz"
      },
      {
        "id": "idp",
        "label": "Sign-in",
        "sublabel": "Keycloak, OIDC",
        "kind": "security",
        "in": "netz"
      },
      {
        "id": "api",
        "label": "Domain API",
        "sublabel": "Rust",
        "in": "netz"
      },
      {
        "id": "db",
        "label": "Domain data",
        "sublabel": "Postgres, RLS per tenant",
        "kind": "database",
        "in": "daten"
      },
      {
        "id": "audit",
        "label": "Audit log",
        "sublabel": "append only",
        "kind": "database",
        "in": "daten"
      },
      {
        "id": "backup",
        "label": "Backup",
        "sublabel": "second site",
        "kind": "storage"
      },
      {
        "id": "alt",
        "label": "School records",
        "sublabel": "legacy system",
        "kind": "external"
      },
      {
        "id": "soc",
        "label": "SIEM / SOC",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "nutzer",
        "to": "browser",
        "label": "uses"
      },
      {
        "from": "browser",
        "to": "proxy",
        "label": "calls",
        "technology": "HTTPS"
      },
      {
        "from": "proxy",
        "to": "web",
        "label": "forwards"
      },
      {
        "from": "web",
        "to": "idp",
        "label": "signs in",
        "technology": "OIDC"
      },
      {
        "from": "web",
        "to": "api",
        "label": "queries",
        "technology": "user context"
      },
      {
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL/TLS"
      },
      {
        "from": "api",
        "to": "audit",
        "label": "logs"
      },
      {
        "from": "alt",
        "to": "api",
        "label": "master data",
        "technology": "REST/JSON"
      },
      {
        "from": "api",
        "to": "soc",
        "label": "events",
        "technology": "Syslog",
        "dash": "dashed"
      },
      {
        "from": "db",
        "to": "backup",
        "label": "backs up",
        "dash": "dashed"
      }
    ],
    "mainPath": [
      "nutzer",
      "browser",
      "proxy",
      "web",
      "api",
      "db"
    ],
    "orientation": "portrait"
  },
  "mobile": {
    "width": 468,
    "height": 1192
  },
  "emphasis": {
    "nodes": [
      "idp"
    ],
    "path": [
      "web",
      "api",
      "db"
    ]
  },
  "legend": "auto"
}
Focus
Tenant architecture: the sign-in and data path
Tenant architecture: the sign-in and data pathArchitecture diagram with 11 components and 10 connections in 3 boundaries. Data center: Reverse proxy, Application network. Application network (in Data center): Web / BFF, Sign-in, Domain API, Data zone. Data zone (in Application network): Domain data, Audit log. Main path: Teacher, parent → Browser → Reverse proxy → Web / BFF → Domain API → Domain data. Most connected: Domain API (5 connections). Nothing leads into Teacher, parent and School records. Teacher, parent (person): connects to Browser (uses). Browser (frontend): connects to Reverse proxy (calls, via HTTPS). School records (external system): connects to Domain API (master data, via REST/JSON). Reverse proxy (security): connects to Web / BFF (forwards). Web / BFF (service): connects to Sign-in (signs in, via OIDC) and Domain API (queries, via user context). Sign-in (security): no outgoing connection. Domain API (service): connects to Domain data (reads, writes, via SQL/TLS), Audit log (logs) and SIEM / SOC (events, via Syslog). Domain data (database): connects to Backup (backs up). Audit log (database): no outgoing connection. Backup (storage): no outgoing connection. SIEM / SOC (external system): no outgoing connection. Emphasized: Sign-in. Emphasized path: Web / BFF → Domain API → Domain data. Legend: person, frontend, service, database, storage, security, external system, emphasized, solid line, dashed line, emphasized path.Data centerApplication networkData zoneTeacher, parent → Browser: usesBrowser → Reverse proxy: calls [HTTPS]Reverse proxy → Web / BFF: forwardsWeb / BFF → Sign-in: signs in [OIDC]Web / BFF → Domain API: queries [user context]Domain API → Domain data: reads, writes [SQL/TLS]Domain API → Audit log: logsSchool records → Domain API: master data [REST/JSON]Domain API → SIEM / SOC: events [Syslog]Domain data → Backup: backs upusescalls[HTTPS]forwardssigns in[OIDC]queries[user context]reads, writes[SQL/TLS]logsmaster data[REST/JSON]events[Syslog]backs upTeacher, parentTeacher, parentBrowserBrowserReverse proxy – TLS 1.3, WAFReverse proxyTLS 1.3, WAFWeb / BFF – SvelteKitWeb / BFFSvelteKitSign-in – Keycloak, OIDCSign-inKeycloak, OIDCDomain API – RustDomain APIRustDomain data – Postgres, RLS per tenantDomain dataPostgres, RLS per tenantAudit log – append onlyAudit logappend onlyBackup – second siteBackupsecond siteSchool records – legacy systemSchool recordslegacy systemSIEM / SOCSIEM / SOCPersonFrontendServiceDatabaseStorageSecurityExternal systemEmphasizedSolid lineDashed lineEmphasized path
Tenant architecture: the sign-in and data pathArchitecture diagram with 11 components and 10 connections in 3 boundaries. Data center: Reverse proxy, Application network. Application network (in Data center): Web / BFF, Sign-in, Domain API, Data zone. Data zone (in Application network): Domain data, Audit log. Main path: Teacher, parent → Browser → Reverse proxy → Web / BFF → Domain API → Domain data. Most connected: Domain API (5 connections). Nothing leads into Teacher, parent and School records. Teacher, parent (person): connects to Browser (uses). Browser (frontend): connects to Reverse proxy (calls, via HTTPS). School records (external system): connects to Domain API (master data, via REST/JSON). Reverse proxy (security): connects to Web / BFF (forwards). Web / BFF (service): connects to Sign-in (signs in, via OIDC) and Domain API (queries, via user context). Sign-in (security): no outgoing connection. Domain API (service): connects to Domain data (reads, writes, via SQL/TLS), Audit log (logs) and SIEM / SOC (events, via Syslog). Domain data (database): connects to Backup (backs up). Audit log (database): no outgoing connection. Backup (storage): no outgoing connection. SIEM / SOC (external system): no outgoing connection. Emphasized: Sign-in. Emphasized path: Web / BFF → Domain API → Domain data. Legend: person, frontend, service, database, storage, security, external system, emphasized, solid line, dashed line, emphasized path.Data centerApplication networkData zoneTeacher, parent → Browser: usesBrowser → Reverse proxy: calls [HTTPS]Reverse proxy → Web / BFF: forwardsWeb / BFF → Sign-in: signs in [OIDC]Web / BFF → Domain API: queries [user context]Domain API → Domain data: reads, writes [SQL/TLS]Domain API → Audit log: logsSchool records → Domain API: master data [REST/JSON]Domain API → SIEM / SOC: events [Syslog]Domain data → Backup: backs upusescalls[HTTPS]forwardssigns in[OIDC]queries[user context]reads, writes[SQL/TLS]logsmaster data[REST/JSON]events[Syslog]backs upTeacher, parentTeacher,parentBrowserBrowserReverse proxy – TLS 1.3, WAFReverse proxyTLS 1.3, WAFWeb / BFF – SvelteKitWeb / BFFSvelteKitSign-in – Keycloak, OIDCSign-inKeycloak, OIDCDomain API – RustDomain APIRustDomain data – Postgres, RLS per tenantDomain dataPostgres, RLSper tenantAudit log – append onlyAudit logappend onlyBackup – second siteBackupsecond siteSchool records – legacy systemSchoolrecordslegacy systemSIEM / SOCSIEM / SOCPersonFrontendServiceDatabaseStorageSecurityExternal systemEmphasizedSolid lineDashed lineEmphasized path

Source: Illustrative reference architecture

Show chart data
Data for Tenant architecture: the sign-in and data path
ComponentKindBoundaryConnects toEmphasis
Teacher, parentpersonBrowser (uses)
BrowserfrontendReverse proxy (calls, via HTTPS)
School recordsexternal systemDomain API (master data, via REST/JSON)
Reverse proxysecurityData centerWeb / BFF (forwards)
Web / BFFserviceData center › Application networkSign-in (signs in, via OIDC), Domain API (queries, via user context)on emphasized path
Sign-insecurityData center › Application networkemphasized
Domain APIserviceData center › Application networkDomain data (reads, writes, via SQL/TLS), Audit log (logs), SIEM / SOC (events, via Syslog)on emphasized path
Domain datadatabaseData center › Application network › Data zoneBackup (backs up)on emphasized path
Audit logdatabaseData center › Application network › Data zone
Backupstorage
SIEM / SOCexternal system
  • Architecture diagram with emphasis and a legend
  • Point at a component and the path of a request

Checkout: the calls in order

examples/checkout-calls.jsonDetail: Checkout: the calls in order →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Checkout: the calls in order",
  "source": "Architecture handbook, runtime view",
  "width": 900,
  "height": 640,
  "architecture": {
    "components": [
      {
        "id": "customer",
        "label": "Customer",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Web shop",
        "kind": "frontend"
      },
      {
        "id": "api",
        "label": "Shop API"
      },
      {
        "id": "pay",
        "label": "Payment provider",
        "kind": "external"
      },
      {
        "id": "db",
        "label": "Orders",
        "kind": "database"
      },
      {
        "id": "mail",
        "label": "Mail service",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "customer",
        "to": "web",
        "label": "confirms the cart",
        "step": 1
      },
      {
        "from": "web",
        "to": "api",
        "label": "places the order",
        "technology": "HTTPS",
        "step": 2
      },
      {
        "from": "api",
        "to": "pay",
        "label": "charges",
        "technology": "HTTPS",
        "step": 3
      },
      {
        "from": "api",
        "to": "db",
        "label": "stores the order",
        "technology": "SQL",
        "step": 4
      },
      {
        "from": "api",
        "to": "mail",
        "label": "sends the receipt",
        "step": 5,
        "dash": "dashed"
      }
    ],
    "mainPath": [
      "customer",
      "web",
      "api",
      "db"
    ],
    "orientation": "portrait"
  }
}
Focus
Checkout: the calls in order
Checkout: the calls in orderArchitecture diagram with 6 components and 5 connections. Main path: Customer → Web shop → Shop API → Orders. Most connected: Shop API (4 connections). Nothing leads into Customer. Nothing leads out of Payment provider, Orders and Mail service. Steps: 1 Customer → Web shop (confirms the cart); 2 Web shop → Shop API (places the order); 3 Shop API → Payment provider (charges); 4 Shop API → Orders (stores the order); 5 Shop API → Mail service (sends the receipt). Customer (person): connects to Web shop (step 1, confirms the cart). Web shop (frontend): connects to Shop API (step 2, places the order, via HTTPS). Shop API (service): connects to Payment provider (step 3, charges, via HTTPS), Orders (step 4, stores the order, via SQL) and Mail service (step 5, sends the receipt). Payment provider (external system): no outgoing connection. Orders (database): no outgoing connection. Mail service (external system): no outgoing connection.Customer → Web shop: 1. confirms the cartWeb shop → Shop API: 2. places the order [HTTPS]Shop API → Payment provider: 3. charges [HTTPS]Shop API → Orders: 4. stores the order [SQL]Shop API → Mail service: 5. sends the receipt1. confirms the cart2. places the order[HTTPS]3. charges[HTTPS]4. stores the order[SQL]5. sends the receiptCustomerCustomerWeb shopWeb shopShop APIShop APIPayment providerPayment providerOrdersOrdersMail serviceMail service

Source: Architecture handbook, runtime view

Show chart data
Data for Checkout: the calls in order
ComponentKindConnects to
CustomerpersonWeb shop (step 1, confirms the cart)
Web shopfrontendShop API (step 2, places the order, via HTTPS)
Shop APIservicePayment provider (step 3, charges, via HTTPS), Orders (step 4, stores the order, via SQL), Mail service (step 5, sends the receipt)
Payment providerexternal system
Ordersdatabase
Mail serviceexternal system
  • Architecture diagram with numbered steps
  • Show the order of calls through a system

Web shop: deployment

examples/shop-deployment.jsonDetail: Web shop: deployment →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Web shop: deployment",
  "theme": "blueprint",
  "source": "Operations handbook, production",
  "width": 1180,
  "height": 520,
  "architecture": {
    "boundaries": [
      {
        "id": "cluster",
        "label": "Production cluster"
      },
      {
        "id": "app-node",
        "label": "Node app-1",
        "in": "cluster"
      },
      {
        "id": "data-node",
        "label": "Node data-1",
        "in": "cluster"
      }
    ],
    "components": [
      {
        "id": "user",
        "label": "Customer",
        "kind": "person"
      },
      {
        "id": "lb",
        "label": "Load balancer",
        "kind": "node",
        "in": "cluster"
      },
      {
        "id": "shop",
        "label": "shop-api:2.4",
        "sublabel": "container image",
        "kind": "artifact",
        "in": "app-node"
      },
      {
        "id": "worker",
        "label": "order-worker:2.4",
        "sublabel": "container image",
        "kind": "artifact",
        "in": "app-node"
      },
      {
        "id": "pg",
        "label": "postgres:16",
        "sublabel": "container image",
        "kind": "artifact",
        "in": "data-node"
      },
      {
        "id": "vol",
        "label": "Data volume",
        "kind": "storage",
        "in": "data-node"
      }
    ],
    "connections": [
      {
        "from": "user",
        "to": "lb",
        "technology": "HTTPS"
      },
      {
        "from": "lb",
        "to": "shop",
        "technology": "HTTP"
      },
      {
        "from": "shop",
        "to": "pg",
        "technology": "SQL/TLS"
      },
      {
        "from": "worker",
        "to": "pg",
        "technology": "SQL/TLS"
      },
      {
        "from": "pg",
        "to": "vol",
        "label": "writes"
      }
    ]
  }
}
Focus
Web shop: deployment
Web shop: deploymentArchitecture diagram with 6 components and 5 connections in 3 boundaries. Production cluster: Load balancer, Node app-1, Node data-1. Node app-1 (in Production cluster): shop-api:2.4, order-worker:2.4. Node data-1 (in Production cluster): postgres:16, Data volume. Most connected: postgres:16 (3 connections). Nothing leads into Customer and order-worker:2.4. Nothing leads out of Data volume. Bottleneck: shop-api:2.4; without it the diagram falls apart. Customer (person): connects to Load balancer (via HTTPS). Load balancer (node): connects to shop-api:2.4 (via HTTP). shop-api:2.4 (artifact): connects to postgres:16 (via SQL/TLS). order-worker:2.4 (artifact): connects to postgres:16 (via SQL/TLS). postgres:16 (artifact): connects to Data volume (writes). Data volume (storage): no outgoing connection.Production clusterNode data-1Node app-1Customer → Load balancer: [HTTPS]Load balancer → shop-api:2.4: [HTTP]shop-api:2.4 → postgres:16: [SQL/TLS]order-worker:2.4 → postgres:16: [SQL/TLS]postgres:16 → Data volume: writes[HTTPS][HTTP][SQL/TLS][SQL/TLS]writesCustomerCustomerLoad balancerLoad balancershop-api:2.4 – container imageshop-api:2.4container imageorder-worker:2.4 – container imageorder-worker:2.4container imagepostgres:16 – container imagepostgres:16container imageData volumeData volume

Source: Operations handbook, production

Show chart data
Data for Web shop: deployment
ComponentKindBoundaryConnects to
CustomerpersonLoad balancer (via HTTPS)
Load balancernodeProduction clustershop-api:2.4 (via HTTP)
shop-api:2.4artifactProduction cluster › Node app-1postgres:16 (via SQL/TLS)
order-worker:2.4artifactProduction cluster › Node app-1postgres:16 (via SQL/TLS)
postgres:16artifactProduction cluster › Node data-1Data volume (writes)
Data volumestorageProduction cluster › Node data-1
  • Deployment diagram in the blueprint look
  • Show what runs where

Requests per second between the services of a web shop

examples/request-volume.jsonDetail: Requests per second between the services of a web shop →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Requests per second between the services of a web shop",
  "source": "Load test, peak hour",
  "width": 820,
  "height": 580,
  "architecture": {
    "boundaries": [
      {
        "id": "cluster",
        "label": "Cluster"
      }
    ],
    "components": [
      {
        "id": "web",
        "label": "Web shop",
        "kind": "frontend"
      },
      {
        "id": "gateway",
        "label": "API gateway",
        "in": "cluster"
      },
      {
        "id": "catalog",
        "label": "Catalog",
        "in": "cluster"
      },
      {
        "id": "cart",
        "label": "Cart",
        "in": "cluster"
      },
      {
        "id": "checkout",
        "label": "Checkout",
        "in": "cluster"
      },
      {
        "id": "search",
        "label": "Search index",
        "kind": "database",
        "in": "cluster"
      },
      {
        "id": "db",
        "label": "Orders",
        "kind": "database",
        "in": "cluster"
      },
      {
        "id": "pay",
        "label": "Payment provider",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "web",
        "to": "gateway",
        "label": "1,200/s",
        "weight": 1200
      },
      {
        "from": "gateway",
        "to": "catalog",
        "label": "820/s",
        "weight": 820
      },
      {
        "from": "gateway",
        "to": "cart",
        "label": "310/s",
        "weight": 310
      },
      {
        "from": "gateway",
        "to": "checkout",
        "label": "70/s",
        "weight": 70
      },
      {
        "from": "catalog",
        "to": "search",
        "label": "640/s",
        "weight": 640
      },
      {
        "from": "cart",
        "to": "db",
        "label": "150/s",
        "weight": 150
      },
      {
        "from": "checkout",
        "to": "db",
        "label": "60/s",
        "weight": 60
      },
      {
        "from": "checkout",
        "to": "pay",
        "label": "35/s",
        "weight": 35
      }
    ],
    "mainPath": {
      "from": "web",
      "to": "pay"
    }
  }
}
Focus
Requests per second between the services of a web shop
Requests per second between the services of a web shopArchitecture diagram with 8 components and 8 connections in 1 boundary. Cluster: API gateway, Catalog, Cart, Checkout, Search index, Orders. Main path: Web shop → API gateway → Checkout → Payment provider. Most connected: API gateway (4 connections). Nothing leads into Web shop. Nothing leads out of Search index, Orders and Payment provider. Bottleneck: API gateway; without it the diagram falls apart. Heaviest connection: Web shop → API gateway (1200). Web shop (frontend): connects to API gateway (1,200/s, weight 1200). API gateway (service): connects to Catalog (820/s, weight 820), Cart (310/s, weight 310) and Checkout (70/s, weight 70). Catalog (service): connects to Search index (640/s, weight 640). Cart (service): connects to Orders (150/s, weight 150). Checkout (service): connects to Orders (60/s, weight 60) and Payment provider (35/s, weight 35). Search index (database): no outgoing connection. Orders (database): no outgoing connection. Payment provider (external system): no outgoing connection.ClusterWeb shop → API gateway: 1,200/sAPI gateway → Catalog: 820/sAPI gateway → Cart: 310/sAPI gateway → Checkout: 70/sCatalog → Search index: 640/sCart → Orders: 150/sCheckout → Orders: 60/sCheckout → Payment provider: 35/s1,200/s820/s310/s70/s640/s150/s60/s35/sWeb shopWeb shopAPI gatewayAPI gatewayCatalogCatalogCartCartCheckoutCheckoutSearch indexSearch indexOrdersOrdersPayment providerPayment provider

Source: Load test, peak hour

Show chart data
Data for Requests per second between the services of a web shop
ComponentKindBoundaryConnects to
Web shopfrontendAPI gateway (1,200/s, weight 1200)
API gatewayserviceClusterCatalog (820/s, weight 820), Cart (310/s, weight 310), Checkout (70/s, weight 70)
CatalogserviceClusterSearch index (640/s, weight 640)
CartserviceClusterOrders (150/s, weight 150)
CheckoutserviceClusterOrders (60/s, weight 60), Payment provider (35/s, weight 35)
Search indexdatabaseCluster
OrdersdatabaseCluster
Payment providerexternal system
  • Architecture diagram with weighted connections
  • Show where the load goes

Order platform and its data stores

examples/data-tier.jsonDetail: Order platform and its data stores →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Order platform and its data stores",
  "source": "Illustrative reference architecture",
  "width": 1520,
  "height": 560,
  "architecture": {
    "boundaries": [
      {
        "id": "platform",
        "label": "Order platform"
      },
      {
        "id": "data",
        "label": "Data tier",
        "in": "platform"
      }
    ],
    "components": [
      {
        "id": "shopper",
        "label": "Shopper",
        "kind": "person"
      },
      {
        "id": "app",
        "label": "Shop app",
        "kind": "frontend"
      },
      {
        "id": "gateway",
        "label": "API gateway",
        "in": "platform"
      },
      {
        "id": "catalog",
        "label": "Catalog service",
        "in": "platform"
      },
      {
        "id": "orders",
        "label": "Order service",
        "in": "platform"
      },
      {
        "id": "queue",
        "label": "Order events",
        "kind": "queue",
        "in": "platform"
      },
      {
        "id": "billing",
        "label": "Billing worker",
        "in": "platform"
      },
      {
        "id": "catalogDb",
        "label": "Catalog",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "data"
      },
      {
        "id": "ordersDb",
        "label": "Orders",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "data"
      },
      {
        "id": "billingDb",
        "label": "Invoices",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "data"
      }
    ],
    "connections": [
      {
        "from": "shopper",
        "to": "app",
        "label": "orders"
      },
      {
        "from": "app",
        "to": "gateway",
        "technology": "HTTPS"
      },
      {
        "from": "gateway",
        "to": "catalog",
        "label": "browse"
      },
      {
        "from": "gateway",
        "to": "orders",
        "label": "checkout"
      },
      {
        "from": "catalog",
        "to": "catalogDb",
        "technology": "SQL"
      },
      {
        "from": "orders",
        "to": "ordersDb",
        "technology": "SQL"
      },
      {
        "from": "orders",
        "to": "queue",
        "label": "publishes"
      },
      {
        "from": "queue",
        "to": "billing",
        "label": "delivers"
      },
      {
        "from": "billing",
        "to": "billingDb",
        "technology": "SQL"
      }
    ],
    "mainPath": [
      "shopper",
      "app",
      "gateway",
      "orders",
      "queue",
      "billing"
    ],
    "sameRank": [
      [
        "catalogDb",
        "ordersDb",
        "billingDb"
      ]
    ]
  },
  "mobile": {
    "width": 440,
    "height": 1100
  }
}
Focus
Order platform and its data stores
Order platform and its data storesArchitecture diagram with 10 components and 9 connections in 2 boundaries. Order platform: API gateway, Catalog service, Order service, Order events, Billing worker, Data tier. Data tier (in Order platform): Catalog, Orders, Invoices. Main path: Shopper → Shop app → API gateway → Order service → Order events → Billing worker. Most connected: API gateway and Order service (3 connections each). Nothing leads into Shopper. Nothing leads out of Catalog, Orders and Invoices. Shopper (person): connects to Shop app (orders). Shop app (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Catalog service (browse) and Order service (checkout). Catalog service (service): connects to Catalog (via SQL). Order service (service): connects to Orders (via SQL) and Order events (publishes). Order events (queue): connects to Billing worker (delivers). Billing worker (service): connects to Invoices (via SQL). Catalog (database): no outgoing connection. Invoices (database): no outgoing connection. Orders (database): no outgoing connection.Order platformData tierShopper → Shop app: ordersShop app → API gateway: [HTTPS]API gateway → Catalog service: browseAPI gateway → Order service: checkoutCatalog service → Catalog: [SQL]Order service → Orders: [SQL]Order service → Order events: publishesOrder events → Billing worker: deliversBilling worker → Invoices: [SQL]orders[HTTPS]browsecheckout[SQL][SQL]publishesdelivers[SQL]ShopperShopperShop appShop appAPI gatewayAPI gatewayCatalog serviceCatalog serviceOrder serviceOrder serviceOrder eventsOrder eventsBilling workerBilling workerCatalog – PostgresCatalogPostgresOrders – PostgresOrdersPostgresInvoices – PostgresInvoicesPostgres
Order platform and its data storesArchitecture diagram with 10 components and 9 connections in 2 boundaries. Order platform: API gateway, Catalog service, Order service, Order events, Billing worker, Data tier. Data tier (in Order platform): Catalog, Orders, Invoices. Main path: Shopper → Shop app → API gateway → Order service → Order events → Billing worker. Most connected: API gateway and Order service (3 connections each). Nothing leads into Shopper. Nothing leads out of Catalog, Orders and Invoices. Shopper (person): connects to Shop app (orders). Shop app (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Catalog service (browse) and Order service (checkout). Catalog service (service): connects to Catalog (via SQL). Order service (service): connects to Orders (via SQL) and Order events (publishes). Order events (queue): connects to Billing worker (delivers). Billing worker (service): connects to Invoices (via SQL). Catalog (database): no outgoing connection. Invoices (database): no outgoing connection. Orders (database): no outgoing connection.Order platformData tierShopper → Shop app: ordersShop app → API gateway: [HTTPS]API gateway → Catalog service: browseAPI gateway → Order service: checkoutCatalog service → Catalog: [SQL]Order service → Orders: [SQL]Order service → Order events: publishesOrder events → Billing worker: deliversBilling worker → Invoices: [SQL]orders[HTTPS]browsecheckout[SQL][SQL]publishesdelivers[SQL]ShopperShopperShop appShop appAPI gatewayAPI gatewayCatalog serviceCatalogserviceOrder serviceOrder serviceOrder eventsOrder eventsBilling workerBilling workerCatalog – PostgresCatalogPostgresOrders – PostgresOrdersPostgresInvoices – PostgresInvoicesPostgres

Source: Illustrative reference architecture

Show chart data
Data for Order platform and its data stores
ComponentKindBoundaryConnects to
ShopperpersonShop app (orders)
Shop appfrontendAPI gateway (via HTTPS)
API gatewayserviceOrder platformCatalog service (browse), Order service (checkout)
Catalog serviceserviceOrder platformCatalog (via SQL)
Order serviceserviceOrder platformOrders (via SQL), Order events (publishes)
Order eventsqueueOrder platformBilling worker (delivers)
Billing workerserviceOrder platformInvoices (via SQL)
CatalogdatabaseOrder platform › Data tier
InvoicesdatabaseOrder platform › Data tier
OrdersdatabaseOrder platform › Data tier
  • Architecture diagram with a shared rank (phone variant)
  • Line up what belongs to one tier

Gateway fan-out with shared logging

examples/service-fan-out.jsonDetail: Gateway fan-out with shared logging →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Gateway fan-out with shared logging",
  "source": "Platform handbook, request path",
  "width": 960,
  "height": 640,
  "architecture": {
    "boundaries": [
      {
        "id": "cluster",
        "label": "Cluster"
      },
      {
        "id": "services",
        "label": "Services",
        "in": "cluster"
      },
      {
        "id": "ops",
        "label": "Operations"
      }
    ],
    "components": [
      {
        "id": "client",
        "label": "Client",
        "kind": "frontend"
      },
      {
        "id": "gateway",
        "label": "Gateway",
        "sublabel": "routes requests",
        "in": "cluster"
      },
      {
        "id": "auth",
        "label": "Sign-in",
        "kind": "security",
        "in": "cluster"
      },
      {
        "id": "catalog",
        "label": "Catalog",
        "in": "services"
      },
      {
        "id": "search",
        "label": "Search",
        "in": "services"
      },
      {
        "id": "cart",
        "label": "Cart",
        "in": "services"
      },
      {
        "id": "orders",
        "label": "Orders",
        "in": "services"
      },
      {
        "id": "logs",
        "label": "Log store",
        "kind": "storage",
        "in": "ops"
      }
    ],
    "connections": [
      {
        "from": "client",
        "to": "gateway",
        "label": "calls",
        "technology": "HTTPS"
      },
      {
        "from": "gateway",
        "to": "auth",
        "label": "checks token"
      },
      {
        "from": "gateway",
        "to": "catalog"
      },
      {
        "from": "gateway",
        "to": "search"
      },
      {
        "from": "gateway",
        "to": "cart"
      },
      {
        "from": "gateway",
        "to": "orders"
      },
      {
        "from": "catalog",
        "to": "logs",
        "dash": "dashed"
      },
      {
        "from": "search",
        "to": "logs",
        "dash": "dashed"
      },
      {
        "from": "cart",
        "to": "logs",
        "dash": "dashed"
      },
      {
        "from": "orders",
        "to": "logs",
        "dash": "dashed"
      }
    ],
    "mainPath": [
      "client",
      "gateway",
      "orders"
    ],
    "sharedTrunks": true
  }
}
Focus
Gateway fan-out with shared logging
Gateway fan-out with shared loggingArchitecture diagram with 8 components and 10 connections in 3 boundaries. Cluster: Gateway, Sign-in, Services. Services (in Cluster): Catalog, Search, Cart, Orders. Operations: Log store. Main path: Client → Gateway → Orders. Most connected: Gateway (6 connections). Nothing leads into Client. Nothing leads out of Sign-in and Log store. Client (frontend): connects to Gateway (calls, via HTTPS). Gateway (service): connects to Sign-in (checks token), Catalog, Search, Cart and Orders. Sign-in (security): no outgoing connection. Catalog (service): connects to Log store. Search (service): connects to Log store. Cart (service): connects to Log store. Orders (service): connects to Log store. Log store (storage): no outgoing connection.OperationsClusterServicesClient → Gateway: calls [HTTPS]Gateway → Sign-in: checks tokenGateway → CatalogGateway → SearchGateway → CartGateway → OrdersCatalog → Log storeSearch → Log storeCart → Log storeOrders → Log storecalls[HTTPS]checks tokenClientClientGateway – routes requestsGatewayroutes requestsSign-inSign-inCatalogCatalogSearchSearchCartCartOrdersOrdersLog storeLog store

Source: Platform handbook, request path

Show chart data
Data for Gateway fan-out with shared logging
ComponentKindBoundaryConnects to
ClientfrontendGateway (calls, via HTTPS)
GatewayserviceClusterSign-in (checks token), Catalog, Search, Cart, Orders
Sign-insecurityCluster
CatalogserviceCluster › ServicesLog store
SearchserviceCluster › ServicesLog store
CartserviceCluster › ServicesLog store
OrdersserviceCluster › ServicesLog store
Log storestorageOperations
  • Architecture diagram with shared trunks
  • Draw a fan-out without a tangle

Web shop on one cloud region, with symbols

examples/shop-symbols.jsonDetail: Web shop on one cloud region, with symbols →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Web shop on one cloud region, with symbols",
  "source": "Architecture handbook, overview",
  "width": 1840,
  "height": 600,
  "architecture": {
    "boundaries": [
      {
        "id": "region",
        "label": "Cloud region eu-central-1"
      },
      {
        "id": "network",
        "label": "Private network",
        "in": "region"
      },
      {
        "id": "data",
        "label": "Data zone",
        "in": "network"
      }
    ],
    "components": [
      {
        "id": "customer",
        "label": "Customer",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Web shop",
        "kind": "frontend",
        "symbol": "browser"
      },
      {
        "id": "cdn",
        "label": "Content network",
        "kind": "external",
        "symbol": "cdn"
      },
      {
        "id": "api",
        "label": "Shop API",
        "sublabel": "Node.js",
        "in": "network",
        "symbol": "container"
      },
      {
        "id": "cache",
        "label": "Session cache",
        "sublabel": "Redis",
        "kind": "cache",
        "in": "network",
        "symbol": "cache"
      },
      {
        "id": "events",
        "label": "Order events",
        "kind": "queue",
        "in": "network",
        "symbol": "message-broker"
      },
      {
        "id": "worker",
        "label": "Order worker",
        "in": "network",
        "symbol": "function"
      },
      {
        "id": "db",
        "label": "Orders",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "data"
      },
      {
        "id": "files",
        "label": "Invoices",
        "kind": "storage",
        "in": "region",
        "symbol": "object-storage"
      },
      {
        "id": "pay",
        "label": "Payment provider",
        "kind": "external",
        "symbol": "cloud"
      },
      {
        "id": "auth",
        "label": "Sign-in",
        "kind": "security",
        "in": "network",
        "symbol": "identity"
      }
    ],
    "connections": [
      {
        "from": "customer",
        "to": "web",
        "label": "browses"
      },
      {
        "from": "web",
        "to": "cdn",
        "label": "loads assets",
        "technology": "HTTPS",
        "dash": "dashed"
      },
      {
        "from": "web",
        "to": "api",
        "label": "calls",
        "technology": "HTTPS/JSON"
      },
      {
        "from": "api",
        "to": "cache",
        "label": "sessions",
        "technology": "RESP"
      },
      {
        "from": "api",
        "to": "auth",
        "label": "checks token",
        "technology": "OIDC"
      },
      {
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL/TLS"
      },
      {
        "from": "api",
        "to": "events",
        "label": "publishes",
        "technology": "AMQP"
      },
      {
        "from": "events",
        "to": "worker",
        "label": "delivers"
      },
      {
        "from": "worker",
        "to": "pay",
        "label": "charges",
        "technology": "HTTPS"
      },
      {
        "from": "worker",
        "to": "files",
        "label": "stores PDF",
        "technology": "S3 API"
      },
      {
        "from": "worker",
        "to": "db",
        "label": "updates",
        "technology": "SQL/TLS"
      }
    ],
    "mainPath": [
      "customer",
      "web",
      "api",
      "events",
      "worker",
      "pay"
    ]
  }
}
Focus
Web shop on one cloud region, with symbols
Web shop on one cloud region, with symbolsArchitecture diagram with 11 components and 11 connections in 3 boundaries. Cloud region eu-central-1: Invoices, Private network. Private network (in Cloud region eu-central-1): Shop API, Session cache, Order events, Order worker, Sign-in, Data zone. Data zone (in Private network): Orders. Main path: Customer → Web shop → Shop API → Order events → Order worker → Payment provider. Most connected: Shop API (5 connections). Nothing leads into Customer. Bottleneck: Shop API; without it the diagram falls apart. Customer (person): connects to Web shop (browses). Web shop (frontend, web browser): connects to Content network (loads assets, via HTTPS) and Shop API (calls, via HTTPS/JSON). Shop API (service, container): connects to Session cache (sessions, via RESP), Sign-in (checks token, via OIDC), Orders (reads, writes, via SQL/TLS) and Order events (publishes, via AMQP). Content network (external system, content delivery network): no outgoing connection. Session cache (in-memory cache): no outgoing connection. Order events (queue, message broker): connects to Order worker (delivers). Sign-in (security, identity provider): no outgoing connection. Order worker (service, serverless function): connects to Payment provider (charges, via HTTPS), Invoices (stores PDF, via S3 API) and Orders (updates, via SQL/TLS). Orders (database): no outgoing connection. Invoices (object storage): no outgoing connection. Payment provider (external system, cloud service): no outgoing connection.Cloud region eu-central-1Private networkData zoneCustomer → Web shop: browsesWeb shop → Content network: loads assets [HTTPS]Web shop → Shop API: calls [HTTPS/JSON]Shop API → Session cache: sessions [RESP]Shop API → Sign-in: checks token [OIDC]Shop API → Orders: reads, writes [SQL/TLS]Shop API → Order events: publishes [AMQP]Order events → Order worker: deliversOrder worker → Payment provider: charges [HTTPS]Order worker → Invoices: stores PDF [S3 API]Order worker → Orders: updates [SQL/TLS]browsesloads assets[HTTPS]calls[HTTPS/JSON]sessions[RESP]checks token[OIDC]reads, writes[SQL/TLS]publishes[AMQP]deliverscharges[HTTPS]stores PDF[S3 API]updates[SQL/TLS]CustomerCustomerWeb shopWeb shopContent networkContent networkShop API – Node.jsShop APINode.jsSession cache – RedisSession cacheRedisOrder eventsOrder eventsOrder workerOrder workerOrders – PostgresOrdersPostgresInvoicesInvoicesPayment providerPayment providerSign-inSign-in

Source: Architecture handbook, overview

Show chart data
Data for Web shop on one cloud region, with symbols
ComponentKindBoundaryConnects to
CustomerpersonWeb shop (browses)
Web shopfrontend, web browserContent network (loads assets, via HTTPS), Shop API (calls, via HTTPS/JSON)
Shop APIservice, containerCloud region eu-central-1 › Private networkSession cache (sessions, via RESP), Sign-in (checks token, via OIDC), Orders (reads, writes, via SQL/TLS), Order events (publishes, via AMQP)
Content networkexternal system, content delivery network
Session cachein-memory cacheCloud region eu-central-1 › Private network
Order eventsqueue, message brokerCloud region eu-central-1 › Private networkOrder worker (delivers)
Sign-insecurity, identity providerCloud region eu-central-1 › Private network
Order workerservice, serverless functionCloud region eu-central-1 › Private networkPayment provider (charges, via HTTPS), Invoices (stores PDF, via S3 API), Orders (updates, via SQL/TLS)
OrdersdatabaseCloud region eu-central-1 › Private network › Data zone
Invoicesobject storageCloud region eu-central-1
Payment providerexternal system, cloud service
  • Architecture diagram with symbols
  • Make components recognizable at a glance

Checkout and the interfaces it relies on

examples/payment-interfaces.jsonDetail: Checkout and the interfaces it relies on →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Checkout and the interfaces it relies on",
  "source": "Platform handbook, payment path",
  "width": 960,
  "height": 780,
  "mobile": {
    "width": 372,
    "height": 1000
  },
  "architecture": {
    "boundaries": [
      {
        "id": "shop",
        "label": "Shop platform"
      }
    ],
    "components": [
      {
        "id": "shopper",
        "label": "Shopper",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Web shop",
        "kind": "frontend"
      },
      {
        "id": "checkout",
        "label": "Checkout",
        "in": "shop"
      },
      {
        "id": "support",
        "label": "Support",
        "in": "shop"
      },
      {
        "id": "orders",
        "label": "Orders",
        "in": "shop",
        "provides": [
          {
            "id": "orders-api",
            "label": "Orders API"
          }
        ]
      },
      {
        "id": "payments",
        "label": "Payments",
        "in": "shop",
        "provides": [
          {
            "id": "payments-api",
            "label": "Payments API"
          },
          {
            "id": "refunds-api",
            "label": "Refunds API"
          }
        ]
      },
      {
        "id": "db",
        "label": "Order store",
        "kind": "database",
        "in": "shop"
      },
      {
        "id": "psp",
        "label": "Card processor",
        "kind": "external",
        "provides": [
          {
            "id": "card-api",
            "label": "Card API"
          }
        ]
      }
    ],
    "connections": [
      {
        "from": "shopper",
        "to": "web",
        "label": "buys"
      },
      {
        "from": "web",
        "to": "checkout",
        "label": "submits",
        "technology": "HTTPS"
      },
      {
        "from": "checkout",
        "to": "orders",
        "toInterface": "orders-api",
        "label": "places"
      },
      {
        "from": "checkout",
        "to": "payments",
        "toInterface": "payments-api",
        "label": "charges"
      },
      {
        "from": "support",
        "to": "payments",
        "toInterface": "refunds-api",
        "label": "refunds"
      },
      {
        "from": "payments",
        "to": "psp",
        "toInterface": "card-api",
        "technology": "HTTPS"
      },
      {
        "from": "orders",
        "to": "db",
        "technology": "SQL"
      }
    ],
    "mainPath": [
      "shopper",
      "web",
      "checkout",
      "payments",
      "psp"
    ],
    "orientation": "portrait"
  }
}
Focus
Checkout and the interfaces it relies on
Checkout and the interfaces it relies onArchitecture diagram with 8 components and 7 connections in 1 boundary. Shop platform: Checkout, Support, Orders, Payments, Order store. Main path: Shopper → Web shop → Checkout → Payments → Card processor. Most connected: Checkout and Payments (3 connections each). Nothing leads into Shopper and Support. Nothing leads out of Order store and Card processor. Bottleneck: Checkout; without it the diagram falls apart. Shopper (person): connects to Web shop (buys). Web shop (frontend): connects to Checkout (submits, via HTTPS). Checkout (service): connects to Orders (requires Orders API, places) and Payments (requires Payments API, charges). Support (service): connects to Payments (requires Refunds API, refunds). Orders (service): connects to Order store (via SQL). Payments (service): connects to Card processor (requires Card API, via HTTPS). Order store (database): no outgoing connection. Card processor (external system): no outgoing connection. Orders provides Orders API. Payments provides Payments API and Refunds API. Card processor provides Card API.Shop platformShopper → Web shop: buysWeb shop → Checkout: submits [HTTPS]Checkout → Orders API: placesCheckout → Payments API: chargesSupport → Refunds API: refundsPayments → Card API: [HTTPS]Orders → Order store: [SQL]buyssubmits[HTTPS]placeschargesrefunds[HTTPS][SQL]ShopperShopperWeb shopWeb shopCheckoutCheckoutSupportSupportOrdersOrdersPaymentsPaymentsOrder storeOrder storeCard processorCard processorOrders APIOrders APIPayments APIPayments APIRefunds APIRefunds APICard APICard API
Checkout and the interfaces it relies onArchitecture diagram with 8 components and 7 connections in 1 boundary. Shop platform: Checkout, Support, Orders, Payments, Order store. Main path: Shopper → Web shop → Checkout → Payments → Card processor. Most connected: Checkout and Payments (3 connections each). Nothing leads into Shopper and Support. Nothing leads out of Order store and Card processor. Bottleneck: Checkout; without it the diagram falls apart. Shopper (person): connects to Web shop (buys). Web shop (frontend): connects to Checkout (submits, via HTTPS). Checkout (service): connects to Orders (requires Orders API, places) and Payments (requires Payments API, charges). Support (service): connects to Payments (requires Refunds API, refunds). Orders (service): connects to Order store (via SQL). Payments (service): connects to Card processor (requires Card API, via HTTPS). Order store (database): no outgoing connection. Card processor (external system): no outgoing connection. Orders provides Orders API. Payments provides Payments API and Refunds API. Card processor provides Card API.Shop platformShopper → Web shop: buysWeb shop → Checkout: submits [HTTPS]Checkout → Orders API: placesCheckout → Payments API: chargesSupport → Refunds API: refundsPayments → Card API: [HTTPS]Orders → Order store: [SQL]buyssubmits[HTTPS]placeschargesrefunds[HTTPS][SQL]ShopperShopperWeb shopWeb shopCheckoutCheckoutSupportSupportOrdersOrdersPaymentsPaymentsOrder storeOrder storeCard processorCardprocessorOrders APIOrders APIPayments APIPaymentsAPIRefunds APIRefundsAPICard APICard API

Source: Platform handbook, payment path

Show chart data
Data for Checkout and the interfaces it relies on
ComponentKindBoundaryProvidesConnects to
ShopperpersonWeb shop (buys)
Web shopfrontendCheckout (submits, via HTTPS)
CheckoutserviceShop platformOrders (requires Orders API, places), Payments (requires Payments API, charges)
SupportserviceShop platformPayments (requires Refunds API, refunds)
OrdersserviceShop platformOrders APIOrder store (via SQL)
PaymentsserviceShop platformPayments API, Refunds APICard processor (requires Card API, via HTTPS)
Order storedatabaseShop platform
Card processorexternal systemCard API
  • Architecture diagram with interfaces
  • Show which interface a call depends on

Payments and what to know about them

examples/payment-notes.jsonDetail: Payments and what to know about them →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Payments and what to know about them",
  "source": "Illustrative reference architecture",
  "width": 1000,
  "height": 1120,
  "architecture": {
    "boundaries": [
      {
        "id": "cloud",
        "label": "Cloud account"
      },
      {
        "id": "pci",
        "label": "Card data zone",
        "in": "cloud"
      }
    ],
    "components": [
      {
        "id": "shopper",
        "label": "Shopper",
        "kind": "person"
      },
      {
        "id": "checkout",
        "label": "Checkout",
        "kind": "frontend"
      },
      {
        "id": "gateway",
        "label": "API gateway",
        "in": "cloud"
      },
      {
        "id": "payments",
        "label": "Payment service",
        "in": "pci"
      },
      {
        "id": "vault",
        "label": "Token vault",
        "kind": "security",
        "in": "pci"
      },
      {
        "id": "ledger",
        "label": "Ledger",
        "kind": "database",
        "in": "cloud"
      },
      {
        "id": "provider",
        "label": "Card provider",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "shopper",
        "to": "checkout",
        "label": "pays"
      },
      {
        "from": "checkout",
        "to": "gateway",
        "technology": "HTTPS"
      },
      {
        "from": "gateway",
        "to": "payments",
        "label": "charge"
      },
      {
        "from": "payments",
        "to": "vault",
        "label": "tokenizes"
      },
      {
        "from": "payments",
        "to": "provider",
        "label": "authorizes",
        "technology": "HTTPS"
      },
      {
        "from": "payments",
        "to": "ledger",
        "label": "records",
        "technology": "SQL"
      }
    ],
    "mainPath": [
      "shopper",
      "checkout",
      "gateway",
      "payments",
      "provider"
    ],
    "orientation": "portrait",
    "notes": [
      {
        "on": "vault",
        "text": "Card numbers never leave the vault; everything else sees tokens."
      },
      {
        "on": "pci",
        "text": "Audited once a year; changes need a second reviewer."
      },
      {
        "text": "Figures and names are illustrative; the diagram shows the target state."
      }
    ]
  },
  "mobile": {
    "width": 440,
    "height": 1200
  }
}
Focus
Payments and what to know about them
Payments and what to know about themArchitecture diagram with 7 components and 6 connections in 2 boundaries. Cloud account: API gateway, Ledger, Card data zone. Card data zone (in Cloud account): Payment service, Token vault. Main path: Shopper → Checkout → API gateway → Payment service → Card provider. Most connected: Payment service (4 connections). Nothing leads into Shopper. Nothing leads out of Token vault, Ledger and Card provider. Bottleneck: API gateway; without it the diagram falls apart. Shopper (person): connects to Checkout (pays). Checkout (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Payment service (charge). Payment service (service): connects to Token vault (tokenizes), Card provider (authorizes, via HTTPS) and Ledger (records, via SQL). Token vault (security): no outgoing connection. Ledger (database): no outgoing connection. Card provider (external system): no outgoing connection. Note on Token vault: Card numbers never leave the vault; everything else sees tokens. Note on Card data zone: Audited once a year; changes need a second reviewer. Note: Figures and names are illustrative; the diagram shows the target state.Cloud accountCard data zoneShopper → Checkout: paysCheckout → API gateway: [HTTPS]API gateway → Payment service: chargePayment service → Token vault: tokenizesPayment service → Card provider: authorizes [HTTPS]Payment service → Ledger: records [SQL]pays[HTTPS]chargetokenizesauthorizes[HTTPS]records[SQL]ShopperShopperCheckoutCheckoutAPI gatewayAPI gatewayPayment servicePayment serviceToken vaultToken vaultLedgerLedgerCard providerCard providerCard numbers never leave the vault; everything else sees tokens.Card numbers never leavethe vault; everything elsesees tokens.Audited once a year; changes need a second reviewer.Audited once a year; changesneed a second reviewer.Figures and names are illustrative; the diagram shows the target state.Figures and names areillustrative; the diagramshows the target state.
Payments and what to know about themArchitecture diagram with 7 components and 6 connections in 2 boundaries. Cloud account: API gateway, Ledger, Card data zone. Card data zone (in Cloud account): Payment service, Token vault. Main path: Shopper → Checkout → API gateway → Payment service → Card provider. Most connected: Payment service (4 connections). Nothing leads into Shopper. Nothing leads out of Token vault, Ledger and Card provider. Bottleneck: API gateway; without it the diagram falls apart. Shopper (person): connects to Checkout (pays). Checkout (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Payment service (charge). Payment service (service): connects to Token vault (tokenizes), Card provider (authorizes, via HTTPS) and Ledger (records, via SQL). Token vault (security): no outgoing connection. Ledger (database): no outgoing connection. Card provider (external system): no outgoing connection. Note on Token vault: Card numbers never leave the vault; everything else sees tokens. Note on Card data zone: Audited once a year; changes need a second reviewer. Note: Figures and names are illustrative; the diagram shows the target state.Cloud accountCard data zoneShopper → Checkout: paysCheckout → API gateway: [HTTPS]API gateway → Payment service: chargePayment service → Token vault: tokenizesPayment service → Card provider: authorizes [HTTPS]Payment service → Ledger: records [SQL]pays[HTTPS]chargetokenizesauthorizes[HTTPS]records[SQL]ShopperShopperCheckoutCheckoutAPI gatewayAPI gatewayPayment servicePaymentserviceToken vaultToken vaultLedgerLedgerCard providerCard providerCard numbers never leave the vault; everything else sees tokens.Card numbersnever leave thevault;everything elsesees tokens.Audited once a year; changes need a second reviewer.Audited once ayear; changesneed a secondreviewer.Figures and names are illustrative; the diagram shows the target state.Figures andnames areillustrative; thediagram showsthe targetstate.

Source: Illustrative reference architecture

Show chart data
Data for Payments and what to know about them. Note on Card data zone: Audited once a year; changes need a second reviewer. Note: Figures and names are illustrative; the diagram shows the target state.
ComponentKindBoundaryConnects toNotes
ShopperpersonCheckout (pays)
CheckoutfrontendAPI gateway (via HTTPS)
API gatewayserviceCloud accountPayment service (charge)
Payment serviceserviceCloud account › Card data zoneToken vault (tokenizes), Card provider (authorizes, via HTTPS), Ledger (records, via SQL)
Token vaultsecurityCloud account › Card data zoneCard numbers never leave the vault; everything else sees tokens.
LedgerdatabaseCloud account
Card providerexternal system
  • Architecture diagram with notes
  • Write down what the boxes do not say

Billing moves from the monolith to its own service

examples/billing-migration.jsonDetail: Billing moves from the monolith to its own service →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Billing moves from the monolith to its own service",
  "source": "Architecture review, migration plan",
  "width": 1400,
  "height": 420,
  "architecture": {
    "boundaries": [
      {
        "id": "platform",
        "label": "Platform"
      }
    ],
    "components": [
      {
        "id": "customer",
        "label": "Customer",
        "kind": "person"
      },
      {
        "id": "portal",
        "label": "Customer portal",
        "kind": "frontend"
      },
      {
        "id": "gateway",
        "label": "API gateway",
        "kind": "security",
        "in": "platform",
        "role": "critical"
      },
      {
        "id": "monolith",
        "label": "Monolith",
        "sublabel": "billing module",
        "in": "platform",
        "role": "deprecated"
      },
      {
        "id": "billing",
        "label": "Billing service",
        "in": "platform",
        "role": "planned"
      },
      {
        "id": "events",
        "label": "Invoice events",
        "kind": "queue",
        "in": "platform",
        "role": "planned"
      },
      {
        "id": "db",
        "label": "Accounts",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "platform",
        "role": "critical"
      },
      {
        "id": "psp",
        "label": "Payment provider",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "customer",
        "to": "portal",
        "label": "pays"
      },
      {
        "from": "portal",
        "to": "gateway",
        "label": "calls",
        "technology": "HTTPS"
      },
      {
        "from": "gateway",
        "to": "monolith",
        "label": "routes today",
        "role": "deprecated"
      },
      {
        "from": "gateway",
        "to": "billing",
        "label": "routes after",
        "role": "planned"
      },
      {
        "from": "monolith",
        "to": "db",
        "technology": "SQL",
        "role": "deprecated"
      },
      {
        "from": "billing",
        "to": "db",
        "technology": "SQL",
        "role": "planned"
      },
      {
        "from": "billing",
        "to": "events",
        "label": "publishes",
        "role": "planned"
      },
      {
        "from": "billing",
        "to": "psp",
        "label": "charges",
        "technology": "HTTPS",
        "role": "critical"
      }
    ]
  }
}
Focus
Billing moves from the monolith to its own service
Billing moves from the monolith to its own serviceArchitecture diagram with 8 components and 8 connections in 1 boundary. Platform: API gateway, Monolith, Billing service, Invoice events, Accounts. Most connected: Billing service (4 connections). Nothing leads into Customer. Nothing leads out of Invoice events, Accounts and Payment provider. Bottleneck: API gateway; without it the diagram falls apart. Customer (person): connects to Customer portal (pays). Customer portal (frontend): connects to API gateway (calls, via HTTPS). API gateway (security): connects to Monolith (routes today) and Billing service (routes after). Monolith (service): connects to Accounts (via SQL). Billing service (service): connects to Accounts (via SQL), Invoice events (publishes) and Payment provider (charges, via HTTPS). Accounts (database): no outgoing connection. Invoice events (queue): no outgoing connection. Payment provider (external system): no outgoing connection. Roles: critical: API gateway, Accounts, Billing service → Payment provider; planned: Billing service, Invoice events, API gateway → Billing service, Billing service → Accounts, Billing service → Invoice events; deprecated: Monolith, API gateway → Monolith, Monolith → Accounts.PlatformCustomer → Customer portal: paysCustomer portal → API gateway: calls [HTTPS]API gateway → Monolith: routes todayAPI gateway → Billing service: routes afterMonolith → Accounts: [SQL]Billing service → Accounts: [SQL]Billing service → Invoice events: publishesBilling service → Payment provider: charges [HTTPS]payscalls[HTTPS]routes todayroutes after[SQL][SQL]publishescharges[HTTPS]CustomerCustomerCustomer portalCustomer portalAPI gatewayAPI gateway!Monolith – billing moduleMonolithbilling module−Billing serviceBilling service+Invoice eventsInvoice events+Accounts – PostgresAccountsPostgres!Payment providerPayment provider!Critical+Planned−Deprecated

Source: Architecture review, migration plan

Show chart data
Data for Billing moves from the monolith to its own service
ComponentKindBoundaryRoleConnects to
CustomerpersonCustomer portal (pays)
Customer portalfrontendAPI gateway (calls, via HTTPS)
API gatewaysecurityPlatformcriticalMonolith (routes today, deprecated), Billing service (routes after, planned)
MonolithservicePlatformdeprecatedAccounts (via SQL, deprecated)
Billing serviceservicePlatformplannedAccounts (via SQL, planned), Invoice events (publishes, planned), Payment provider (charges, via HTTPS, critical)
AccountsdatabasePlatformcritical
Invoice eventsqueuePlatformplanned
Payment providerexternal system
  • Architecture diagram with roles
  • Show what changes in a migration

Architecture models: views and levels

Web shop on one cloud region

examples/shop-views.jsonDetail: Web shop on one cloud region →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Web shop on one cloud region",
  "source": "Architecture handbook, shop model",
  "width": 1900,
  "height": 540,
  "architecture": {
    "boundaries": [
      {
        "id": "region",
        "label": "Cloud region eu-central-1"
      },
      {
        "id": "network",
        "label": "Private network",
        "in": "region"
      },
      {
        "id": "data",
        "label": "Data zone",
        "in": "network"
      }
    ],
    "components": [
      {
        "id": "customer",
        "label": "Customer",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Web shop",
        "sublabel": "browser",
        "kind": "frontend"
      },
      {
        "id": "cdn",
        "label": "Content network",
        "kind": "external"
      },
      {
        "id": "api",
        "label": "Shop API",
        "sublabel": "Node.js",
        "in": "network"
      },
      {
        "id": "cache",
        "label": "Session cache",
        "sublabel": "Redis",
        "kind": "cache",
        "in": "network"
      },
      {
        "id": "events",
        "label": "Order events",
        "kind": "queue",
        "in": "network"
      },
      {
        "id": "worker",
        "label": "Order worker",
        "in": "network"
      },
      {
        "id": "db",
        "label": "Orders",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "data"
      },
      {
        "id": "files",
        "label": "Invoices",
        "sublabel": "object storage",
        "kind": "storage",
        "in": "region"
      },
      {
        "id": "pay",
        "label": "Payment provider",
        "kind": "external"
      },
      {
        "id": "auth",
        "label": "Sign-in",
        "sublabel": "identity provider",
        "kind": "security",
        "in": "network"
      }
    ],
    "connections": [
      {
        "id": "browse",
        "from": "customer",
        "to": "web",
        "label": "browses"
      },
      {
        "id": "assets",
        "from": "web",
        "to": "cdn",
        "label": "loads assets",
        "technology": "HTTPS",
        "dash": "dashed"
      },
      {
        "id": "call",
        "from": "web",
        "to": "api",
        "label": "calls",
        "technology": "HTTPS/JSON"
      },
      {
        "id": "session",
        "from": "api",
        "to": "cache",
        "label": "sessions",
        "technology": "RESP"
      },
      {
        "id": "token",
        "from": "api",
        "to": "auth",
        "label": "checks token",
        "technology": "OIDC"
      },
      {
        "id": "orders",
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL/TLS"
      },
      {
        "id": "publish",
        "from": "api",
        "to": "events",
        "label": "publishes",
        "technology": "AMQP"
      },
      {
        "id": "deliver",
        "from": "events",
        "to": "worker",
        "label": "delivers"
      },
      {
        "id": "charge",
        "from": "worker",
        "to": "pay",
        "label": "charges",
        "technology": "HTTPS"
      },
      {
        "id": "invoice",
        "from": "worker",
        "to": "files",
        "label": "stores PDF",
        "technology": "S3 API"
      },
      {
        "id": "update",
        "from": "worker",
        "to": "db",
        "label": "updates",
        "technology": "SQL/TLS"
      }
    ],
    "mainPath": [
      "customer",
      "web",
      "api",
      "events",
      "worker",
      "pay"
    ],
    "views": [
      {
        "key": "overview",
        "title": "Web shop: overview",
        "components": [
          "customer",
          "web",
          "api",
          "events",
          "worker",
          "db",
          "files",
          "pay"
        ]
      },
      {
        "key": "checkout",
        "title": "Web shop: checkout",
        "steps": [
          {
            "connection": "browse",
            "label": "places order"
          },
          {
            "connection": "call",
            "label": "submits order"
          },
          {
            "connection": "token"
          },
          {
            "connection": "orders",
            "label": "reserves stock"
          },
          {
            "connection": "orders",
            "label": "saves order"
          },
          {
            "connection": "publish",
            "label": "order placed"
          },
          {
            "connection": "deliver"
          },
          {
            "connection": "charge",
            "label": "charges card"
          },
          {
            "connection": "update",
            "label": "marks paid"
          },
          {
            "connection": "invoice"
          }
        ]
      }
    ]
  }
}
Focus
Web shop: overview
Web shop: overviewArchitecture diagram with 8 components and 8 connections in 3 boundaries. It is a view that shows 8 of the model's 11 components and 8 of its 11 connections. Cloud region eu-central-1: Invoices, Private network. Private network (in Cloud region eu-central-1): Shop API, Order events, Order worker, Data zone. Data zone (in Private network): Orders. Main path: Customer → Web shop → Shop API → Order events → Order worker → Payment provider. Most connected: Order worker (4 connections). Nothing leads into Customer. Nothing leads out of Orders, Invoices and Payment provider. Bottleneck: Shop API; without it the diagram falls apart. Customer (person): connects to Web shop (browses). Web shop (frontend): connects to Shop API (calls, via HTTPS/JSON). Shop API (service): connects to Orders (reads, writes, via SQL/TLS) and Order events (publishes, via AMQP). Order events (queue): connects to Order worker (delivers). Order worker (service): connects to Payment provider (charges, via HTTPS), Invoices (stores PDF, via S3 API) and Orders (updates, via SQL/TLS). Orders (database): no outgoing connection. Invoices (storage): no outgoing connection. Payment provider (external system): no outgoing connection.Cloud region eu-central-1Private networkData zoneCustomer → Web shop: browsesWeb shop → Shop API: calls [HTTPS/JSON]Shop API → Orders: reads, writes [SQL/TLS]Shop API → Order events: publishes [AMQP]Order events → Order worker: deliversOrder worker → Payment provider: charges [HTTPS]Order worker → Invoices: stores PDF [S3 API]Order worker → Orders: updates [SQL/TLS]browsescalls[HTTPS/JSON]reads, writes[SQL/TLS]publishes[AMQP]deliverscharges[HTTPS]stores PDF[S3 API]updates[SQL/TLS]CustomerCustomerWeb shop – browserWeb shopbrowserShop API – Node.jsShop APINode.jsOrder eventsOrder eventsOrder workerOrder workerOrders – PostgresOrdersPostgresInvoices – object storageInvoicesobject storagePayment providerPayment provider

Source: Architecture handbook, shop model

Show chart data
Data for Web shop: overview
ComponentKindBoundaryConnects to
CustomerpersonWeb shop (browses)
Web shopfrontendShop API (calls, via HTTPS/JSON)
Shop APIserviceCloud region eu-central-1 › Private networkOrders (reads, writes, via SQL/TLS), Order events (publishes, via AMQP)
Order eventsqueueCloud region eu-central-1 › Private networkOrder worker (delivers)
Order workerserviceCloud region eu-central-1 › Private networkPayment provider (charges, via HTTPS), Invoices (stores PDF, via S3 API), Orders (updates, via SQL/TLS)
OrdersdatabaseCloud region eu-central-1 › Private network › Data zone
InvoicesstorageCloud region eu-central-1
Payment providerexternal system
  • Architecture views
  • Show one model at several levels of detail

Booking platform

examples/service-perspectives.jsonDetail: Booking platform →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Booking platform",
  "source": "Architecture handbook, booking model",
  "width": 1300,
  "height": 520,
  "architecture": {
    "boundaries": [
      {
        "id": "cloud",
        "label": "Cloud account"
      },
      {
        "id": "data",
        "label": "Data zone",
        "in": "cloud"
      }
    ],
    "components": [
      {
        "id": "guest",
        "label": "Guest",
        "kind": "person"
      },
      {
        "id": "app",
        "label": "Booking app",
        "kind": "frontend"
      },
      {
        "id": "gateway",
        "label": "API gateway",
        "in": "cloud"
      },
      {
        "id": "booking",
        "label": "Booking service",
        "sublabel": "Java",
        "in": "cloud"
      },
      {
        "id": "pricing",
        "label": "Pricing service",
        "sublabel": "Go",
        "in": "cloud"
      },
      {
        "id": "db",
        "label": "Bookings",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "data"
      },
      {
        "id": "legacy",
        "label": "Legacy inventory",
        "kind": "database",
        "in": "data"
      },
      {
        "id": "pay",
        "label": "Payment provider",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "id": "use",
        "from": "guest",
        "to": "app",
        "label": "books"
      },
      {
        "id": "call",
        "from": "app",
        "to": "gateway",
        "technology": "HTTPS"
      },
      {
        "id": "route",
        "from": "gateway",
        "to": "booking",
        "label": "routes"
      },
      {
        "id": "price",
        "from": "booking",
        "to": "pricing",
        "label": "asks price"
      },
      {
        "id": "store",
        "from": "booking",
        "to": "db",
        "technology": "SQL"
      },
      {
        "id": "stock",
        "from": "booking",
        "to": "legacy",
        "label": "checks rooms"
      },
      {
        "id": "charge",
        "from": "booking",
        "to": "pay",
        "label": "charges",
        "technology": "HTTPS"
      }
    ],
    "perspectives": [
      {
        "key": "owner",
        "title": "Team",
        "description": "The team named in the service catalogue runs each component.",
        "categories": [
          {
            "label": "Storefront",
            "components": [
              "app"
            ]
          },
          {
            "label": "Bookings",
            "components": [
              "booking",
              "pricing"
            ]
          },
          {
            "label": "Platform",
            "components": [
              "gateway",
              "db",
              "legacy"
            ]
          }
        ]
      },
      {
        "key": "debt",
        "title": "Technical debt",
        "description": "Debt as the owning team rated it in the last review.",
        "categories": [
          {
            "label": "low",
            "components": [
              "app",
              "pricing"
            ]
          },
          {
            "label": "medium",
            "components": [
              "gateway",
              "db"
            ]
          },
          {
            "label": "high",
            "components": [
              "booking"
            ]
          }
        ]
      }
    ],
    "views": [
      {
        "key": "owners",
        "title": "Booking platform: who runs what",
        "components": [
          "guest",
          "app",
          "gateway",
          "booking",
          "pricing",
          "db",
          "legacy",
          "pay"
        ],
        "perspective": "owner"
      },
      {
        "key": "debt",
        "title": "Booking platform: technical debt",
        "components": [
          "guest",
          "app",
          "gateway",
          "booking",
          "pricing",
          "db",
          "legacy",
          "pay"
        ],
        "perspective": "debt"
      }
    ]
  }
}
Focus
Booking platform: who runs what
Booking platform: who runs whatArchitecture diagram with 8 components and 7 connections in 2 boundaries. Cloud account: API gateway, Booking service, Pricing service, Data zone. Data zone (in Cloud account): Bookings, Legacy inventory. Most connected: Booking service (5 connections). Nothing leads into Guest. Bottleneck: API gateway; without it the diagram falls apart. Guest (person): connects to Booking app (books). Booking app (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Booking service (routes). Booking service (service): connects to Pricing service (asks price), Bookings (via SQL), Legacy inventory (checks rooms) and Payment provider (charges, via HTTPS). Pricing service (service): no outgoing connection. Bookings (database): no outgoing connection. Legacy inventory (database): no outgoing connection. Payment provider (external system): no outgoing connection. Perspective Team: Storefront: Booking app; Bookings: Booking service, Pricing service; Platform: API gateway, Bookings, Legacy inventory; not stated: Guest, Payment provider. The team named in the service catalogue runs each component.Cloud accountData zoneGuest → Booking app: booksBooking app → API gateway: [HTTPS]API gateway → Booking service: routesBooking service → Pricing service: asks priceBooking service → Bookings: [SQL]Booking service → Legacy inventory: checks roomsBooking service → Payment provider: charges [HTTPS]books[HTTPS]routesasks price[SQL]checks roomscharges[HTTPS]Guest – not statedGuestnot statednot statedBooking app – StorefrontBooking appStorefrontStorefrontAPI gateway – PlatformAPI gatewayPlatformPlatformBooking service – Java · BookingsBooking serviceJava · BookingsBookingsPricing service – Go · BookingsPricing serviceGo · BookingsBookingsBookings – Postgres · PlatformBookingsPostgres · PlatformPlatformLegacy inventory – PlatformLegacy inventoryPlatformPlatformPayment provider – not statedPayment providernot statednot statedTeam:StorefrontBookingsPlatformnot stated

Source: Architecture handbook, booking model

Show chart data
Data for Booking platform: who runs what
ComponentKindBoundaryTeamConnects to
Guestpersonnot statedBooking app (books)
Booking appfrontendStorefrontAPI gateway (via HTTPS)
API gatewayserviceCloud accountPlatformBooking service (routes)
Booking serviceserviceCloud accountBookingsPricing service (asks price), Bookings (via SQL), Legacy inventory (checks rooms), Payment provider (charges, via HTTPS)
Pricing serviceserviceCloud accountBookings
BookingsdatabaseCloud account › Data zonePlatform
Legacy inventorydatabaseCloud account › Data zonePlatform
Payment providerexternal systemnot stated
  • Architecture diagram with perspectives
  • Show who owns what, or where the debt is

Course booking: system context

examples/booking-context.jsonDetail: Course booking: system context →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Course booking: system context",
  "height": 480,
  "architecture": {
    "components": [
      {
        "id": "learner",
        "label": "Learner",
        "sublabel": "books and attends courses",
        "kind": "person"
      },
      {
        "id": "trainer",
        "label": "Trainer",
        "sublabel": "runs courses",
        "kind": "person"
      },
      {
        "id": "booking",
        "label": "Course booking",
        "sublabel": "the system in scope"
      },
      {
        "id": "payment",
        "label": "Payment provider",
        "sublabel": "external system",
        "kind": "external"
      },
      {
        "id": "mail",
        "label": "E-mail service",
        "sublabel": "external system",
        "kind": "external"
      },
      {
        "id": "directory",
        "label": "Staff directory",
        "sublabel": "external system",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "learner",
        "to": "booking",
        "label": "books a course"
      },
      {
        "from": "trainer",
        "to": "booking",
        "label": "plans dates"
      },
      {
        "from": "booking",
        "to": "payment",
        "label": "takes payment"
      },
      {
        "from": "booking",
        "to": "mail",
        "label": "sends confirmations"
      },
      {
        "from": "booking",
        "to": "directory",
        "label": "looks up trainers"
      }
    ],
    "mainPath": [
      "learner",
      "booking",
      "payment"
    ]
  }
}
Focus
Course booking: system context
Course booking: system contextArchitecture diagram with 6 components and 5 connections. Main path: Learner → Course booking → Payment provider. Most connected: Course booking (5 connections). Nothing leads into Learner and Trainer. Nothing leads out of Payment provider, E-mail service and Staff directory. Learner (person): connects to Course booking (books a course). Trainer (person): connects to Course booking (plans dates). Course booking (service): connects to Payment provider (takes payment), E-mail service (sends confirmations) and Staff directory (looks up trainers). Payment provider (external system): no outgoing connection. E-mail service (external system): no outgoing connection. Staff directory (external system): no outgoing connection.Learner → Course booking: books a courseTrainer → Course booking: plans datesCourse booking → Payment provider: takes paymentCourse booking → E-mail service: sends confirmationsCourse booking → Staff directory: looks up trainersbooks a courseplans datestakes paymentsends confirmationslooks up trainersLearner – books and attends coursesLearnerbooks and attends coursesTrainer – runs coursesTrainerruns coursesCourse booking – the system in scopeCourse bookingthe system in scopePayment provider – external systemPayment providerexternal systemE-mail service – external systemE-mail serviceexternal systemStaff directory – external systemStaff directoryexternal system
Show chart data
Data for Course booking: system context
ComponentKindConnects to
LearnerpersonCourse booking (books a course)
TrainerpersonCourse booking (plans dates)
Course bookingservicePayment provider (takes payment), E-mail service (sends confirmations), Staff directory (looks up trainers)
Payment providerexternal system
E-mail serviceexternal system
Staff directoryexternal system
  • System context
  • Show who uses a system and what it depends on

Course booking: containers

examples/booking-containers.jsonDetail: Course booking: containers →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Course booking: containers",
  "height": 940,
  "architecture": {
    "boundaries": [
      {
        "id": "system",
        "label": "Course booking (software system)"
      }
    ],
    "components": [
      {
        "id": "learner",
        "label": "Learner",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Web app",
        "sublabel": "single-page app",
        "kind": "frontend",
        "in": "system"
      },
      {
        "id": "api",
        "label": "Booking API",
        "sublabel": "API application",
        "in": "system"
      },
      {
        "id": "jobs",
        "label": "Job queue",
        "sublabel": "message queue",
        "kind": "queue",
        "in": "system"
      },
      {
        "id": "worker",
        "label": "Worker",
        "sublabel": "background jobs",
        "in": "system"
      },
      {
        "id": "db",
        "label": "Bookings",
        "sublabel": "relational database",
        "kind": "database",
        "in": "system"
      },
      {
        "id": "files",
        "label": "Certificates",
        "sublabel": "file store",
        "kind": "storage",
        "in": "system"
      },
      {
        "id": "payment",
        "label": "Payment provider",
        "kind": "external"
      },
      {
        "id": "mail",
        "label": "E-mail service",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "from": "learner",
        "to": "web",
        "label": "books a course",
        "technology": "HTTPS"
      },
      {
        "from": "web",
        "to": "api",
        "label": "calls",
        "technology": "JSON/HTTPS"
      },
      {
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL"
      },
      {
        "from": "api",
        "to": "payment",
        "label": "takes payment",
        "technology": "HTTPS"
      },
      {
        "from": "api",
        "to": "jobs",
        "label": "queues jobs"
      },
      {
        "from": "jobs",
        "to": "worker",
        "label": "delivers"
      },
      {
        "from": "worker",
        "to": "files",
        "label": "stores certificates"
      },
      {
        "from": "worker",
        "to": "mail",
        "label": "sends confirmations",
        "technology": "SMTP"
      }
    ],
    "mainPath": [
      "learner",
      "web",
      "api",
      "db"
    ]
  }
}
Focus
Course booking: containers
Course booking: containersArchitecture diagram with 9 components and 8 connections in 1 boundary. Course booking (software system): Web app, Booking API, Job queue, Worker, Bookings, Certificates. Main path: Learner → Web app → Booking API → Bookings. Most connected: Booking API (4 connections). Nothing leads into Learner. Bottlenecks: Booking API and Job queue; without either the diagram falls apart. Learner (person): connects to Web app (books a course, via HTTPS). Web app (frontend): connects to Booking API (calls, via JSON/HTTPS). Booking API (service): connects to Bookings (reads, writes, via SQL), Payment provider (takes payment, via HTTPS) and Job queue (queues jobs). Job queue (queue): connects to Worker (delivers). Bookings (database): no outgoing connection. Payment provider (external system): no outgoing connection. Worker (service): connects to Certificates (stores certificates) and E-mail service (sends confirmations, via SMTP). Certificates (storage): no outgoing connection. E-mail service (external system): no outgoing connection.Course booking (software system)Learner → Web app: books a course [HTTPS]Web app → Booking API: calls [JSON/HTTPS]Booking API → Bookings: reads, writes [SQL]Booking API → Payment provider: takes payment [HTTPS]Booking API → Job queue: queues jobsJob queue → Worker: deliversWorker → Certificates: stores certificatesWorker → E-mail service: sends confirmations [SMTP]books a course[HTTPS]calls[JSON/HTTPS]reads, writes[SQL]takes payment[HTTPS]queues jobsdeliversstores certificatessends confirmations[SMTP]LearnerLearnerWeb app – single-page appWeb appsingle-page appBooking API – API applicationBooking APIAPI applicationJob queue – message queueJob queuemessage queueWorker – background jobsWorkerbackground jobsBookings – relational databaseBookingsrelational databaseCertificates – file storeCertificatesfile storePayment providerPayment providerE-mail serviceE-mail service
Show chart data
Data for Course booking: containers
ComponentKindBoundaryConnects to
LearnerpersonWeb app (books a course, via HTTPS)
Web appfrontendCourse booking (software system)Booking API (calls, via JSON/HTTPS)
Booking APIserviceCourse booking (software system)Bookings (reads, writes, via SQL), Payment provider (takes payment, via HTTPS), Job queue (queues jobs)
Job queuequeueCourse booking (software system)Worker (delivers)
BookingsdatabaseCourse booking (software system)
Payment providerexternal system
WorkerserviceCourse booking (software system)Certificates (stores certificates), E-mail service (sends confirmations, via SMTP)
CertificatesstorageCourse booking (software system)
E-mail serviceexternal system
  • Containers
  • Show the deployable parts of a system

Course booking: deployment

examples/booking-deployment.jsonDetail: Course booking: deployment →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Course booking: deployment",
  "height": 1000,
  "architecture": {
    "components": [
      {
        "id": "learner",
        "label": "Learner",
        "kind": "person"
      },
      {
        "id": "ingress",
        "label": "Ingress",
        "sublabel": "load balancer"
      },
      {
        "id": "api",
        "label": "Booking API",
        "sublabel": "image: web app and API",
        "kind": "artifact"
      },
      {
        "id": "worker",
        "label": "Worker",
        "sublabel": "image: background jobs",
        "kind": "artifact"
      },
      {
        "id": "jobs",
        "label": "Job queue",
        "sublabel": "managed queue",
        "kind": "queue"
      },
      {
        "id": "db",
        "label": "Bookings",
        "sublabel": "managed database",
        "kind": "database"
      },
      {
        "id": "files",
        "label": "Certificates",
        "sublabel": "object storage",
        "kind": "storage"
      }
    ],
    "connections": [
      {
        "id": "open",
        "from": "learner",
        "to": "ingress",
        "label": "opens",
        "technology": "HTTPS"
      },
      {
        "id": "route",
        "from": "ingress",
        "to": "api",
        "label": "routes",
        "technology": "HTTP"
      },
      {
        "id": "query",
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL/TLS"
      },
      {
        "id": "enqueue",
        "from": "api",
        "to": "jobs",
        "label": "queues jobs"
      },
      {
        "id": "deliver",
        "from": "jobs",
        "to": "worker",
        "label": "delivers"
      },
      {
        "id": "store",
        "from": "worker",
        "to": "files",
        "label": "stores certificates"
      },
      {
        "id": "update",
        "from": "worker",
        "to": "db",
        "label": "updates",
        "technology": "SQL/TLS"
      }
    ],
    "mainPath": [
      "learner",
      "ingress",
      "api",
      "jobs",
      "worker",
      "files"
    ],
    "sameRank": [
      [
        "db",
        "files"
      ]
    ],
    "defaultView": "production",
    "views": [
      {
        "key": "logical",
        "title": "Course booking: deployable parts",
        "components": [
          "learner",
          "ingress",
          "api",
          "worker",
          "jobs",
          "db",
          "files"
        ]
      },
      {
        "key": "production",
        "title": "Course booking in production",
        "environment": "Production",
        "hosts": [
          {
            "id": "region",
            "label": "Cloud region"
          },
          {
            "id": "cluster",
            "label": "Container cluster",
            "in": "region"
          },
          {
            "id": "nodeA",
            "label": "Node A",
            "in": "cluster"
          },
          {
            "id": "nodeB",
            "label": "Node B",
            "in": "cluster"
          },
          {
            "id": "workerPool",
            "label": "Node pool: workers",
            "in": "cluster"
          }
        ],
        "instances": [
          {
            "id": "ingress-prod",
            "of": "ingress",
            "in": "cluster"
          },
          {
            "id": "api-1",
            "of": "api",
            "in": "nodeA"
          },
          {
            "id": "api-2",
            "of": "api",
            "in": "nodeB"
          },
          {
            "id": "worker-1",
            "of": "worker",
            "in": "workerPool"
          },
          {
            "id": "jobs-prod",
            "of": "jobs",
            "in": "region"
          },
          {
            "id": "db-prod",
            "of": "db",
            "in": "region"
          },
          {
            "id": "files-prod",
            "of": "files",
            "in": "region"
          }
        ],
        "instanceConnections": [
          {
            "id": "route",
            "from": "ingress-prod",
            "to": "api-1"
          },
          {
            "id": "route",
            "from": "ingress-prod",
            "to": "api-2"
          },
          {
            "id": "query",
            "from": "api-1",
            "to": "db-prod"
          },
          {
            "id": "query",
            "from": "api-2",
            "to": "db-prod"
          },
          {
            "id": "enqueue",
            "from": "api-1",
            "to": "jobs-prod"
          },
          {
            "id": "enqueue",
            "from": "api-2",
            "to": "jobs-prod"
          },
          {
            "id": "deliver",
            "from": "jobs-prod",
            "to": "worker-1"
          },
          {
            "id": "store",
            "from": "worker-1",
            "to": "files-prod"
          },
          {
            "id": "update",
            "from": "worker-1",
            "to": "db-prod"
          }
        ]
      }
    ]
  }
}
Focus
Course booking in production
Course booking in productionArchitecture diagram with 7 components and 9 connections in 5 boundaries. It shows the environment Production: 7 instances of 6 components of the model; only the connections listed for the instances are drawn. Cloud region: Job queue (jobs-prod), Bookings (db-prod), Certificates (files-prod), Container cluster. Container cluster (in Cloud region): Ingress (ingress-prod), Node A, Node B, Node pool: workers. Node A (in Container cluster): Booking API (api-1). Node B (in Container cluster): Booking API (api-2). Node pool: workers (in Container cluster): Worker (worker-1). Nothing leads into Ingress (ingress-prod). Nothing leads out of Bookings (db-prod) and Certificates (files-prod). Ingress (ingress-prod) (service): connects to Booking API (api-1) (routes, via HTTP) and Booking API (api-2) (routes, via HTTP). Booking API (api-1) (artifact): connects to Bookings (db-prod) (reads, writes, via SQL/TLS) and Job queue (jobs-prod) (queues jobs). Booking API (api-2) (artifact): connects to Bookings (db-prod) (reads, writes, via SQL/TLS) and Job queue (jobs-prod) (queues jobs). Job queue (jobs-prod) (queue): connects to Worker (worker-1) (delivers). Worker (worker-1) (artifact): connects to Certificates (files-prod) (stores certificates) and Bookings (db-prod) (updates, via SQL/TLS). Bookings (db-prod) (database): no outgoing connection. Certificates (files-prod) (storage): no outgoing connection.Cloud regionContainer clusterNode pool: workersNode BNode AIngress (ingress-prod) → Booking API (api-1): routes [HTTP]Ingress (ingress-prod) → Booking API (api-2): routes [HTTP]Booking API (api-1) → Bookings (db-prod): reads, writes [SQL/TLS]Booking API (api-2) → Bookings (db-prod): reads, writes [SQL/TLS]Booking API (api-1) → Job queue (jobs-prod): queues jobsBooking API (api-2) → Job queue (jobs-prod): queues jobsJob queue (jobs-prod) → Worker (worker-1): deliversWorker (worker-1) → Certificates (files-prod): stores certificatesWorker (worker-1) → Bookings (db-prod): updates [SQL/TLS]routes[HTTP]routes[HTTP]reads, writes[SQL/TLS]reads, writes[SQL/TLS]queues jobsqueues jobsdeliversstores certificatesupdates[SQL/TLS]Ingress (ingress-prod) – load balancerIngress (ingress-prod)load balancerBooking API (api-1) – image: web app and APIBooking API (api-1)image: web app and APIBooking API (api-2) – image: web app and APIBooking API (api-2)image: web app and APIWorker (worker-1) – image: background jobsWorker (worker-1)image: background jobsJob queue (jobs-prod) – managed queueJob queue (jobs-prod)managed queueBookings (db-prod) – managed databaseBookings (db-prod)managed databaseCertificates (files-prod) – object storageCertificates (files-prod)object storage
Show chart data
Data for Course booking in production
InstanceKindBoundaryConnects to
Ingress (ingress-prod)serviceCloud region › Container clusterBooking API (api-1) (routes, via HTTP), Booking API (api-2) (routes, via HTTP)
Booking API (api-1)artifactCloud region › Container cluster › Node ABookings (db-prod) (reads, writes, via SQL/TLS), Job queue (jobs-prod) (queues jobs)
Booking API (api-2)artifactCloud region › Container cluster › Node BBookings (db-prod) (reads, writes, via SQL/TLS), Job queue (jobs-prod) (queues jobs)
Job queue (jobs-prod)queueCloud regionWorker (worker-1) (delivers)
Worker (worker-1)artifactCloud region › Container cluster › Node pool: workersCertificates (files-prod) (stores certificates), Bookings (db-prod) (updates, via SQL/TLS)
Bookings (db-prod)databaseCloud region
Certificates (files-prod)storageCloud region
  • Deployment view (default view)
  • Document a deployment

Orders API

examples/api-environments.jsonDetail: Orders API →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Orders API",
  "source": "Operations handbook, orders model",
  "width": 1000,
  "height": 520,
  "architecture": {
    "components": [
      {
        "id": "client",
        "label": "Shop front end",
        "kind": "frontend"
      },
      {
        "id": "lb",
        "label": "Load balancer",
        "symbol": "load-balancer"
      },
      {
        "id": "api",
        "label": "Orders API",
        "sublabel": "Node.js"
      },
      {
        "id": "db",
        "label": "Orders",
        "sublabel": "Postgres",
        "kind": "database"
      }
    ],
    "connections": [
      {
        "id": "call",
        "from": "client",
        "to": "lb",
        "label": "places orders",
        "technology": "HTTPS"
      },
      {
        "id": "route",
        "from": "lb",
        "to": "api",
        "label": "routes",
        "technology": "HTTP"
      },
      {
        "id": "query",
        "from": "api",
        "to": "db",
        "label": "reads, writes",
        "technology": "SQL"
      }
    ],
    "views": [
      {
        "key": "logical",
        "title": "Orders API: components",
        "components": [
          "client",
          "lb",
          "api",
          "db"
        ]
      },
      {
        "key": "local",
        "title": "Orders API on a developer machine",
        "environment": "Local",
        "hosts": [
          {
            "id": "laptop",
            "label": "Developer laptop"
          }
        ],
        "instances": [
          {
            "id": "api-dev",
            "of": "api",
            "in": "laptop"
          },
          {
            "id": "db-dev",
            "of": "db",
            "in": "laptop"
          }
        ],
        "instanceConnections": [
          {
            "id": "query",
            "from": "api-dev",
            "to": "db-dev"
          }
        ]
      },
      {
        "key": "production",
        "title": "Orders API in production",
        "environment": "Production",
        "hosts": [
          {
            "id": "region",
            "label": "Region eu-central-1"
          },
          {
            "id": "node-a",
            "label": "Node A",
            "in": "region"
          },
          {
            "id": "node-b",
            "label": "Node B",
            "in": "region"
          },
          {
            "id": "data",
            "label": "Managed database",
            "in": "region"
          }
        ],
        "instances": [
          {
            "id": "lb-prod",
            "of": "lb",
            "in": "region"
          },
          {
            "id": "api-1",
            "of": "api",
            "in": "node-a"
          },
          {
            "id": "api-2",
            "of": "api",
            "in": "node-b"
          },
          {
            "id": "db-prod",
            "of": "db",
            "in": "data"
          }
        ],
        "instanceConnections": [
          {
            "id": "route",
            "from": "lb-prod",
            "to": "api-1"
          },
          {
            "id": "route",
            "from": "lb-prod",
            "to": "api-2"
          },
          {
            "id": "query",
            "from": "api-1",
            "to": "db-prod"
          },
          {
            "id": "query",
            "from": "api-2",
            "to": "db-prod"
          }
        ]
      }
    ]
  }
}
Focus
Orders API in production
Orders API in productionArchitecture diagram with 4 components and 4 connections in 4 boundaries. It shows the environment Production: 4 instances of 3 components of the model; only the connections listed for the instances are drawn. Region eu-central-1: Load balancer (lb-prod), Node A, Node B, Managed database. Node A (in Region eu-central-1): Orders API (api-1). Node B (in Region eu-central-1): Orders API (api-2). Managed database (in Region eu-central-1): Orders (db-prod). Nothing leads into Load balancer (lb-prod). Nothing leads out of Orders (db-prod). Load balancer (lb-prod) (service, load balancer): connects to Orders API (api-1) (routes, via HTTP) and Orders API (api-2) (routes, via HTTP). Orders API (api-1) (service): connects to Orders (db-prod) (reads, writes, via SQL). Orders API (api-2) (service): connects to Orders (db-prod) (reads, writes, via SQL). Orders (db-prod) (database): no outgoing connection.Region eu-central-1Managed databaseNode BNode ALoad balancer (lb-prod) → Orders API (api-1): routes [HTTP]Load balancer (lb-prod) → Orders API (api-2): routes [HTTP]Orders API (api-1) → Orders (db-prod): reads, writes [SQL]Orders API (api-2) → Orders (db-prod): reads, writes [SQL]routes[HTTP]routes[HTTP]reads, writes[SQL]reads, writes[SQL]Load balancer (lb-prod)Load balancer (lb-prod)Orders API (api-1) – Node.jsOrders API (api-1)Node.jsOrders API (api-2) – Node.jsOrders API (api-2)Node.jsOrders (db-prod) – PostgresOrders (db-prod)Postgres

Source: Operations handbook, orders model

Show chart data
Data for Orders API in production
InstanceKindBoundaryConnects to
Load balancer (lb-prod)service, load balancerRegion eu-central-1Orders API (api-1) (routes, via HTTP), Orders API (api-2) (routes, via HTTP)
Orders API (api-1)serviceRegion eu-central-1 › Node AOrders (db-prod) (reads, writes, via SQL)
Orders API (api-2)serviceRegion eu-central-1 › Node BOrders (db-prod) (reads, writes, via SQL)
Orders (db-prod)databaseRegion eu-central-1 › Managed database
  • Deployment view
  • Show where a model runs in each environment

Class and entity diagrams

Order model

examples/order-model.jsonDetail: Order model →
{
  "schemaVersion": 1,
  "type": "classes",
  "title": "Order model",
  "source": "Illustrative domain model",
  "width": 900,
  "height": 720,
  "classes": {
    "classes": [
      {
        "id": "customer",
        "label": "Customer",
        "attributes": [
          "+ id: Int",
          "+ name: String",
          "+ email: String"
        ],
        "methods": [
          "+ placeOrder(): Order"
        ]
      },
      {
        "id": "order",
        "label": "Order",
        "attributes": [
          "+ id: Int",
          "+ placedAt: Date",
          "+ status: Status"
        ],
        "methods": [
          "+ total(): Money",
          "+ cancel()"
        ]
      },
      {
        "id": "line",
        "label": "OrderLine",
        "attributes": [
          "+ quantity: Int",
          "+ price: Money"
        ]
      },
      {
        "id": "product",
        "label": "Product",
        "attributes": [
          "+ sku: String",
          "+ name: String",
          "+ price: Money"
        ]
      },
      {
        "id": "payment",
        "label": "Payment",
        "kind": "interface",
        "methods": [
          "+ charge(amount: Money): Receipt"
        ]
      },
      {
        "id": "card",
        "label": "CardPayment",
        "attributes": [
          "- number: String"
        ],
        "methods": [
          "+ charge(amount: Money): Receipt"
        ]
      },
      {
        "id": "status",
        "label": "Status",
        "kind": "enum",
        "attributes": [
          "PLACED",
          "PAID",
          "SHIPPED",
          "CANCELLED"
        ]
      }
    ],
    "relations": [
      {
        "from": "customer",
        "to": "order",
        "fromCardinality": "1",
        "toCardinality": "0..*",
        "label": "places"
      },
      {
        "from": "order",
        "to": "line",
        "kind": "composition",
        "fromCardinality": "1",
        "toCardinality": "1..*"
      },
      {
        "from": "line",
        "to": "product",
        "fromCardinality": "*",
        "toCardinality": "1"
      },
      {
        "from": "card",
        "to": "payment",
        "kind": "realization"
      },
      {
        "from": "order",
        "to": "payment",
        "kind": "dependency",
        "label": "paid by"
      },
      {
        "from": "order",
        "to": "status",
        "kind": "dependency"
      }
    ]
  }
}
Focus
Order model
Order modelClass diagram with 7 classes and 6 relations. Most connected: Order (4 connections). Bottleneck: Order; without it the diagram falls apart. Customer: 3 attributes, 1 method. Customer is associated with Order (1 : 0..*) [places]. Order: 3 attributes, 2 methods. Order is composed of OrderLine (1 : 1..*); depends on Payment [paid by]; depends on Status. OrderLine: 2 attributes, 0 methods. OrderLine is associated with Product (* : 1). Product: 3 attributes, 0 methods. Payment: 0 attributes, 1 method. CardPayment: 1 attribute, 1 method. CardPayment implements Payment. Status: 4 attributes, 0 methods.Customer → Order: places0..*1Order → OrderLine1..*1OrderLine → Product1*Payment → CardPaymentOrder → Payment: paid byOrder → Statusplacespaid byCustomerCustomer+ id: Int+ name: String+ email: String+ placeOrder(): OrderOrderOrder+ id: Int+ placedAt: Date+ status: Status+ total(): Money+ cancel()OrderLineOrderLine+ quantity: Int+ price: MoneyProductProduct+ sku: String+ name: String+ price: MoneyPayment – «interface»«interface»Payment+ charge(amount: Money): ReceiptCardPaymentCardPayment- number: String+ charge(amount: Money): ReceiptStatus – «enumeration»«enumeration»StatusPLACEDPAIDSHIPPEDCANCELLED

Source: Illustrative domain model

Show chart data
Data for Order model
ItemKindAttributesMethodsRelations
CustomerClass+ id: Int; + name: String; + email: String+ placeOrder(): Orderis associated with Order (1 : 0..*) [places]
OrderClass+ id: Int; + placedAt: Date; + status: Status+ total(): Money; + cancel()is composed of OrderLine (1 : 1..*); depends on Payment [paid by]; depends on Status
OrderLineClass+ quantity: Int; + price: Moneyis associated with Product (* : 1)
ProductClass+ sku: String; + name: String; + price: Money
PaymentInterface+ charge(amount: Money): Receipt
CardPaymentClass- number: String+ charge(amount: Money): Receiptimplements Payment
StatusEnumerationPLACED; PAID; SHIPPED; CANCELLED
  • Class diagram
  • Document a domain model

Shop database

examples/shop-schema.jsonDetail: Shop database →
{
  "schemaVersion": 1,
  "type": "classes",
  "title": "Shop database",
  "source": "Illustrative schema",
  "width": 820,
  "height": 520,
  "classes": {
    "classes": [
      {
        "id": "customers",
        "label": "customers",
        "kind": "entity",
        "attributes": [
          "id (PK)",
          "email",
          "created_at"
        ]
      },
      {
        "id": "orders",
        "label": "orders",
        "kind": "entity",
        "attributes": [
          "id (PK)",
          "customer_id (FK)",
          "placed_at",
          "status"
        ]
      },
      {
        "id": "items",
        "label": "order_items",
        "kind": "entity",
        "attributes": [
          "order_id (PK, FK)",
          "product_id (PK, FK)",
          "quantity"
        ]
      },
      {
        "id": "products",
        "label": "products",
        "kind": "entity",
        "attributes": [
          "id (PK)",
          "sku",
          "name",
          "price"
        ]
      }
    ],
    "relations": [
      {
        "from": "customers",
        "to": "orders",
        "fromCardinality": "1",
        "toCardinality": "0..*"
      },
      {
        "from": "orders",
        "to": "items",
        "fromCardinality": "1",
        "toCardinality": "1..*"
      },
      {
        "from": "products",
        "to": "items",
        "fromCardinality": "1",
        "toCardinality": "0..*"
      }
    ]
  }
}
Focus
Shop database
Shop databaseClass diagram with 4 classes and 3 relations. customers: 3 attributes, 0 methods. customers is associated with orders (1 : 0..*). orders: 4 attributes, 0 methods. orders is associated with order_items (1 : 1..*). order_items: 3 attributes, 0 methods. products: 4 attributes, 0 methods. products is associated with order_items (1 : 0..*).customers → orders0..*1orders → order_items1..*1products → order_items0..*1customerscustomersid (PK)emailcreated_atordersordersid (PK)customer_id (FK)placed_atstatusorder_itemsorder_itemsorder_id (PK, FK)product_id (PK, FK)quantityproductsproductsid (PK)skunameprice

Source: Illustrative schema

Show chart data
Data for Shop database
ItemKindAttributesMethodsRelations
customersEntityid (PK); email; created_atis associated with orders (1 : 0..*)
ordersEntityid (PK); customer_id (FK); placed_at; statusis associated with order_items (1 : 1..*)
order_itemsEntityorder_id (PK, FK); product_id (PK, FK); quantity
productsEntityid (PK); sku; name; priceis associated with order_items (1 : 0..*)
  • Entity-relationship diagram
  • Show a database schema

Shop modules

examples/shop-modules.jsonDetail: Shop modules →
{
  "schemaVersion": 1,
  "type": "classes",
  "title": "Shop modules",
  "source": "Illustrative domain model",
  "width": 900,
  "height": 860,
  "classes": {
    "packages": [
      {
        "id": "shop",
        "label": "Shop"
      },
      {
        "id": "ordering",
        "label": "Ordering",
        "in": "shop"
      },
      {
        "id": "catalog",
        "label": "Catalog",
        "in": "shop"
      },
      {
        "id": "billing",
        "label": "Billing"
      }
    ],
    "classes": [
      {
        "id": "customer",
        "label": "Customer",
        "attributes": [
          "+ id: Int",
          "+ name: String",
          "+ email: String"
        ],
        "methods": [
          "+ placeOrder(): Order"
        ]
      },
      {
        "id": "order",
        "label": "Order",
        "attributes": [
          "+ id: Int",
          "+ placedAt: Date",
          "+ status: Status"
        ],
        "methods": [
          "+ total(): Money",
          "+ cancel()"
        ],
        "in": "ordering"
      },
      {
        "id": "line",
        "label": "OrderLine",
        "attributes": [
          "+ quantity: Int",
          "+ price: Money"
        ],
        "in": "ordering"
      },
      {
        "id": "product",
        "label": "Product",
        "attributes": [
          "+ sku: String",
          "+ name: String",
          "+ price: Money"
        ],
        "in": "catalog"
      },
      {
        "id": "payment",
        "label": "Payment",
        "kind": "interface",
        "methods": [
          "+ charge(amount: Money): Receipt"
        ],
        "in": "billing"
      },
      {
        "id": "card",
        "label": "CardPayment",
        "attributes": [
          "- number: String"
        ],
        "methods": [
          "+ charge(amount: Money): Receipt"
        ],
        "in": "billing"
      },
      {
        "id": "status",
        "label": "Status",
        "kind": "enum",
        "attributes": [
          "PLACED",
          "PAID",
          "SHIPPED",
          "CANCELLED"
        ],
        "in": "ordering"
      }
    ],
    "relations": [
      {
        "from": "customer",
        "to": "order",
        "fromCardinality": "1",
        "toCardinality": "0..*",
        "label": "places"
      },
      {
        "from": "order",
        "to": "line",
        "kind": "composition",
        "fromCardinality": "1",
        "toCardinality": "1..*"
      },
      {
        "from": "line",
        "to": "product",
        "fromCardinality": "*",
        "toCardinality": "1"
      },
      {
        "from": "card",
        "to": "payment",
        "kind": "realization"
      },
      {
        "from": "order",
        "to": "payment",
        "kind": "dependency",
        "label": "paid by"
      },
      {
        "from": "order",
        "to": "status",
        "kind": "dependency"
      }
    ]
  }
}
Focus
Shop modules
Shop modulesClass diagram with 7 classes and 6 relations in 4 packages. Shop: Ordering, Catalog. Ordering (in Shop): Order, OrderLine, Status. Catalog (in Shop): Product. Billing: Payment, CardPayment. Most connected: Order (4 connections). Bottleneck: Order; without it the diagram falls apart. Customer: 3 attributes, 1 method. Customer is associated with Order (1 : 0..*) [places]. Order: 3 attributes, 2 methods. Order is composed of OrderLine (1 : 1..*); depends on Payment [paid by]; depends on Status. OrderLine: 2 attributes, 0 methods. OrderLine is associated with Product (* : 1). Product: 3 attributes, 0 methods. Payment: 0 attributes, 1 method. CardPayment: 1 attribute, 1 method. CardPayment implements Payment. Status: 4 attributes, 0 methods.BillingShopCatalogOrderingCustomer → Order: places0..*1Order → OrderLine1..*1OrderLine → Product1*Payment → CardPaymentOrder → Payment: paid byOrder → Statusplacespaid byCustomerCustomer+ id: Int+ name: String+ email: String+ placeOrder(): OrderOrderOrder+ id: Int+ placedAt: Date+ status: Status+ total(): Money+ cancel()OrderLineOrderLine+ quantity: Int+ price: MoneyProductProduct+ sku: String+ name: String+ price: MoneyPayment – «interface»«interface»Payment+ charge(amount: Money): ReceiptCardPaymentCardPayment- number: String+ charge(amount: Money): ReceiptStatus – «enumeration»«enumeration»StatusPLACEDPAIDSHIPPEDCANCELLED

Source: Illustrative domain model

Show chart data
Data for Shop modules
ItemKindPackageAttributesMethodsRelations
CustomerClass+ id: Int; + name: String; + email: String+ placeOrder(): Orderis associated with Order (1 : 0..*) [places]
OrderClassShop › Ordering+ id: Int; + placedAt: Date; + status: Status+ total(): Money; + cancel()is composed of OrderLine (1 : 1..*); depends on Payment [paid by]; depends on Status
OrderLineClassShop › Ordering+ quantity: Int; + price: Moneyis associated with Product (* : 1)
ProductClassShop › Catalog+ sku: String; + name: String; + price: Money
PaymentInterfaceBilling+ charge(amount: Money): Receipt
CardPaymentClassBilling- number: String+ charge(amount: Money): Receiptimplements Payment
StatusEnumerationShop › OrderingPLACED; PAID; SHIPPED; CANCELLED
  • Class diagram with packages
  • Show how a domain model is divided into modules

Orders and their invoices

examples/invoice-model.jsonDetail: Orders and their invoices →
{
  "schemaVersion": 1,
  "type": "classes",
  "title": "Orders and their invoices",
  "source": "Illustrative domain model",
  "width": 900,
  "height": 760,
  "classes": {
    "orientation": "portrait",
    "packages": [
      {
        "id": "sales",
        "label": "Sales"
      },
      {
        "id": "billing",
        "label": "Billing",
        "orientation": "landscape"
      }
    ],
    "classes": [
      {
        "id": "customer",
        "label": "Customer",
        "attributes": [
          "+ id: Int",
          "+ name: String"
        ],
        "in": "sales"
      },
      {
        "id": "order",
        "label": "Order",
        "attributes": [
          "+ id: Int",
          "+ placedAt: Date"
        ],
        "methods": [
          "+ total(): Money"
        ],
        "in": "sales"
      },
      {
        "id": "invoice",
        "label": "Invoice",
        "attributes": [
          "+ number: String",
          "+ issuedAt: Date"
        ],
        "methods": [
          "+ total(): Money"
        ],
        "in": "billing"
      },
      {
        "id": "line",
        "label": "InvoiceLine",
        "attributes": [
          "+ quantity: Int",
          "+ net: Money"
        ],
        "in": "billing"
      },
      {
        "id": "tax",
        "label": "TaxRate",
        "attributes": [
          "+ code: String",
          "+ percent: Decimal"
        ],
        "in": "billing"
      },
      {
        "id": "reminder",
        "label": "Reminder",
        "attributes": [
          "+ level: Int",
          "+ sentAt: Date"
        ]
      }
    ],
    "relations": [
      {
        "from": "customer",
        "to": "order",
        "fromCardinality": "1",
        "toCardinality": "0..*",
        "label": "places"
      },
      {
        "from": "order",
        "to": "invoice",
        "fromCardinality": "1",
        "toCardinality": "1..*",
        "label": "billed as"
      },
      {
        "from": "invoice",
        "to": "line",
        "kind": "composition",
        "fromCardinality": "1",
        "toCardinality": "1..*",
        "label": "lists"
      },
      {
        "from": "line",
        "to": "tax",
        "fromCardinality": "*",
        "toCardinality": "1",
        "label": "taxed at"
      },
      {
        "from": "invoice",
        "to": "reminder",
        "fromCardinality": "1",
        "toCardinality": "0..3",
        "label": "dunned by"
      }
    ]
  }
}
Focus
Orders and their invoices
Orders and their invoicesClass diagram with 6 classes and 5 relations in 2 packages. Sales: Customer, Order. Billing: Invoice, InvoiceLine, TaxRate. Most connected: Invoice (3 connections). Bottleneck: Invoice; without it the diagram falls apart. Customer: 2 attributes, 0 methods. Customer is associated with Order (1 : 0..*) [places]. Order: 2 attributes, 1 method. Order is associated with Invoice (1 : 1..*) [billed as]. Invoice: 2 attributes, 1 method. Invoice is composed of InvoiceLine (1 : 1..*) [lists]; is associated with Reminder (1 : 0..3) [dunned by]. InvoiceLine: 2 attributes, 0 methods. InvoiceLine is associated with TaxRate (* : 1) [taxed at]. TaxRate: 2 attributes, 0 methods. Reminder: 2 attributes, 0 methods.SalesCustomer → Order: places0..*1Order → Invoice: billed as1..*1Invoice → Reminder: dunned by0..31placesbilled asdunned byCustomerCustomer+ id: Int+ name: StringOrderOrder+ id: Int+ placedAt: Date+ total(): MoneyBillingInvoice → InvoiceLine: lists1..*1InvoiceLine → TaxRate: taxed at1*liststaxed atInvoiceInvoice+ number: String+ issuedAt: Date+ total(): MoneyInvoiceLineInvoiceLine+ quantity: Int+ net: MoneyTaxRateTaxRate+ code: String+ percent: DecimalReminderReminder+ level: Int+ sentAt: Date

Source: Illustrative domain model

Show chart data
Data for Orders and their invoices
ItemKindPackageAttributesMethodsRelations
CustomerClassSales+ id: Int; + name: Stringis associated with Order (1 : 0..*) [places]
OrderClassSales+ id: Int; + placedAt: Date+ total(): Moneyis associated with Invoice (1 : 1..*) [billed as]
InvoiceClassBilling+ number: String; + issuedAt: Date+ total(): Moneyis composed of InvoiceLine (1 : 1..*) [lists]; is associated with Reminder (1 : 0..3) [dunned by]
InvoiceLineClassBilling+ quantity: Int; + net: Moneyis associated with TaxRate (* : 1) [taxed at]
TaxRateClassBilling+ code: String; + percent: Decimal
ReminderClass+ level: Int; + sentAt: Date
  • Class diagram with an oriented package
  • Lay out one part of a model its own way

Subscription model

examples/subscription-model.jsonDetail: Subscription model →
{
  "schemaVersion": 1,
  "type": "classes",
  "title": "Subscription model",
  "source": "Illustrative domain model",
  "width": 900,
  "height": 780,
  "classes": {
    "classes": [
      {
        "id": "customer",
        "label": "Customer",
        "attributes": [
          "+ id: Int",
          "+ email: String"
        ]
      },
      {
        "id": "subscription",
        "label": "Subscription",
        "attributes": [
          "+ startsOn: Date",
          "+ renewsOn: Date"
        ],
        "methods": [
          "+ renew()",
          "+ cancel()"
        ]
      },
      {
        "id": "plan",
        "label": "Plan",
        "attributes": [
          "+ name: String",
          "+ monthly: Money"
        ]
      },
      {
        "id": "invoice",
        "label": "Invoice",
        "attributes": [
          "+ number: String",
          "+ total: Money"
        ]
      },
      {
        "id": "method",
        "label": "PaymentMethod",
        "kind": "interface",
        "methods": [
          "+ charge(amount: Money)"
        ]
      },
      {
        "id": "card",
        "label": "Card",
        "attributes": [
          "- token: String"
        ]
      }
    ],
    "relations": [
      {
        "from": "customer",
        "to": "subscription",
        "fromCardinality": "1",
        "toCardinality": "0..*",
        "label": "holds"
      },
      {
        "from": "subscription",
        "to": "plan",
        "fromCardinality": "*",
        "toCardinality": "1"
      },
      {
        "from": "subscription",
        "to": "invoice",
        "kind": "composition",
        "fromCardinality": "1",
        "toCardinality": "0..*"
      },
      {
        "from": "invoice",
        "to": "method",
        "kind": "dependency",
        "label": "paid with"
      },
      {
        "from": "card",
        "to": "method",
        "kind": "realization"
      }
    ],
    "notes": [
      {
        "on": "subscription",
        "text": "Renews on the same day each month; a cancelled subscription runs to the end of its period."
      },
      {
        "on": "plan",
        "text": "Prices are net; tax is added on the invoice."
      },
      {
        "on": "card",
        "text": "Stores only a token from the payment provider, never the card number."
      }
    ]
  }
}
Focus
Subscription model
Subscription modelClass diagram with 6 classes and 5 relations. Most connected: Subscription (3 connections). Bottleneck: Invoice; without it the diagram falls apart. Customer: 2 attributes, 0 methods. Customer is associated with Subscription (1 : 0..*) [holds]. Subscription: 2 attributes, 2 methods. Subscription is associated with Plan (* : 1); is composed of Invoice (1 : 0..*). Plan: 2 attributes, 0 methods. Invoice: 2 attributes, 0 methods. Invoice depends on PaymentMethod [paid with]. PaymentMethod: 0 attributes, 1 method. Card: 1 attribute, 0 methods. Card implements PaymentMethod. Note on Subscription: Renews on the same day each month; a cancelled subscription runs to the end of its period. Note on Plan: Prices are net; tax is added on the invoice. Note on Card: Stores only a token from the payment provider, never the card number.Customer → Subscription: holds0..*1Subscription → Plan1*Subscription → Invoice0..*1Invoice → PaymentMethod: paid withPaymentMethod → Cardholdspaid withCustomerCustomer+ id: Int+ email: StringSubscriptionSubscription+ startsOn: Date+ renewsOn: Date+ renew()+ cancel()PlanPlan+ name: String+ monthly: MoneyInvoiceInvoice+ number: String+ total: MoneyPaymentMethod – «interface»«interface»PaymentMethod+ charge(amount: Money)CardCard- token: StringRenews on the same day each month; a cancelled subscription runs to the end of its period.Renews on the same dayeach month; a cancelledsubscription runs to the endof its period.Prices are net; tax is added on the invoice.Prices are net; tax is addedon the invoice.Stores only a token from the payment provider, never the card number.Stores only a token fromthe payment provider, neverthe card number.

Source: Illustrative domain model

Show chart data
Data for Subscription model
ItemKindAttributesMethodsRelationsNotes
CustomerClass+ id: Int; + email: Stringis associated with Subscription (1 : 0..*) [holds]
SubscriptionClass+ startsOn: Date; + renewsOn: Date+ renew(); + cancel()is associated with Plan (* : 1); is composed of Invoice (1 : 0..*)Renews on the same day each month; a cancelled subscription runs to the end of its period.
PlanClass+ name: String; + monthly: MoneyPrices are net; tax is added on the invoice.
InvoiceClass+ number: String; + total: Moneydepends on PaymentMethod [paid with]
PaymentMethodInterface+ charge(amount: Money)
CardClass- token: Stringimplements PaymentMethodStores only a token from the payment provider, never the card number.
  • Class diagram with notes
  • Record rules a class box cannot show

Payments after the redesign

examples/payment-redesign.jsonDetail: Payments after the redesign →
{
  "schemaVersion": 1,
  "type": "classes",
  "title": "Payments after the redesign",
  "source": "Illustrative domain model",
  "width": 900,
  "height": 600,
  "classes": {
    "classes": [
      {
        "id": "order",
        "label": "Order",
        "attributes": [
          "+ id: Int",
          "+ total: Money"
        ],
        "methods": [
          "+ pay(): Receipt"
        ],
        "role": "critical"
      },
      {
        "id": "payment",
        "label": "Payment",
        "kind": "interface",
        "methods": [
          "+ charge(amount: Money): Receipt"
        ]
      },
      {
        "id": "card",
        "label": "CardPayment",
        "attributes": [
          "- token: String"
        ],
        "methods": [
          "+ charge(amount: Money): Receipt"
        ]
      },
      {
        "id": "wallet",
        "label": "WalletPayment",
        "attributes": [
          "- walletId: String"
        ],
        "methods": [
          "+ charge(amount: Money): Receipt"
        ],
        "role": "planned"
      },
      {
        "id": "invoice",
        "label": "PaperInvoice",
        "attributes": [
          "+ number: String",
          "+ dueAt: Date"
        ],
        "role": "deprecated"
      },
      {
        "id": "receipt",
        "label": "Receipt",
        "attributes": [
          "+ id: String",
          "+ paidAt: Date"
        ]
      }
    ],
    "relations": [
      {
        "from": "order",
        "to": "payment",
        "kind": "dependency",
        "label": "paid by",
        "role": "critical"
      },
      {
        "from": "card",
        "to": "payment",
        "kind": "realization"
      },
      {
        "from": "wallet",
        "to": "payment",
        "kind": "realization"
      },
      {
        "from": "order",
        "to": "invoice",
        "fromCardinality": "1",
        "toCardinality": "0..1",
        "role": "deprecated"
      },
      {
        "from": "order",
        "to": "receipt",
        "kind": "composition",
        "fromCardinality": "1",
        "toCardinality": "0..*",
        "role": "planned"
      }
    ]
  }
}
Focus
Payments after the redesign
Payments after the redesignClass diagram with 6 classes and 5 relations. Most connected: Order and Payment (3 connections each). Order: 2 attributes, 1 method. Order depends on Payment [paid by]; is associated with PaperInvoice (1 : 0..1); is composed of Receipt (1 : 0..*). Payment: 0 attributes, 1 method. CardPayment: 1 attribute, 1 method. CardPayment implements Payment. WalletPayment: 1 attribute, 1 method. WalletPayment implements Payment. PaperInvoice: 2 attributes, 0 methods. Receipt: 2 attributes, 0 methods. Roles: critical: Order, Order → Payment; planned: WalletPayment, Order → Receipt; deprecated: PaperInvoice, Order → PaperInvoice.Order → Payment: paid byPayment → CardPaymentPayment → WalletPaymentOrder → PaperInvoice0..11Order → Receipt0..*1paid byOrderOrder+ id: Int+ total: Money+ pay(): Receipt!Payment – «interface»«interface»Payment+ charge(amount: Money): ReceiptCardPaymentCardPayment- token: String+ charge(amount: Money): ReceiptWalletPaymentWalletPayment- walletId: String+ charge(amount: Money): Receipt+PaperInvoicePaperInvoice+ number: String+ dueAt: Date−ReceiptReceipt+ id: String+ paidAt: Date!Critical+Planned−Deprecated

Source: Illustrative domain model

Show chart data
Data for Payments after the redesign
ItemKindRoleAttributesMethodsRelations
OrderClasscritical+ id: Int; + total: Money+ pay(): Receiptdepends on Payment [paid by] (critical); is associated with PaperInvoice (1 : 0..1) (deprecated); is composed of Receipt (1 : 0..*) (planned)
PaymentInterface+ charge(amount: Money): Receipt
CardPaymentClass- token: String+ charge(amount: Money): Receiptimplements Payment
WalletPaymentClassplanned- walletId: String+ charge(amount: Money): Receiptimplements Payment
PaperInvoiceClassdeprecated+ number: String; + dueAt: Date
ReceiptClass+ id: String; + paidAt: Date
  • Class diagram with roles
  • Show what a redesign changes in a model

Trees and networks

Ownership structure of the Northwind group

examples/ownership-structure.jsonDetail: Ownership structure of the Northwind group →
{
  "schemaVersion": 1,
  "type": "tree",
  "title": "Ownership structure of the Northwind group",
  "source": "Illustrative values",
  "width": 1000,
  "height": 520,
  "tree": {
    "nodes": [
      {
        "id": "holding",
        "label": "Northwind Holding",
        "sublabel": "parent company"
      },
      {
        "id": "retail",
        "label": "Northwind Retail",
        "sublabel": "operating company",
        "parent": "holding",
        "link": "100 %",
        "collapsed": true
      },
      {
        "id": "logistics",
        "label": "Northwind Logistics",
        "sublabel": "operating company",
        "parent": "holding",
        "link": "75 %"
      },
      {
        "id": "digital",
        "label": "Northwind Digital",
        "sublabel": "software",
        "parent": "holding",
        "link": "60 %"
      },
      {
        "id": "stores",
        "label": "Stores",
        "parent": "retail",
        "link": "100 %"
      },
      {
        "id": "outlet",
        "label": "Outlet",
        "parent": "retail",
        "link": "51 %"
      },
      {
        "id": "fleet",
        "label": "Fleet",
        "sublabel": "leasing",
        "parent": "logistics",
        "link": "100 %"
      },
      {
        "id": "platform",
        "label": "Platform",
        "parent": "digital",
        "link": "100 %"
      },
      {
        "id": "labs",
        "label": "Labs",
        "sublabel": "joint venture",
        "parent": "digital",
        "link": "50 %"
      },
      {
        "id": "studio",
        "label": "Studio",
        "parent": "labs",
        "link": "100 %"
      }
    ]
  },
  "mobile": {
    "width": 448,
    "height": 540
  }
}
Focus
Ownership structure of the Northwind group
Ownership structure of the Northwind groupTree with 10 nodes in 4 levels. Root: Northwind Holding (parent company). Northwind Holding: Northwind Retail (operating company, 100 %), Northwind Logistics (operating company, 75 %), Northwind Digital (software, 60 %). Northwind Retail: Stores (100 %), Outlet (51 %). Northwind Logistics: Fleet (leasing, 100 %). Northwind Digital: Platform (100 %), Labs (joint venture, 50 %). Labs: Studio (100 %). Collapsed in the drawing, with everything below them listed here: Northwind Retail.Northwind Holding → Northwind Retail: 100 %Northwind Holding → Northwind Logistics: 75 %Northwind Logistics → Fleet: 100 %Northwind Holding → Northwind Digital: 60 %Northwind Digital → Platform: 100 %Northwind Digital → Labs: 50 %Labs → Studio: 100 %100 %75 %100 %60 %100 %50 %100 %Northwind Holding – parent companyNorthwind Holdingparent companyNorthwind Retail – operating company · +2Northwind Retailoperating company · +2Northwind Logistics – operating companyNorthwind Logisticsoperating companyNorthwind Digital – softwareNorthwind DigitalsoftwareFleet – leasingFleetleasingPlatformPlatformLabs – joint ventureLabsjoint ventureStudioStudio
Ownership structure of the Northwind groupTree with 10 nodes in 4 levels. Root: Northwind Holding (parent company). Northwind Holding: Northwind Retail (operating company, 100 %), Northwind Logistics (operating company, 75 %), Northwind Digital (software, 60 %). Northwind Retail: Stores (100 %), Outlet (51 %). Northwind Logistics: Fleet (leasing, 100 %). Northwind Digital: Platform (100 %), Labs (joint venture, 50 %). Labs: Studio (100 %). Collapsed in the drawing, with everything below them listed here: Northwind Retail.Northwind Holding → Northwind Retail: 100 %Northwind Holding → Northwind Logistics: 75 %Northwind Logistics → Fleet: 100 %Northwind Holding → Northwind Digital: 60 %Northwind Digital → Platform: 100 %Northwind Digital → Labs: 50 %Labs → Studio: 100 %100 %75 %100 %60 %100 %50 %100 %Northwind Holding – parent companyNorthwindHoldingparent companyNorthwind Retail – operating company · +2NorthwindRetailoperatingcompany · +2Northwind Logistics – operating companyNorthwindLogisticsoperatingcompanyNorthwind Digital – softwareNorthwindDigitalsoftwareFleet – leasingFleetleasingPlatformPlatformLabs – joint ventureLabsjoint ventureStudioStudio

Source: Illustrative values

Show chart data
Data for Ownership structure of the Northwind group
NodeLevelParentLinkChildrenCollapsed
Northwind Holding1Northwind Retail, Northwind Logistics, Northwind Digital
Northwind Retail2Northwind Holding100 %Stores, Outlet+2
Stores3Northwind Retail100 %
Outlet3Northwind Retail51 %
Northwind Logistics2Northwind Holding75 %Fleet
Fleet3Northwind Logistics100 %
Northwind Digital2Northwind Holding60 %Platform, Labs
Platform3Northwind Digital100 %
Labs3Northwind Digital50 %Studio
Studio4Labs100 %
  • Tree (phone variant)
  • Show who owns what

Northwind group: the digital branch

examples/ownership-focus.jsonDetail: Northwind group: the digital branch →
{
  "schemaVersion": 1,
  "type": "tree",
  "title": "Northwind group: the digital branch",
  "source": "Illustrative values",
  "width": 1000,
  "height": 520,
  "tree": {
    "nodes": [
      {
        "id": "holding",
        "label": "Northwind Holding",
        "sublabel": "parent company"
      },
      {
        "id": "retail",
        "label": "Northwind Retail",
        "sublabel": "operating company",
        "parent": "holding",
        "link": "100 %",
        "collapsed": true
      },
      {
        "id": "logistics",
        "label": "Northwind Logistics",
        "sublabel": "operating company",
        "parent": "holding",
        "link": "75 %"
      },
      {
        "id": "digital",
        "label": "Northwind Digital",
        "sublabel": "software",
        "parent": "holding",
        "link": "60 %"
      },
      {
        "id": "stores",
        "label": "Stores",
        "parent": "retail",
        "link": "100 %"
      },
      {
        "id": "outlet",
        "label": "Outlet",
        "parent": "retail",
        "link": "51 %"
      },
      {
        "id": "fleet",
        "label": "Fleet",
        "sublabel": "leasing",
        "parent": "logistics",
        "link": "100 %"
      },
      {
        "id": "platform",
        "label": "Platform",
        "parent": "digital",
        "link": "100 %"
      },
      {
        "id": "labs",
        "label": "Labs",
        "sublabel": "joint venture",
        "parent": "digital",
        "link": "50 %"
      },
      {
        "id": "studio",
        "label": "Studio",
        "parent": "labs",
        "link": "100 %"
      }
    ]
  },
  "mobile": {
    "width": 448,
    "height": 540
  },
  "emphasis": {
    "nodes": [
      "digital"
    ],
    "path": [
      "holding",
      "digital",
      "platform"
    ]
  },
  "legend": "auto"
}
Focus
Northwind group: the digital branch
Northwind group: the digital branchTree with 10 nodes in 4 levels. Root: Northwind Holding (parent company). Northwind Holding: Northwind Retail (operating company, 100 %), Northwind Logistics (operating company, 75 %), Northwind Digital (software, 60 %). Northwind Retail: Stores (100 %), Outlet (51 %). Northwind Logistics: Fleet (leasing, 100 %). Northwind Digital: Platform (100 %), Labs (joint venture, 50 %). Labs: Studio (100 %). Collapsed in the drawing, with everything below them listed here: Northwind Retail. Emphasized: Northwind Digital. Emphasized path: Northwind Holding → Northwind Digital → Platform. Legend: unit, emphasized, emphasized path.Northwind Holding → Northwind Retail: 100 %Northwind Holding → Northwind Logistics: 75 %Northwind Logistics → Fleet: 100 %Northwind Holding → Northwind Digital: 60 %Northwind Digital → Platform: 100 %Northwind Digital → Labs: 50 %Labs → Studio: 100 %100 %75 %100 %60 %100 %50 %100 %Northwind Holding – parent companyNorthwind Holdingparent companyNorthwind Retail – operating company · +2Northwind Retailoperating company · +2Northwind Logistics – operating companyNorthwind Logisticsoperating companyNorthwind Digital – softwareNorthwind DigitalsoftwareFleet – leasingFleetleasingPlatformPlatformLabs – joint ventureLabsjoint ventureStudioStudioUnitEmphasizedEmphasized path
Northwind group: the digital branchTree with 10 nodes in 4 levels. Root: Northwind Holding (parent company). Northwind Holding: Northwind Retail (operating company, 100 %), Northwind Logistics (operating company, 75 %), Northwind Digital (software, 60 %). Northwind Retail: Stores (100 %), Outlet (51 %). Northwind Logistics: Fleet (leasing, 100 %). Northwind Digital: Platform (100 %), Labs (joint venture, 50 %). Labs: Studio (100 %). Collapsed in the drawing, with everything below them listed here: Northwind Retail. Emphasized: Northwind Digital. Emphasized path: Northwind Holding → Northwind Digital → Platform. Legend: unit, emphasized, emphasized path.Northwind Holding → Northwind Retail: 100 %Northwind Holding → Northwind Logistics: 75 %Northwind Logistics → Fleet: 100 %Northwind Holding → Northwind Digital: 60 %Northwind Digital → Platform: 100 %Northwind Digital → Labs: 50 %Labs → Studio: 100 %100 %75 %100 %60 %100 %50 %100 %Northwind Holding – parent companyNorthwindHoldingparent companyNorthwind Retail – operating company · +2NorthwindRetailoperatingcompany · +2Northwind Logistics – operating companyNorthwindLogisticsoperatingcompanyNorthwind Digital – softwareNorthwindDigitalsoftwareFleet – leasingFleetleasingPlatformPlatformLabs – joint ventureLabsjoint ventureStudioStudioUnitEmphasizedEmphasized path

Source: Illustrative values

Show chart data
Data for Northwind group: the digital branch
NodeLevelParentLinkChildrenCollapsedEmphasis
Northwind Holding1Northwind Retail, Northwind Logistics, Northwind Digitalon emphasized path
Northwind Retail2Northwind Holding100 %Stores, Outlet+2
Stores3Northwind Retail100 %
Outlet3Northwind Retail51 %
Northwind Logistics2Northwind Holding75 %Fleet
Fleet3Northwind Logistics100 %
Northwind Digital2Northwind Holding60 %Platform, Labsemphasized, on emphasized path
Platform3Northwind Digital100 %on emphasized path
Labs3Northwind Digital50 %Studio
Studio4Labs100 %
  • Tree with emphasis and a legend
  • Follow one branch of a group

Three generations of the Reyes family

examples/family-tree.jsonDetail: Three generations of the Reyes family →
{
  "schemaVersion": 1,
  "type": "tree",
  "title": "Three generations of the Reyes family",
  "source": "Illustrative family",
  "width": 960,
  "height": 480,
  "tree": {
    "nodes": [
      {
        "id": "ana",
        "label": "Ana Reyes",
        "sublabel": "born 1948",
        "kind": "person"
      },
      {
        "id": "tomas",
        "label": "Tomás Reyes",
        "sublabel": "born 1945",
        "kind": "person",
        "partner": "ana"
      },
      {
        "id": "lena",
        "label": "Lena Reyes",
        "sublabel": "born 1974",
        "kind": "person",
        "parent": "ana"
      },
      {
        "id": "marc",
        "label": "Marc Duval",
        "sublabel": "born 1972",
        "kind": "person",
        "partner": "lena"
      },
      {
        "id": "paul",
        "label": "Paul Reyes",
        "sublabel": "born 1978",
        "kind": "person",
        "parent": "ana"
      },
      {
        "id": "sofia",
        "label": "Sofia Duval",
        "sublabel": "born 2003",
        "kind": "person",
        "parent": "lena"
      },
      {
        "id": "nico",
        "label": "Nico Duval",
        "sublabel": "born 2006",
        "kind": "person",
        "parent": "lena"
      },
      {
        "id": "estate",
        "label": "Family foundation",
        "sublabel": "owns the house",
        "kind": "external",
        "parent": "paul",
        "link": "trustee"
      }
    ]
  },
  "mobile": {
    "width": 448,
    "height": 560
  }
}
Focus
Three generations of the Reyes family
Three generations of the Reyes familyTree with 8 nodes in 3 levels. Root: Ana Reyes (born 1948) + Tomás Reyes (born 1945). Ana Reyes + Tomás Reyes: Lena Reyes (born 1974) + Marc Duval (born 1972), Paul Reyes (born 1978). Lena Reyes + Marc Duval: Sofia Duval (born 2003), Nico Duval (born 2006). Paul Reyes: Family foundation (owns the house, trustee).Ana Reyes + Tomás ReyesLena Reyes + Marc DuvalAna Reyes → Lena ReyesLena Reyes → Sofia DuvalLena Reyes → Nico DuvalAna Reyes → Paul ReyesPaul Reyes → Family foundation: trusteetrusteeAna Reyes – born 1948Ana Reyesborn 1948Tomás Reyes – born 1945Tomás Reyesborn 1945Lena Reyes – born 1974Lena Reyesborn 1974Marc Duval – born 1972Marc Duvalborn 1972Paul Reyes – born 1978Paul Reyesborn 1978Sofia Duval – born 2003Sofia Duvalborn 2003Nico Duval – born 2006Nico Duvalborn 2006Family foundation – owns the houseFamily foundationowns the house
Three generations of the Reyes familyTree with 8 nodes in 3 levels. Root: Ana Reyes (born 1948) + Tomás Reyes (born 1945). Ana Reyes + Tomás Reyes: Lena Reyes (born 1974) + Marc Duval (born 1972), Paul Reyes (born 1978). Lena Reyes + Marc Duval: Sofia Duval (born 2003), Nico Duval (born 2006). Paul Reyes: Family foundation (owns the house, trustee).Ana Reyes + Tomás ReyesLena Reyes + Marc DuvalAna Reyes → Lena ReyesLena Reyes → Sofia DuvalLena Reyes → Nico DuvalAna Reyes → Paul ReyesPaul Reyes → Family foundation: trusteetrusteeAna Reyes – born 1948Ana Reyesborn 1948Tomás Reyes – born 1945Tomás Reyesborn 1945Lena Reyes – born 1974Lena Reyesborn 1974Marc Duval – born 1972Marc Duvalborn 1972Paul Reyes – born 1978Paul Reyesborn 1978Sofia Duval – born 2003Sofia Duvalborn 2003Nico Duval – born 2006Nico Duvalborn 2006Family foundation – owns the houseFamilyfoundationowns the house

Source: Illustrative family

Show chart data
Data for Three generations of the Reyes family
NodeLevelParentPartnerLinkChildren
Ana Reyes1Tomás ReyesLena Reyes, Paul Reyes
Tomás Reyes1Ana Reyes
Lena Reyes2Ana ReyesMarc DuvalSofia Duval, Nico Duval
Marc Duval2Lena Reyes
Sofia Duval3Lena Reyes
Nico Duval3Lena Reyes
Paul Reyes2Ana ReyesFamily foundation
Family foundation3Paul Reyestrustee
  • Tree (couples)
  • Draw a family or a household

Product strategy 2026

examples/product-strategy.jsonDetail: Product strategy 2026 →
{
  "schemaVersion": 1,
  "type": "tree",
  "title": "Product strategy 2026",
  "source": "Illustrative themes and measures",
  "width": 920,
  "height": 540,
  "tree": {
    "layout": "radial",
    "nodes": [
      {
        "id": "platform",
        "label": "Platform",
        "sublabel": "strategy 2026"
      },
      {
        "id": "ux",
        "label": "Experience",
        "parent": "platform"
      },
      {
        "id": "data",
        "label": "Data",
        "parent": "platform"
      },
      {
        "id": "ops",
        "label": "Operations",
        "parent": "platform"
      },
      {
        "id": "growth",
        "label": "Growth",
        "parent": "platform"
      },
      {
        "id": "design-system",
        "label": "Design system",
        "parent": "ux"
      },
      {
        "id": "mobile",
        "label": "Mobile first",
        "parent": "ux"
      },
      {
        "id": "accessibility",
        "label": "Accessibility",
        "parent": "ux"
      },
      {
        "id": "tracking",
        "label": "Tracking",
        "parent": "data"
      },
      {
        "id": "reporting",
        "label": "Reporting",
        "parent": "data"
      },
      {
        "id": "deploy",
        "label": "Deployment",
        "parent": "ops"
      },
      {
        "id": "monitoring",
        "label": "Monitoring",
        "parent": "ops"
      },
      {
        "id": "seo",
        "label": "Search",
        "parent": "growth"
      },
      {
        "id": "crm",
        "label": "CRM automation",
        "parent": "growth"
      },
      {
        "id": "partners",
        "label": "Partner network",
        "kind": "external",
        "parent": "growth"
      }
    ]
  }
}
Focus
Product strategy 2026
Product strategy 2026Mind map (radial tree) with 15 nodes in 3 levels. Centre: Platform (strategy 2026). Platform: Experience, Data, Operations, Growth. Experience: Design system, Mobile first, Accessibility. Data: Tracking, Reporting. Operations: Deployment, Monitoring. Growth: Search, CRM automation, Partner network.Platform → ExperienceExperience → Design systemExperience → Mobile firstExperience → AccessibilityPlatform → DataData → TrackingData → ReportingPlatform → OperationsOperations → DeploymentOperations → MonitoringPlatform → GrowthGrowth → SearchGrowth → CRM automationGrowth → Partner networkPlatform – strategy 2026Platformstrategy 2026ExperienceExperienceDataDataOperationsOperationsGrowthGrowthDesign systemDesign systemMobile firstMobile firstAccessibilityAccessibilityTrackingTrackingReportingReportingDeploymentDeploymentMonitoringMonitoringSearchSearchCRM automationCRM automationPartner networkPartner network

Source: Illustrative themes and measures

Show chart data
Data for Product strategy 2026
NodeLevelParentChildren
Platform1Experience, Data, Operations, Growth
Experience2PlatformDesign system, Mobile first, Accessibility
Design system3Experience
Mobile first3Experience
Accessibility3Experience
Data2PlatformTracking, Reporting
Tracking3Data
Reporting3Data
Operations2PlatformDeployment, Monitoring
Deployment3Operations
Monitoring3Operations
Growth2PlatformSearch, CRM automation, Partner network
Search3Growth
CRM automation3Growth
Partner network3Growth
  • Mind map (radial tree)
  • Lay out themes around one centre

How alike the climates of twelve European capitals are

examples/climate-similarity.jsonDetail: How alike the climates of twelve European capitals are →
{
  "schemaVersion": 1,
  "type": "tree",
  "title": "How alike the climates of twelve European capitals are",
  "source": "Mean temperature and precipitation, illustrative values",
  "width": 720,
  "height": 440,
  "tree": {
    "distances": {
      "labels": [
        "Lisbon",
        "Madrid",
        "Rome",
        "Athens",
        "Paris",
        "London",
        "Berlin",
        "Warsaw",
        "Oslo",
        "Stockholm",
        "Helsinki",
        "Vienna"
      ],
      "matrix": [
        [
          0,
          5.4,
          2,
          5.2,
          5.4,
          6.5,
          7.9,
          9.4,
          11.5,
          10.9,
          11.7,
          7.3
        ],
        [
          5.4,
          0,
          6,
          3.5,
          4.4,
          4.7,
          5.5,
          6.8,
          10.5,
          8.2,
          9.8,
          5.6
        ],
        [
          2,
          6,
          0,
          6.8,
          4.2,
          5.4,
          6.8,
          8.2,
          9.8,
          9.7,
          10.2,
          6
        ],
        [
          5.2,
          3.5,
          6.8,
          0,
          7.3,
          7.9,
          8.9,
          10.3,
          13.8,
          11.7,
          13.2,
          8.8
        ],
        [
          5.4,
          4.4,
          4.2,
          7.3,
          0,
          1.2,
          2.6,
          4.1,
          6.6,
          5.5,
          6.4,
          1.9
        ],
        [
          6.5,
          4.7,
          5.4,
          7.9,
          1.2,
          0,
          1.4,
          2.9,
          5.9,
          4.4,
          5.5,
          1
        ],
        [
          7.9,
          5.5,
          6.8,
          8.9,
          2.6,
          1.4,
          0,
          1.5,
          5,
          3,
          4.3,
          0.9
        ],
        [
          9.4,
          6.8,
          8.2,
          10.3,
          4.1,
          2.9,
          1.5,
          0,
          4.2,
          1.5,
          3.1,
          2.2
        ],
        [
          11.5,
          10.5,
          9.8,
          13.8,
          6.6,
          5.9,
          5,
          4.2,
          0,
          3.7,
          1.8,
          4.9
        ],
        [
          10.9,
          8.2,
          9.7,
          11.7,
          5.5,
          4.4,
          3,
          1.5,
          3.7,
          0,
          2.1,
          3.6
        ],
        [
          11.7,
          9.8,
          10.2,
          13.2,
          6.4,
          5.5,
          4.3,
          3.1,
          1.8,
          2.1,
          0,
          4.5
        ],
        [
          7.3,
          5.6,
          6,
          8.8,
          1.9,
          1,
          0.9,
          2.2,
          4.9,
          3.6,
          4.5,
          0
        ]
      ]
    }
  }
}
How alike the climates of twelve European capitals are
How alike the climates of twelve European capitals areDendrogram of 12 items, joined by average linkage (the mean distance between two clusters). Closest: Berlin and Vienna (0.9). The last join, at 8.384375, brings together two groups: Lisbon, Rome, Madrid and Athens; Paris, London, Berlin, Vienna, Warsaw, Stockholm, Oslo and Helsinki. Order of the items: Lisbon, Rome, Madrid, Athens, Paris, London, Berlin, Vienna, Warsaw, Stockholm, Oslo and Helsinki.0246810Distance at the join (average linkage)Berlin + Vienna: 0.9Paris + London: 1.2Warsaw + Stockholm: 1.5{Paris, London} + {Berlin, Vienna}: 1.725Oslo + Helsinki: 1.8Lisbon + Rome: 2{Warsaw, Stockholm} + {Oslo, Helsinki}: 3.275Madrid + Athens: 3.5{Paris, London, Berlin, … +1} + {Warsaw, Stockholm, Oslo, … +1}: 4.39375{Lisbon, Rome} + {Madrid, Athens}: 5.85{Lisbon, Rome, Madrid, … +1} + {Paris, London, Berlin, … +5}: 8.384375LisbonRomeMadridAthensParisLondonBerlinViennaWarsawStockholmOsloHelsinki

Source: Mean temperature and precipitation, illustrative values

Show chart data
Data for How alike the climates of twelve European capitals are
StepJoinsDistanceItems
1Berlin + Vienna0.92
2Paris + London1.22
3Warsaw + Stockholm1.52
4{Paris, London} + {Berlin, Vienna}1.7254
5Oslo + Helsinki1.82
6Lisbon + Rome22
7{Warsaw, Stockholm} + {Oslo, Helsinki}3.2754
8Madrid + Athens3.52
9{Paris, London, Berlin, … +1} + {Warsaw, Stockholm, Oslo, … +1}4.393758
10{Lisbon, Rome} + {Madrid, Athens}5.854
11{Lisbon, Rome, Madrid, … +1} + {Paris, London, Berlin, … +5}8.38437512
  • Dendrogram from a distance matrix
  • Show which items belong together

Budget by department

examples/department-budgets.jsonDetail: Budget by department →
{
  "schemaVersion": 1,
  "type": "tree",
  "title": "Budget by department",
  "source": "Annual plan",
  "width": 960,
  "height": 300,
  "tree": {
    "valueLabel": "Budget (m €)",
    "nodes": [
      {
        "id": "board",
        "label": "Executive board",
        "value": 4.2
      },
      {
        "id": "product",
        "label": "Product",
        "parent": "board",
        "value": 18.5
      },
      {
        "id": "sales",
        "label": "Sales",
        "parent": "board",
        "value": 11
      },
      {
        "id": "finance",
        "label": "Finance",
        "parent": "board",
        "value": 3.1
      },
      {
        "id": "design",
        "label": "Design",
        "parent": "product",
        "value": 2.4
      },
      {
        "id": "engineering",
        "label": "Engineering",
        "parent": "product",
        "value": 14.8
      },
      {
        "id": "research",
        "label": "Research",
        "parent": "product",
        "value": 1.3
      },
      {
        "id": "field",
        "label": "Field sales",
        "parent": "sales",
        "value": 7.6
      },
      {
        "id": "partners",
        "label": "Partner channel",
        "parent": "sales",
        "value": 3.4
      },
      {
        "id": "controlling",
        "label": "Controlling",
        "parent": "finance",
        "value": 1.2
      },
      {
        "id": "accounting",
        "label": "Accounting",
        "parent": "finance",
        "value": 1.9
      }
    ]
  }
}
Focus
Budget by department
Budget by departmentTree with 11 nodes in 3 levels. Root: Executive board. Executive board: Product, Sales, Finance. Product: Design, Engineering, Research. Sales: Field sales, Partner channel. Finance: Controlling, Accounting. Color shows Budget (m €), from 1.2 (lightest) to 18.5 (darkest): Executive board 4.2, Product 18.5, Design 2.4, Engineering 14.8, Research 1.3, Sales 11, Field sales 7.6, Partner channel 3.4, Finance 3.1, Controlling 1.2, Accounting 1.9.Executive board → ProductProduct → DesignProduct → EngineeringProduct → ResearchExecutive board → SalesSales → Field salesSales → Partner channelExecutive board → FinanceFinance → ControllingFinance → AccountingExecutive boardExecutive boardProductProductSalesSalesFinanceFinanceDesignDesignEngineeringEngineeringResearchResearchField salesField salesPartner channelPartner channelControllingControllingAccountingAccountingBudget (m €)1.218.5

Source: Annual plan

Show chart data
Data for Budget by department
NodeLevelParentBudget (m €)Children
Executive board14.2Product, Sales, Finance
Product2Executive board18.5Design, Engineering, Research
Design3Product2.4
Engineering3Product14.8
Research3Product1.3
Sales2Executive board11Field sales, Partner channel
Field sales3Sales7.6
Partner channel3Sales3.4
Finance2Executive board3.1Controlling, Accounting
Controlling3Finance1.2
Accounting3Finance1.9
  • Tree with boxes colored by value
  • Show where the money goes in an organization

Joint papers between the members of four institutes

examples/co-authors.jsonDetail: Joint papers between the members of four institutes →
{
  "schemaVersion": 1,
  "type": "network",
  "title": "Joint papers between the members of four institutes",
  "source": "Publication database, 2021–2025",
  "width": 820,
  "height": 640,
  "mobile": {
    "width": 360,
    "height": 560
  },
  "network": {
    "nodes": [
      {
        "id": "weber",
        "label": "Weber",
        "group": "Physics"
      },
      {
        "id": "nair",
        "label": "Nair",
        "group": "Physics"
      },
      {
        "id": "costa",
        "label": "Costa",
        "group": "Physics"
      },
      {
        "id": "lindqvist",
        "label": "Lindqvist",
        "group": "Chemistry"
      },
      {
        "id": "okafor",
        "label": "Okafor",
        "group": "Chemistry"
      },
      {
        "id": "tanaka",
        "label": "Tanaka",
        "group": "Chemistry"
      },
      {
        "id": "moreau",
        "label": "Moreau",
        "group": "Biology"
      },
      {
        "id": "silva",
        "label": "Silva",
        "group": "Biology"
      },
      {
        "id": "hughes",
        "label": "Hughes",
        "group": "Biology"
      },
      {
        "id": "kowalski",
        "label": "Kowalski",
        "group": "Biology"
      },
      {
        "id": "berger",
        "label": "Berger",
        "group": "Computing"
      },
      {
        "id": "yilmaz",
        "label": "Yilmaz",
        "group": "Computing"
      },
      {
        "id": "chen",
        "label": "Chen",
        "group": "Computing"
      },
      {
        "id": "adeyemi",
        "label": "Adeyemi",
        "group": "Computing"
      }
    ],
    "edges": [
      {
        "from": "weber",
        "to": "nair",
        "weight": 9
      },
      {
        "from": "weber",
        "to": "costa",
        "weight": 4
      },
      {
        "from": "nair",
        "to": "costa",
        "weight": 6
      },
      {
        "from": "lindqvist",
        "to": "okafor",
        "weight": 7
      },
      {
        "from": "okafor",
        "to": "tanaka",
        "weight": 3
      },
      {
        "from": "lindqvist",
        "to": "tanaka",
        "weight": 2
      },
      {
        "from": "moreau",
        "to": "silva",
        "weight": 8
      },
      {
        "from": "silva",
        "to": "hughes",
        "weight": 5
      },
      {
        "from": "hughes",
        "to": "kowalski",
        "weight": 4
      },
      {
        "from": "moreau",
        "to": "kowalski",
        "weight": 2
      },
      {
        "from": "berger",
        "to": "yilmaz",
        "weight": 6
      },
      {
        "from": "yilmaz",
        "to": "chen",
        "weight": 5
      },
      {
        "from": "chen",
        "to": "adeyemi",
        "weight": 3
      },
      {
        "from": "costa",
        "to": "lindqvist",
        "weight": 3
      },
      {
        "from": "okafor",
        "to": "silva",
        "weight": 4
      },
      {
        "from": "tanaka",
        "to": "hughes",
        "weight": 1
      },
      {
        "from": "chen",
        "to": "nair",
        "weight": 5
      },
      {
        "from": "yilmaz",
        "to": "silva",
        "weight": 6
      },
      {
        "from": "adeyemi",
        "to": "moreau",
        "weight": 2
      },
      {
        "from": "berger",
        "to": "weber",
        "weight": 1
      }
    ]
  }
}
Focus
Joint papers between the members of four institutes
Joint papers between the members of four institutesNetwork with 14 nodes and 20 connections in 4 groups: Physics, Chemistry, Biology and Computing. Most connected: Silva (4 connections). Heaviest connection: Weber → Nair (9). Nair (group Physics): connected to Weber (weight 9), Costa (weight 6) and Chen (weight 5). Weber (group Physics): connected to Nair (weight 9), Costa (weight 4) and Berger (weight 1). Costa (group Physics): connected to Weber (weight 4), Nair (weight 6) and Lindqvist (weight 3). Lindqvist (group Chemistry): connected to Okafor (weight 7), Tanaka (weight 2) and Costa (weight 3). Tanaka (group Chemistry): connected to Okafor (weight 3), Lindqvist (weight 2) and Hughes (weight 1). Okafor (group Chemistry): connected to Lindqvist (weight 7), Tanaka (weight 3) and Silva (weight 4). Moreau (group Biology): connected to Silva (weight 8), Kowalski (weight 2) and Adeyemi (weight 2). Silva (group Biology): connected to Moreau (weight 8), Hughes (weight 5), Okafor (weight 4) and Yilmaz (weight 6). Hughes (group Biology): connected to Silva (weight 5), Kowalski (weight 4) and Tanaka (weight 1). Kowalski (group Biology): connected to Hughes (weight 4) and Moreau (weight 2). Berger (group Computing): connected to Yilmaz (weight 6) and Weber (weight 1). Yilmaz (group Computing): connected to Berger (weight 6), Chen (weight 5) and Silva (weight 6). Chen (group Computing): connected to Yilmaz (weight 5), Adeyemi (weight 3) and Nair (weight 5). Adeyemi (group Computing): connected to Chen (weight 3) and Moreau (weight 2).Weber – Nair: weight 9Weber – Costa: weight 4Nair – Costa: weight 6Lindqvist – Okafor: weight 7Okafor – Tanaka: weight 3Lindqvist – Tanaka: weight 2Moreau – Silva: weight 8Silva – Hughes: weight 5Hughes – Kowalski: weight 4Moreau – Kowalski: weight 2Berger – Yilmaz: weight 6Yilmaz – Chen: weight 5Chen – Adeyemi: weight 3Costa – Lindqvist: weight 3Okafor – Silva: weight 4Tanaka – Hughes: weight 1Chen – Nair: weight 5Yilmaz – Silva: weight 6Adeyemi – Moreau: weight 2Berger – Weber: weight 1Nair (Physics)NairWeber (Physics)WeberCosta (Physics)CostaLindqvist (Chemistry)LindqvistTanaka (Chemistry)TanakaOkafor (Chemistry)OkaforMoreau (Biology)MoreauSilva (Biology)SilvaHughes (Biology)HughesKowalski (Biology)KowalskiBerger (Computing)BergerYilmaz (Computing)YilmazChen (Computing)ChenAdeyemi (Computing)AdeyemiPhysicsChemistryBiologyComputing
Joint papers between the members of four institutesNetwork with 14 nodes and 20 connections in 4 groups: Physics, Chemistry, Biology and Computing. Most connected: Silva (4 connections). Heaviest connection: Weber → Nair (9). Nair (group Physics): connected to Weber (weight 9), Costa (weight 6) and Chen (weight 5). Weber (group Physics): connected to Nair (weight 9), Costa (weight 4) and Berger (weight 1). Costa (group Physics): connected to Weber (weight 4), Nair (weight 6) and Lindqvist (weight 3). Lindqvist (group Chemistry): connected to Okafor (weight 7), Tanaka (weight 2) and Costa (weight 3). Tanaka (group Chemistry): connected to Okafor (weight 3), Lindqvist (weight 2) and Hughes (weight 1). Okafor (group Chemistry): connected to Lindqvist (weight 7), Tanaka (weight 3) and Silva (weight 4). Moreau (group Biology): connected to Silva (weight 8), Kowalski (weight 2) and Adeyemi (weight 2). Silva (group Biology): connected to Moreau (weight 8), Hughes (weight 5), Okafor (weight 4) and Yilmaz (weight 6). Hughes (group Biology): connected to Silva (weight 5), Kowalski (weight 4) and Tanaka (weight 1). Kowalski (group Biology): connected to Hughes (weight 4) and Moreau (weight 2). Berger (group Computing): connected to Yilmaz (weight 6) and Weber (weight 1). Yilmaz (group Computing): connected to Berger (weight 6), Chen (weight 5) and Silva (weight 6). Chen (group Computing): connected to Yilmaz (weight 5), Adeyemi (weight 3) and Nair (weight 5). Adeyemi (group Computing): connected to Chen (weight 3) and Moreau (weight 2).Weber – Nair: weight 9Weber – Costa: weight 4Nair – Costa: weight 6Lindqvist – Okafor: weight 7Okafor – Tanaka: weight 3Lindqvist – Tanaka: weight 2Moreau – Silva: weight 8Silva – Hughes: weight 5Hughes – Kowalski: weight 4Moreau – Kowalski: weight 2Berger – Yilmaz: weight 6Yilmaz – Chen: weight 5Chen – Adeyemi: weight 3Costa – Lindqvist: weight 3Okafor – Silva: weight 4Tanaka – Hughes: weight 1Chen – Nair: weight 5Yilmaz – Silva: weight 6Adeyemi – Moreau: weight 2Berger – Weber: weight 1Nair (Physics)NairWeber (Physics)WeberCosta (Physics)CostaLindqvist (Chemistry)LindqvistTanaka (Chemistry)TanakaOkafor (Chemistry)OkaforMoreau (Biology)MoreauSilva (Biology)SilvaHughes (Biology)HughesKowalski (Biology)KowalskiBerger (Computing)BergerYilmaz (Computing)YilmazChen (Computing)ChenAdeyemi (Computing)AdeyemiPhysicsChemistryBiologyComputing

Source: Publication database, 2021–2025

Show chart data
Data for Joint papers between the members of four institutes
NodeGroupConnects to
NairPhysicsWeber (weight 9), Costa (weight 6), Chen (weight 5)
WeberPhysicsNair (weight 9), Costa (weight 4), Berger (weight 1)
CostaPhysicsWeber (weight 4), Nair (weight 6), Lindqvist (weight 3)
LindqvistChemistryOkafor (weight 7), Tanaka (weight 2), Costa (weight 3)
TanakaChemistryOkafor (weight 3), Lindqvist (weight 2), Hughes (weight 1)
OkaforChemistryLindqvist (weight 7), Tanaka (weight 3), Silva (weight 4)
MoreauBiologySilva (weight 8), Kowalski (weight 2), Adeyemi (weight 2)
SilvaBiologyMoreau (weight 8), Hughes (weight 5), Okafor (weight 4), Yilmaz (weight 6)
HughesBiologySilva (weight 5), Kowalski (weight 4), Tanaka (weight 1)
KowalskiBiologyHughes (weight 4), Moreau (weight 2)
BergerComputingYilmaz (weight 6), Weber (weight 1)
YilmazComputingBerger (weight 6), Chen (weight 5), Silva (weight 6)
ChenComputingYilmaz (weight 5), Adeyemi (weight 3), Nair (weight 5)
AdeyemiComputingChen (weight 3), Moreau (weight 2)
  • Network on a circle
  • Show who works with whom

What the checkout service depends on

examples/service-dependencies.jsonDetail: What the checkout service depends on →
{
  "schemaVersion": 1,
  "type": "network",
  "title": "What the checkout service depends on",
  "source": "Service catalogue",
  "width": 900,
  "height": 640,
  "network": {
    "layout": "rings",
    "center": "checkout",
    "directed": true,
    "nodes": [
      {
        "id": "checkout",
        "label": "Checkout",
        "group": "Shop"
      },
      {
        "id": "cart",
        "label": "Cart",
        "group": "Shop"
      },
      {
        "id": "pricing",
        "label": "Pricing",
        "group": "Shop"
      },
      {
        "id": "payments",
        "label": "Payments",
        "group": "Finance"
      },
      {
        "id": "auth",
        "label": "Sign-in",
        "group": "Platform"
      },
      {
        "id": "catalog",
        "label": "Catalog",
        "group": "Shop"
      },
      {
        "id": "tax",
        "label": "Tax rules",
        "group": "Finance"
      },
      {
        "id": "fraud",
        "label": "Fraud check",
        "group": "Finance"
      },
      {
        "id": "ledger",
        "label": "Ledger",
        "group": "Finance"
      },
      {
        "id": "users",
        "label": "User store",
        "group": "Platform"
      },
      {
        "id": "search",
        "label": "Search",
        "group": "Shop"
      },
      {
        "id": "events",
        "label": "Event bus",
        "group": "Platform"
      },
      {
        "id": "metrics",
        "label": "Metrics",
        "group": "Platform"
      }
    ],
    "edges": [
      {
        "from": "checkout",
        "to": "cart"
      },
      {
        "from": "checkout",
        "to": "pricing"
      },
      {
        "from": "checkout",
        "to": "payments"
      },
      {
        "from": "checkout",
        "to": "auth"
      },
      {
        "from": "cart",
        "to": "catalog"
      },
      {
        "from": "pricing",
        "to": "catalog"
      },
      {
        "from": "pricing",
        "to": "tax"
      },
      {
        "from": "payments",
        "to": "fraud"
      },
      {
        "from": "payments",
        "to": "ledger"
      },
      {
        "from": "auth",
        "to": "users"
      },
      {
        "from": "catalog",
        "to": "search"
      },
      {
        "from": "ledger",
        "to": "events"
      },
      {
        "from": "fraud",
        "to": "events",
        "dash": "dashed"
      },
      {
        "from": "events",
        "to": "metrics",
        "dash": "dashed"
      }
    ]
  }
}
Focus
What the checkout service depends on
What the checkout service depends onNetwork with 13 nodes and 14 connections in 3 groups: Shop, Finance and Platform. In rings around Checkout: 1 step away: Cart, Pricing, Payments and Sign-in; 2 steps away: Catalog, Tax rules, Fraud check, Ledger and User store; 3 steps away: Search and Event bus; 4 steps away: Metrics. Most connected: Checkout (4 connections). Nothing leads into Checkout. Bottlenecks: Checkout and Payments; without either the diagram falls apart. Checkout (group Shop): leads to Cart, Pricing, Payments and Sign-in. Cart (group Shop): leads to Catalog. Pricing (group Shop): leads to Catalog and Tax rules. Payments (group Finance): leads to Fraud check and Ledger. Sign-in (group Platform): leads to User store. Catalog (group Shop): leads to Search. Tax rules (group Finance): no outgoing connection. Fraud check (group Finance): leads to Event bus. Ledger (group Finance): leads to Event bus. User store (group Platform): no outgoing connection. Search (group Shop): no outgoing connection. Event bus (group Platform): leads to Metrics. Metrics (group Platform): no outgoing connection.Checkout → CartCheckout → PricingCheckout → PaymentsCheckout → Sign-inCart → CatalogPricing → CatalogPricing → Tax rulesPayments → Fraud checkPayments → LedgerSign-in → User storeCatalog → SearchLedger → Event busFraud check → Event busEvent bus → MetricsCheckout (Shop)CheckoutCart (Shop)CartPricing (Shop)PricingPayments (Finance)PaymentsSign-in (Platform)Sign-inCatalog (Shop)CatalogTax rules (Finance)Tax rulesFraud check (Finance)Fraud checkLedger (Finance)LedgerUser store (Platform)User storeSearch (Shop)SearchEvent bus (Platform)Event busMetrics (Platform)MetricsShopFinancePlatform

Source: Service catalogue

Show chart data
Data for What the checkout service depends on
NodeGroupRingLeads to
CheckoutShopCenterCart, Pricing, Payments, Sign-in
CartShop1Catalog
PricingShop1Catalog, Tax rules
PaymentsFinance1Fraud check, Ledger
Sign-inPlatform1User store
CatalogShop2Search
Tax rulesFinance2
Fraud checkFinance2Event bus
LedgerFinance2Event bus
User storePlatform2
SearchShop3
Event busPlatform3Metrics
MetricsPlatform4
  • Network in rings around one node
  • Show what one thing depends on

Checkout dependencies: the payment chain

examples/dependencies-focus.jsonDetail: Checkout dependencies: the payment chain →
{
  "schemaVersion": 1,
  "type": "network",
  "title": "Checkout dependencies: the payment chain",
  "source": "Service catalogue",
  "width": 900,
  "height": 560,
  "network": {
    "layout": "rings",
    "center": "checkout",
    "directed": true,
    "nodes": [
      {
        "id": "checkout",
        "label": "Checkout",
        "group": "Shop"
      },
      {
        "id": "cart",
        "label": "Cart",
        "group": "Shop"
      },
      {
        "id": "pricing",
        "label": "Pricing",
        "group": "Shop"
      },
      {
        "id": "payments",
        "label": "Payments",
        "group": "Finance"
      },
      {
        "id": "auth",
        "label": "Sign-in",
        "group": "Platform"
      },
      {
        "id": "fraud",
        "label": "Fraud check",
        "group": "Finance"
      },
      {
        "id": "ledger",
        "label": "Ledger",
        "group": "Finance"
      },
      {
        "id": "events",
        "label": "Event bus",
        "group": "Platform"
      }
    ],
    "edges": [
      {
        "from": "checkout",
        "to": "cart"
      },
      {
        "from": "checkout",
        "to": "pricing"
      },
      {
        "from": "checkout",
        "to": "payments"
      },
      {
        "from": "checkout",
        "to": "auth"
      },
      {
        "from": "payments",
        "to": "fraud"
      },
      {
        "from": "payments",
        "to": "ledger"
      },
      {
        "from": "ledger",
        "to": "events"
      },
      {
        "from": "fraud",
        "to": "events",
        "dash": "dashed"
      }
    ]
  },
  "emphasis": {
    "nodes": [
      "payments"
    ],
    "path": [
      "checkout",
      "payments",
      "ledger",
      "events"
    ]
  },
  "legend": "auto",
  "mobile": {
    "width": 540,
    "height": 640
  }
}
Focus
Checkout dependencies: the payment chain
Checkout dependencies: the payment chainNetwork with 8 nodes and 8 connections in 3 groups: Shop, Finance and Platform. In rings around Checkout: 1 step away: Cart, Pricing, Payments and Sign-in; 2 steps away: Fraud check and Ledger; 3 steps away: Event bus. Most connected: Checkout (4 connections). Nothing leads into Checkout. Bottleneck: Payments; without it the diagram falls apart. Checkout (group Shop): leads to Cart, Pricing, Payments and Sign-in. Cart (group Shop): no outgoing connection. Pricing (group Shop): no outgoing connection. Payments (group Finance): leads to Fraud check and Ledger. Sign-in (group Platform): no outgoing connection. Fraud check (group Finance): leads to Event bus. Ledger (group Finance): leads to Event bus. Event bus (group Platform): no outgoing connection. Emphasized: Payments. Emphasized path: Checkout → Payments → Ledger → Event bus. Legend: emphasized, solid line, dashed line, emphasized path.Checkout → CartCheckout → PricingCheckout → PaymentsCheckout → Sign-inPayments → Fraud checkPayments → LedgerLedger → Event busFraud check → Event busCheckout (Shop)CheckoutCart (Shop)CartPricing (Shop)PricingPayments (Finance)PaymentsSign-in (Platform)Sign-inFraud check (Finance)Fraud checkLedger (Finance)LedgerEvent bus (Platform)Event busShopFinancePlatformEmphasizedSolid lineDashed lineEmphasized path
Checkout dependencies: the payment chainNetwork with 8 nodes and 8 connections in 3 groups: Shop, Finance and Platform. In rings around Checkout: 1 step away: Cart, Pricing, Payments and Sign-in; 2 steps away: Fraud check and Ledger; 3 steps away: Event bus. Most connected: Checkout (4 connections). Nothing leads into Checkout. Bottleneck: Payments; without it the diagram falls apart. Checkout (group Shop): leads to Cart, Pricing, Payments and Sign-in. Cart (group Shop): no outgoing connection. Pricing (group Shop): no outgoing connection. Payments (group Finance): leads to Fraud check and Ledger. Sign-in (group Platform): no outgoing connection. Fraud check (group Finance): leads to Event bus. Ledger (group Finance): leads to Event bus. Event bus (group Platform): no outgoing connection. Emphasized: Payments. Emphasized path: Checkout → Payments → Ledger → Event bus. Legend: emphasized, solid line, dashed line, emphasized path.Checkout → CartCheckout → PricingCheckout → PaymentsCheckout → Sign-inPayments → Fraud checkPayments → LedgerLedger → Event busFraud check → Event busCheckout (Shop)CheckoutCart (Shop)CartPricing (Shop)PricingPayments (Finance)PaymentsSign-in (Platform)Sign-inFraud check (Finance)Fraud checkLedger (Finance)LedgerEvent bus (Platform)Event busShopFinancePlatformEmphasizedSolid lineDashed lineEmphasized path

Source: Service catalogue

Show chart data
Data for Checkout dependencies: the payment chain
NodeGroupRingLeads toEmphasis
CheckoutShopCenterCart, Pricing, Payments, Sign-inon emphasized path
CartShop1
PricingShop1
PaymentsFinance1Fraud check, Ledgeremphasized, on emphasized path
Sign-inPlatform1
Fraud checkFinance2Event bus
LedgerFinance2Event buson emphasized path
Event busPlatform3on emphasized path
  • Network with emphasis, a legend and a phone variant
  • Follow the payment chain through a network

The improvement cycle of a support team

examples/improvement-cycle.jsonDetail: The improvement cycle of a support team →
{
  "schemaVersion": 1,
  "type": "cycle",
  "title": "The improvement cycle of a support team",
  "source": "Team handbook",
  "width": 760,
  "height": 520,
  "mobile": {
    "width": 420,
    "height": 560
  },
  "cycle": {
    "labels": "inside",
    "steps": [
      {
        "id": "collect",
        "label": "Collect tickets",
        "note": "every channel"
      },
      {
        "id": "sort",
        "label": "Find patterns",
        "note": "weekly"
      },
      {
        "id": "fix",
        "label": "Fix the cause",
        "role": "critical"
      },
      {
        "id": "document",
        "label": "Write it down"
      },
      {
        "id": "train",
        "label": "Train the team",
        "role": "planned"
      }
    ]
  }
}
Focus
The improvement cycle of a support team
The improvement cycle of a support teamCycle of 5 steps: 1 Collect tickets (every channel); 2 Find patterns (weekly); 3 Fix the cause; 4 Write it down; 5 Train the team; the last leads back to Collect tickets. Roles: critical: Fix the cause; planned: Train the team.Collect tickets → Find patternsFind patterns → Fix the causeFix the cause → Write it downWrite it down → Train the teamTrain the team → Collect ticketsCollect tickets: every channelCollect ticketsevery channel1Find patterns: weeklyFind patternsweekly2Fix the causeFix the cause3!Write it downWrite it down4Train the teamTrain the team5+!Critical+Planned
The improvement cycle of a support teamCycle of 5 steps: 1 Collect tickets (every channel); 2 Find patterns (weekly); 3 Fix the cause; 4 Write it down; 5 Train the team; the last leads back to Collect tickets. Roles: critical: Fix the cause; planned: Train the team.Collect tickets → Find patternsFind patterns → Fix the causeFix the cause → Write it downWrite it down → Train the teamTrain the team → Collect ticketsCollect tickets: every channelCollectticketsevery channel1Find patterns: weeklyFindpatternsweekly2Fix the causeFix thecause3!Write it downWrite itdown4Train the teamTrain theteam5+!Critical+Planned

Source: Team handbook

Show chart data
Data for The improvement cycle of a support team
No.StepNotesRole
1Collect ticketsevery channel
2Find patternsweekly
3Fix the causecritical
4Write it down
5Train the teamplanned
  • Cycle with the labels inside boxes
  • Show a loop that never ends

Why a good product brings the next customers

examples/growth-flywheel.jsonDetail: Why a good product brings the next customers →
{
  "schemaVersion": 1,
  "type": "cycle",
  "title": "Why a good product brings the next customers",
  "width": 760,
  "height": 540,
  "mobile": {
    "width": 476,
    "height": 640
  },
  "cycle": {
    "steps": [
      {
        "id": "product",
        "label": "Better product",
        "note": "from feedback",
        "hubLabel": "delights"
      },
      {
        "id": "happy",
        "label": "Happy customers",
        "hubLabel": "stay on"
      },
      {
        "id": "word",
        "label": "Word of mouth",
        "hubLabel": "refer"
      },
      {
        "id": "growth",
        "label": "More customers",
        "hubLabel": "inform"
      },
      {
        "id": "revenue",
        "label": "Revenue to invest",
        "hubLabel": "reinvest"
      }
    ],
    "hub": {
      "label": "Customers",
      "note": "at the center"
    }
  }
}
Focus
Why a good product brings the next customers
Why a good product brings the next customersCycle of 5 steps: 1 Better product (from feedback); 2 Happy customers; 3 Word of mouth; 4 More customers; 5 Revenue to invest; the last leads back to Better product. Every step feeds the hub Customers (at the center). Links: Better product: delights; Happy customers: stay on; Word of mouth: refer; More customers: inform; Revenue to invest: reinvest.Better product → Happy customersHappy customers → Word of mouthWord of mouth → More customersMore customers → Revenue to investRevenue to invest → Better productBetter product → CustomersdelightsHappy customers → Customersstay onWord of mouth → CustomersreferMore customers → CustomersinformRevenue to invest → CustomersreinvestCustomersCustomersat the centerBetter product: from feedback1Better productfrom feedbackHappy customers2Happy customersWord of mouth3Word of mouthMore customers4More customersRevenue to invest5Revenue to invest
Why a good product brings the next customersCycle of 5 steps: 1 Better product (from feedback); 2 Happy customers; 3 Word of mouth; 4 More customers; 5 Revenue to invest; the last leads back to Better product. Every step feeds the hub Customers (at the center). Links: Better product: delights; Happy customers: stay on; Word of mouth: refer; More customers: inform; Revenue to invest: reinvest.Better product → Happy customersHappy customers → Word of mouthWord of mouth → More customersMore customers → Revenue to investRevenue to invest → Better productBetter product → CustomersdelightsHappy customers → Customersstay onWord of mouth → CustomersreferMore customers → CustomersinformRevenue to invest → CustomersreinvestCustomersCustomersat the centerBetter product: from feedback1Betterproductfrom feedbackHappy customers2HappycustomersWord of mouth3Word ofmouthMore customers4MorecustomersRevenue to invest5Revenue toinvest
Show chart data
Data for Why a good product brings the next customers
No.StepNotesHub link
1Better productfrom feedbackdelights
2Happy customersstay on
3Word of mouthrefer
4More customersinform
5Revenue to investreinvest
  • Cycle around a hub
  • Show a flywheel and what it feeds

The layers of the platform, from the machine up

examples/platform-layers.jsonDetail: The layers of the platform, from the machine up →
{
  "schemaVersion": 1,
  "type": "layers",
  "title": "The layers of the platform, from the machine up",
  "source": "Platform team, architecture overview",
  "width": 860,
  "height": 600,
  "mobile": {
    "width": 360,
    "height": 640
  },
  "layers": {
    "layers": [
      {
        "id": "infrastructure",
        "label": "Infrastructure",
        "items": [
          "Compute",
          "Storage",
          "Network"
        ],
        "note": "Rented from one provider; capacity is changed by the platform team only."
      },
      {
        "id": "runtime",
        "label": "Runtime and data",
        "items": [
          "Containers",
          "Message broker",
          "Relational database",
          "Object store"
        ]
      },
      {
        "id": "services",
        "label": "Domain services",
        "items": [
          "Orders",
          "Catalog",
          "Billing",
          "Customers"
        ],
        "note": "One team per service; services talk only through published interfaces.",
        "role": "critical"
      },
      {
        "id": "experience",
        "label": "Experience",
        "items": [
          "Web shop",
          "Mobile app",
          "Partner API"
        ],
        "note": "The partner API is planned for next year.",
        "role": "planned"
      }
    ]
  }
}
Focus
The layers of the platform, from the machine up
The layers of the platform, from the machine upLayer stack of 4 layers, from the bottom: 1 Infrastructure (items: Compute, Storage and Network; note: Rented from one provider; capacity is changed by the platform team only.); 2 Runtime and data (items: Containers, Message broker, Relational database and Object store); 3 Domain services (items: Orders, Catalog, Billing and Customers; note: One team per service; services talk only through published interfaces.); 4 Experience (items: Web shop, Mobile app and Partner API; note: The partner API is planned for next year.). Roles: critical: Domain services; planned: Experience.Infrastructure: Rented from one provider; capacity is changed by the platform team only.InfrastructureComputeStorageNetworkRented from one provider; capacityis changed by the platform teamonly.Runtime and dataRuntime and dataContainersMessage brokerRelational databaseObject storeDomain services: One team per service; services talk only through published interfaces.Domain servicesOrdersCatalogBillingCustomers!One team per service; services talkonly through published interfaces.Experience: The partner API is planned for next year.ExperienceWeb shopMobile appPartner API+The partner API is planned for nextyear.!Critical+Planned
The layers of the platform, from the machine upLayer stack of 4 layers, from the bottom: 1 Infrastructure (items: Compute, Storage and Network; note: Rented from one provider; capacity is changed by the platform team only.); 2 Runtime and data (items: Containers, Message broker, Relational database and Object store); 3 Domain services (items: Orders, Catalog, Billing and Customers; note: One team per service; services talk only through published interfaces.); 4 Experience (items: Web shop, Mobile app and Partner API; note: The partner API is planned for next year.). Roles: critical: Domain services; planned: Experience.Infrastructure: Rented from one provider; capacity is changed by the platform team only.InfrastructureRented from one provider; capacity is changed by theplatform team only.ComputeStorageNetworkRuntime and dataRuntime and dataContainersMessage brokerRelational databaseObject storeDomain services: One team per service; services talk only through published interfaces.Domain servicesOne team per service; services talk only throughpublished interfaces.OrdersCatalogBillingCustomers!Experience: The partner API is planned for next year.ExperienceThe partner API is planned for next year.Web shopMobile appPartner API+!Critical+Planned

Source: Platform team, architecture overview

Show chart data
Data for The layers of the platform, from the machine up
LevelLayerItemsNotesRole
1InfrastructureCompute, Storage, NetworkRented from one provider; capacity is changed by the platform team only.
2Runtime and dataContainers, Message broker, Relational database, Object store
3Domain servicesOrders, Catalog, Billing, CustomersOne team per service; services talk only through published interfaces.critical
4ExperienceWeb shop, Mobile app, Partner APIThe partner API is planned for next year.planned
  • Layer stack
  • Show the levels of a platform

Who owns what: organization, team, service

examples/scope-nesting.jsonDetail: Who owns what: organization, team, service →
{
  "schemaVersion": 1,
  "type": "layers",
  "title": "Who owns what: organization, team, service",
  "width": 820,
  "height": 540,
  "mobile": {
    "width": 360,
    "height": 640
  },
  "layers": {
    "display": "nested",
    "layers": [
      {
        "id": "organization",
        "label": "Organization",
        "items": [
          "Security policy",
          "Shared tooling"
        ],
        "note": "Sets the rules every team works under."
      },
      {
        "id": "team",
        "label": "Payments team",
        "items": [
          "On-call rota",
          "Roadmap"
        ],
        "note": "Owns its services from design to operation."
      },
      {
        "id": "service",
        "label": "Billing service",
        "items": [
          "Invoices",
          "Reminders",
          "Tax rules"
        ],
        "role": "critical"
      }
    ]
  }
}
Focus
Who owns what: organization, team, service
Who owns what: organization, team, service3 nested scopes, from the outermost to the innermost: 1 Organization (items: Security policy and Shared tooling; note: Sets the rules every team works under.); 2 Payments team (items: On-call rota and Roadmap; note: Owns its services from design to operation.); 3 Billing service (items: Invoices, Reminders and Tax rules). Roles: critical: Billing service.Organization: Sets the rules every team works under.OrganizationSecurity policyShared toolingSets the rules every team worksunder.Payments team: Owns its services from design to operation.Payments teamOn-call rotaRoadmapOwns its services from design tooperation.Billing serviceBilling serviceInvoicesRemindersTax rules!!Critical
Who owns what: organization, team, service3 nested scopes, from the outermost to the innermost: 1 Organization (items: Security policy and Shared tooling; note: Sets the rules every team works under.); 2 Payments team (items: On-call rota and Roadmap; note: Owns its services from design to operation.); 3 Billing service (items: Invoices, Reminders and Tax rules). Roles: critical: Billing service.Organization: Sets the rules every team works under.OrganizationSets the rules every team works under.Security policyShared toolingPayments team: Owns its services from design to operation.Payments teamOwns its services from design to operation.On-call rotaRoadmapBilling serviceBilling serviceInvoicesRemindersTax rules!!Critical
Show chart data
Data for Who owns what: organization, team, service
LevelScopeItemsNotesRole
1OrganizationSecurity policy, Shared toolingSets the rules every team works under.
2Payments teamOn-call rota, RoadmapOwns its services from design to operation.
3Billing serviceInvoices, Reminders, Tax rulescritical
  • Nested scopes
  • Show what contains what

The platform layers, lifted apart

examples/platform-exploded.jsonDetail: The platform layers, lifted apart →
{
  "schemaVersion": 1,
  "type": "layers",
  "title": "The platform layers, lifted apart",
  "source": "Platform team, architecture overview",
  "width": 960,
  "height": 640,
  "mobile": {
    "width": 420,
    "height": 640
  },
  "layers": {
    "projection": "exploded",
    "layers": [
      {
        "id": "infrastructure",
        "label": "Infrastructure",
        "items": [
          "Compute",
          "Storage",
          "Network"
        ],
        "note": "Rented from one provider; capacity is changed by the platform team only."
      },
      {
        "id": "runtime",
        "label": "Runtime and data",
        "items": [
          "Containers",
          "Message broker",
          "Relational database"
        ]
      },
      {
        "id": "services",
        "label": "Domain services",
        "items": [
          "Orders",
          "Catalog",
          "Billing"
        ],
        "note": "One team per service.",
        "role": "critical"
      },
      {
        "id": "experience",
        "label": "Experience",
        "items": [
          "Web shop",
          "Mobile app"
        ],
        "role": "planned"
      }
    ]
  }
}
Focus
The platform layers, lifted apart
The platform layers, lifted apartLayer stack of 4 layers, from the bottom: 1 Infrastructure (items: Compute, Storage and Network; note: Rented from one provider; capacity is changed by the platform team only.); 2 Runtime and data (items: Containers, Message broker and Relational database); 3 Domain services (items: Orders, Catalog and Billing; note: One team per service.); 4 Experience (items: Web shop and Mobile app). Roles: critical: Domain services; planned: Experience.Infrastructure: Rented from one provider; capacity is changed by the platform team only.Infrastructure· Compute· Storage· NetworkRented from one provider; capacity ischanged by the platform team only.Runtime and dataRuntime and data· Containers· Message broker· Relational databaseDomain services: One team per service.Domain services· Orders· Catalog· BillingOne team per service.!ExperienceExperience· Web shop· Mobile app+!Critical+Planned
The platform layers, lifted apartLayer stack of 4 layers, from the bottom: 1 Infrastructure (items: Compute, Storage and Network; note: Rented from one provider; capacity is changed by the platform team only.); 2 Runtime and data (items: Containers, Message broker and Relational database); 3 Domain services (items: Orders, Catalog and Billing; note: One team per service.); 4 Experience (items: Web shop and Mobile app). Roles: critical: Domain services; planned: Experience.Infrastructure: Rented from one provider; capacity is changed by the platform team only.InfrastructureRented from one provider; capacity is changed by the platformteam only.ComputeStorageNetworkRuntime and dataRuntime and dataContainersMessage brokerRelational databaseDomain services: One team per service.Domain servicesOne team per service.OrdersCatalogBilling!ExperienceExperienceWeb shopMobile app+!Critical+Planned

Source: Platform team, architecture overview

Show chart data
Data for The platform layers, lifted apart
LevelLayerItemsNotesRole
1InfrastructureCompute, Storage, NetworkRented from one provider; capacity is changed by the platform team only.
2Runtime and dataContainers, Message broker, Relational database
3Domain servicesOrders, Catalog, BillingOne team per service.critical
4ExperienceWeb shop, Mobile appplanned
  • Exploded layer stack
  • Show the levels of a system apart

The office floor today and in the two building phases

examples/office-floor.jsonDetail: The office floor today and in the two building phases →
{
  "schemaVersion": 1,
  "type": "plan",
  "title": "The office floor today and in the two building phases",
  "source": "Facility planning, illustrative",
  "width": 960,
  "height": 560,
  "mobile": {
    "width": 420,
    "height": 620
  },
  "plan": {
    "areas": [
      {
        "id": "open-office",
        "label": "Open office",
        "x": 0,
        "y": 0,
        "w": 6,
        "h": 4,
        "phase": "Existing",
        "items": [
          {
            "kind": "desk",
            "x": 0.6,
            "y": 0.6
          },
          {
            "kind": "desk",
            "x": 2.4,
            "y": 0.6
          },
          {
            "kind": "desk",
            "x": 4.2,
            "y": 0.6
          },
          {
            "kind": "desk",
            "x": 0.6,
            "y": 2.6
          },
          {
            "kind": "desk",
            "x": 2.4,
            "y": 2.6
          },
          {
            "kind": "desk",
            "x": 4.2,
            "y": 2.6
          }
        ]
      },
      {
        "id": "meeting",
        "label": "Meeting room",
        "x": 6,
        "y": 0,
        "w": 4,
        "h": 3,
        "phase": "Existing",
        "items": [
          {
            "kind": "table",
            "x": 1.5,
            "y": 1
          }
        ]
      },
      {
        "id": "kitchen",
        "label": "Kitchen",
        "x": 6,
        "y": 3,
        "w": 4,
        "h": 3,
        "phase": "Phase 1",
        "items": [
          {
            "kind": "table",
            "x": 1.5,
            "y": 1
          },
          {
            "kind": "plant",
            "x": 3.3,
            "y": 0.4
          }
        ]
      },
      {
        "id": "server",
        "label": "Server room",
        "x": 0,
        "y": 4,
        "w": 3,
        "h": 2,
        "phase": "Phase 1",
        "items": [
          {
            "kind": "shelf",
            "x": 0.4,
            "y": 0.4
          },
          {
            "kind": "shelf",
            "x": 1.6,
            "y": 0.4
          }
        ]
      },
      {
        "id": "library",
        "label": "Library",
        "x": 3,
        "y": 4,
        "w": 3,
        "h": 2,
        "phase": "Phase 2",
        "items": [
          {
            "kind": "shelf",
            "x": 0.3,
            "y": 0.3
          },
          {
            "kind": "sofa",
            "x": 1,
            "y": 1.1
          }
        ]
      },
      {
        "id": "terrace",
        "label": "Terrace",
        "kind": "outdoor",
        "x": 10,
        "y": 0,
        "w": 3,
        "h": 6,
        "phase": "Phase 2"
      }
    ]
  }
}
Focus
The office floor today and in the two building phases
The office floor today and in the two building phasesPlan with 6 areas on a grid of 13 × 6 units, seen at an angle: Open office (room, 6 × 4, Existing, with desk, desk, desk, desk, desk and desk); Meeting room (room, 4 × 3, Existing, with table); Kitchen (room, 4 × 3, Phase 1, with table and plant); Server room (room, 3 × 2, Phase 1, with shelf and shelf); Library (room, 3 × 2, Phase 2, with shelf and sofa); Terrace (outdoor, 3 × 6, Phase 2). Phases: Existing: Open office and Meeting room; Phase 1: Kitchen and Server room; Phase 2: Library and Terrace.Terrace: outdoor, 3 × 6, Phase 2Open office: room, 6 × 4, ExistingServer room: room, 3 × 2, Phase 1Meeting room: room, 4 × 3, ExistingLibrary: room, 3 × 2, Phase 2Kitchen: room, 4 × 3, Phase 1Open officeroom, 6 × 4, ExistingServer roomroom, 3 × 2, Phase 1Libraryroom, 3 × 2, Phase 2Meeting roomroom, 4 × 3, ExistingKitchenroom, 4 × 3, Phase 1Terraceoutdoor, 3 × 6, Phase 2ExistingPhase 1Phase 2
The office floor today and in the two building phasesPlan with 6 areas on a grid of 13 × 6 units, seen at an angle: Open office (room, 6 × 4, Existing, with desk, desk, desk, desk, desk and desk); Meeting room (room, 4 × 3, Existing, with table); Kitchen (room, 4 × 3, Phase 1, with table and plant); Server room (room, 3 × 2, Phase 1, with shelf and shelf); Library (room, 3 × 2, Phase 2, with shelf and sofa); Terrace (outdoor, 3 × 6, Phase 2). Phases: Existing: Open office and Meeting room; Phase 1: Kitchen and Server room; Phase 2: Library and Terrace.Terrace: outdoor, 3 × 6, Phase 2Open office: room, 6 × 4, ExistingServer room: room, 3 × 2, Phase 1Meeting room: room, 4 × 3, ExistingLibrary: room, 3 × 2, Phase 2Kitchen: room, 4 × 3, Phase 111Open officeroom, 6 × 4, Existing22Meeting roomroom, 4 × 3, Existing33Kitchenroom, 4 × 3, Phase 144Server roomroom, 3 × 2, Phase 155Libraryroom, 3 × 2, Phase 266Terraceoutdoor, 3 × 6, Phase 2ExistingPhase 1Phase 2

Source: Facility planning, illustrative

Show chart data
Data for The office floor today and in the two building phases
AreaKindPositionSizePhaseItems
Open officeroom0, 06 × 4Existingdesk, desk, desk, desk, desk, desk
Meeting roomroom6, 04 × 3Existingtable
Kitchenroom6, 34 × 3Phase 1table, plant
Server roomroom0, 43 × 2Phase 1shelf, shelf
Libraryroom3, 43 × 2Phase 2shelf, sofa
Terraceoutdoor10, 03 × 6Phase 2
  • Floor plan in axonometric projection
  • Show rooms and how they are built in phases

The school site: what stands, and what comes next

examples/campus-site.jsonDetail: The school site: what stands, and what comes next →
{
  "schemaVersion": 1,
  "type": "plan",
  "title": "The school site: what stands, and what comes next",
  "width": 900,
  "height": 540,
  "mobile": {
    "width": 400,
    "height": 600
  },
  "plan": {
    "areas": [
      {
        "id": "grounds",
        "label": "School grounds",
        "kind": "outdoor",
        "x": 0,
        "y": 0,
        "w": 14,
        "h": 9
      },
      {
        "id": "main",
        "label": "Main building",
        "kind": "building",
        "x": 1,
        "y": 1,
        "w": 8,
        "h": 3,
        "phase": "Existing"
      },
      {
        "id": "gym",
        "label": "Gym",
        "kind": "building",
        "x": 10,
        "y": 1,
        "w": 3,
        "h": 5,
        "phase": "Existing"
      },
      {
        "id": "workshop",
        "label": "Workshop",
        "kind": "building",
        "x": 1,
        "y": 5,
        "w": 4,
        "h": 3,
        "phase": "Phase 1"
      },
      {
        "id": "library",
        "label": "Library wing",
        "kind": "building",
        "x": 6,
        "y": 5,
        "w": 3,
        "h": 3,
        "phase": "Phase 2"
      },
      {
        "id": "garden",
        "label": "School garden",
        "kind": "outdoor",
        "x": 10,
        "y": 6.5,
        "w": 3.5,
        "h": 2,
        "phase": "Phase 1"
      }
    ]
  }
}
Focus
The school site: what stands, and what comes next
The school site: what stands, and what comes nextPlan with 6 areas on a grid of 14 × 9 units, seen at an angle: School grounds (outdoor, 14 × 9); Main building (building, 8 × 3, Existing); Gym (building, 3 × 5, Existing); Workshop (building, 4 × 3, Phase 1); Library wing (building, 3 × 3, Phase 2); School garden (outdoor, 3.5 × 2, Phase 1). Phases: Existing: Main building and Gym; Phase 1: Workshop and School garden; Phase 2: Library wing.School grounds: outdoor, 14 × 9School garden: outdoor, 3.5 × 2, Phase 1Main building: building, 8 × 3, ExistingWorkshop: building, 4 × 3, Phase 1Library wing: building, 3 × 3, Phase 2Gym: building, 3 × 5, ExistingWorkshopbuilding, 4 × 3, Phase 1Library wingbuilding, 3 × 3, Phase 2Main buildingbuilding, 8 × 3, ExistingGymbuilding, 3 × 5, ExistingSchool gardenoutdoor, 3.5 × 2, Phase 1School groundsoutdoor, 14 × 9ExistingPhase 1Phase 2
The school site: what stands, and what comes nextPlan with 6 areas on a grid of 14 × 9 units, seen at an angle: School grounds (outdoor, 14 × 9); Main building (building, 8 × 3, Existing); Gym (building, 3 × 5, Existing); Workshop (building, 4 × 3, Phase 1); Library wing (building, 3 × 3, Phase 2); School garden (outdoor, 3.5 × 2, Phase 1). Phases: Existing: Main building and Gym; Phase 1: Workshop and School garden; Phase 2: Library wing.School grounds: outdoor, 14 × 9School garden: outdoor, 3.5 × 2, Phase 1Main building: building, 8 × 3, ExistingWorkshop: building, 4 × 3, Phase 1Library wing: building, 3 × 3, Phase 2Gym: building, 3 × 5, Existing11School groundsoutdoor, 14 × 922Main buildingbuilding, 8 × 3, Existing33Gymbuilding, 3 × 5, Existing44Workshopbuilding, 4 × 3, Phase 155Library wingbuilding, 3 × 3, Phase 266School gardenoutdoor, 3.5 × 2, Phase 1ExistingPhase 1Phase 2
Show chart data
Data for The school site: what stands, and what comes next
AreaKindPositionSizePhase
School groundsoutdoor0, 014 × 9
Main buildingbuilding1, 18 × 3Existing
Gymbuilding10, 13 × 5Existing
Workshopbuilding1, 54 × 3Phase 1
Library wingbuilding6, 53 × 3Phase 2
School gardenoutdoor10, 6.53.5 × 2Phase 1
  • Site plan with buildings
  • Show what stands on a site and what is planned

The orders platform: today and as targeted

examples/orders-delta.jsonDetail: The orders platform: today and as targeted →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "The orders platform: today and as targeted",
  "width": 1280,
  "height": 820,
  "architecture": {
    "components": [
      {
        "id": "web",
        "label": "Web shop",
        "sublabel": "React",
        "kind": "frontend",
        "in": "cloud"
      },
      {
        "id": "orders",
        "label": "Orders",
        "sublabel": "Java",
        "in": "datacenter"
      },
      {
        "id": "orders-next",
        "label": "Orders",
        "sublabel": "Kotlin",
        "in": "cloud",
        "replaces": "orders"
      },
      {
        "id": "legacy",
        "label": "Legacy ERP",
        "kind": "external",
        "in": "datacenter"
      },
      {
        "id": "queue",
        "label": "Event bus",
        "kind": "queue",
        "in": "cloud"
      },
      {
        "id": "billing",
        "label": "Billing",
        "in": "cloud"
      },
      {
        "id": "db",
        "label": "Orders DB",
        "sublabel": "PostgreSQL",
        "kind": "database",
        "in": "cloud"
      }
    ],
    "boundaries": [
      {
        "id": "cloud",
        "label": "Cloud region"
      },
      {
        "id": "datacenter",
        "label": "Data center"
      }
    ],
    "connections": [
      {
        "from": "web",
        "to": "orders",
        "label": "places orders",
        "technology": "HTTPS"
      },
      {
        "from": "orders",
        "to": "legacy",
        "label": "syncs stock",
        "technology": "SOAP"
      },
      {
        "from": "orders",
        "to": "db",
        "label": "reads and writes",
        "technology": "SQL"
      },
      {
        "from": "web",
        "to": "orders-next",
        "label": "places orders",
        "technology": "HTTPS"
      },
      {
        "from": "orders-next",
        "to": "queue",
        "label": "publishes order events"
      },
      {
        "from": "queue",
        "to": "billing",
        "label": "delivers events"
      },
      {
        "from": "orders-next",
        "to": "db",
        "label": "reads and writes",
        "technology": "SQL"
      }
    ],
    "views": [
      {
        "key": "today",
        "title": "Today",
        "components": [
          "web",
          "orders",
          "legacy",
          "db"
        ]
      },
      {
        "key": "target",
        "title": "Target",
        "components": [
          "web",
          "orders-next",
          "queue",
          "billing",
          "db"
        ]
      }
    ],
    "delta": {
      "before": "today",
      "after": "target"
    }
  }
}
Focus
The orders platform: today and as targeted
The orders platform: today and as targetedArchitecture change from Today to Target: 8 changes. Added: Event bus; Billing. Removed: Legacy ERP. Changed: Orders (technology: Java → Kotlin). Moved: Orders (from Data center to Cloud region). Rewired: Orders → Legacy ERP (removed); Orders → Event bus (added); Event bus → Billing (added).Before: TodayData centerCloud regionWeb shop → Orders: places orders [HTTPS]Orders → Legacy ERP: syncs stock [SOAP]Orders → Orders DB: reads and writes [SQL]places orders[HTTPS]syncs stock[SOAP]reads and writes[SQL]Web shop – ReactWeb shopReactOrders – KotlinOrdersJavaLegacy ERPLegacy ERPOrders DB – PostgreSQLOrders DBPostgreSQLchanged~moved→−After: TargetCloud regionWeb shop → Orders: places orders [HTTPS]Orders → Event bus: publishes order eventsEvent bus → Billing: delivers eventsOrders → Orders DB: reads and writes [SQL]places orders[HTTPS]publishes order eventsdelivers eventsreads and writes[SQL]Web shop – ReactWeb shopReactOrders DB – PostgreSQLOrders DBPostgreSQLEvent busEvent busBillingBillingOrders – KotlinOrdersKotlin++changed~moved→Changes+Added: Event bus; Billing.−Removed: Legacy ERP.~Changed: Orders (technology: Java → Kotlin).→Moved: Orders (from Data center to Cloud region).↔Rewired: Orders → Legacy ERP (removed); Orders → Event bus (added); Event bus → Billing (added).
Show chart data
Data for The orders platform: today and as targeted
ChangeConcernsDetail
+ addedEvent bus
+ addedBilling
− removedLegacy ERP
~ changedOrderstechnology: Java → Kotlin
→ movedOrdersfrom Data center to Cloud region
↔ rewiredOrders → Legacy ERPremoved
↔ rewiredOrders → Event busadded
↔ rewiredEvent bus → Billingadded
  • Architecture before and after
  • Show what a redesign changes

Outlines and boards

Why parcels arrive late

examples/delivery-delays.jsonDetail: Why parcels arrive late →
{
  "schemaVersion": 1,
  "type": "fishbone",
  "title": "Why parcels arrive late",
  "source": "Illustrative review of a regional delivery service",
  "width": 900,
  "height": 480,
  "mobile": {
    "width": 380,
    "height": 560
  },
  "fishbone": {
    "effect": "Late deliveries",
    "bones": [
      {
        "label": "People",
        "causes": [
          {
            "label": "New drivers",
            "causes": [
              {
                "label": "No route training"
              },
              {
                "label": "High turnover"
              }
            ]
          },
          {
            "label": "Uneven shifts"
          }
        ]
      },
      {
        "label": "Process",
        "causes": [
          {
            "label": "Manual sorting",
            "causes": [
              {
                "label": "Peaks at noon"
              }
            ]
          },
          {
            "label": "Late dispatch"
          }
        ]
      },
      {
        "label": "Vehicles",
        "causes": [
          {
            "label": "Breakdowns",
            "causes": [
              {
                "label": "Deferred service"
              }
            ]
          },
          {
            "label": "Small load space"
          }
        ]
      },
      {
        "label": "Information",
        "causes": [
          {
            "label": "Wrong addresses"
          },
          {
            "label": "No live tracking",
            "causes": [
              {
                "label": "Old scanners"
              }
            ]
          }
        ]
      },
      {
        "label": "Environment",
        "causes": [
          {
            "label": "Road works"
          },
          {
            "label": "Winter weather"
          }
        ]
      },
      {
        "label": "Customers",
        "causes": [
          {
            "label": "Nobody at home",
            "causes": [
              {
                "label": "No time windows"
              }
            ]
          }
        ]
      }
    ]
  }
}
Why parcels arrive late
Why parcels arrive lateFishbone diagram of the causes of “Late deliveries”: 6 categories with 17 causes. People: New drivers (No route training, High turnover); Uneven shifts. Process: Manual sorting (Peaks at noon); Late dispatch. Vehicles: Breakdowns (Deferred service); Small load space. Information: Wrong addresses; No live tracking (Old scanners). Environment: Road works; Winter weather. Customers: Nobody at home (No time windows).Late deliveriesLate deliveriesPeoplePeopleNew driversNo route trainingHigh turnoverUneven shiftsProcessProcessManual sortingPeaks at noonLate dispatchVehiclesVehiclesBreakdownsDeferred serviceSmall load spaceInformationInformationWrong addressesNo live trackingOld scannersEnvironmentEnvironmentRoad worksWinter weatherCustomersCustomersNobody at homeNo time windows
Why parcels arrive lateFishbone diagram of the causes of “Late deliveries”: 6 categories with 17 causes. People: New drivers (No route training, High turnover); Uneven shifts. Process: Manual sorting (Peaks at noon); Late dispatch. Vehicles: Breakdowns (Deferred service); Small load space. Information: Wrong addresses; No live tracking (Old scanners). Environment: Road works; Winter weather. Customers: Nobody at home (No time windows).Late deliveriesLate deliveriesPeoplePeopleNew driversNo route trainingHigh turnoverUneven shiftsProcessProcessManual sortingPeaks at noonLate dispatchVehiclesVehiclesBreakdownsDeferred serviceSmall load spaceInformationInformationWrong addressesNo live trackingOld scannersEnvironmentEnvironmentRoad worksWinter weatherCustomersCustomersNobody at homeNo time windows

Source: Illustrative review of a regional delivery service

Show chart data
Data for Why parcels arrive late
PartLabelBelongs to
EffectLate deliveries
CategoryPeopleLate deliveries
CauseNew driversPeople
Sub-causeNo route trainingNew drivers
Sub-causeHigh turnoverNew drivers
CauseUneven shiftsPeople
CategoryProcessLate deliveries
CauseManual sortingProcess
Sub-causePeaks at noonManual sorting
CauseLate dispatchProcess
CategoryVehiclesLate deliveries
CauseBreakdownsVehicles
Sub-causeDeferred serviceBreakdowns
CauseSmall load spaceVehicles
CategoryInformationLate deliveries
CauseWrong addressesInformation
CauseNo live trackingInformation
Sub-causeOld scannersNo live tracking
CategoryEnvironmentLate deliveries
CauseRoad worksEnvironment
CauseWinter weatherEnvironment
CategoryCustomersLate deliveries
CauseNobody at homeCustomers
Sub-causeNo time windowsNobody at home
  • Fishbone diagram
  • Find the causes of a problem

Sprint board

examples/sprint-board.jsonDetail: Sprint board →
{
  "schemaVersion": 1,
  "type": "kanban",
  "title": "Sprint board",
  "source": "Illustrative board of a small product team",
  "width": 860,
  "height": 480,
  "mobile": {
    "width": 380,
    "height": 900
  },
  "kanban": {
    "columns": [
      {
        "label": "Backlog",
        "cards": [
          {
            "title": "Export the invoice list as CSV",
            "tag": "Feature"
          },
          {
            "title": "Dark mode for the dashboard",
            "tag": "Design"
          },
          {
            "title": "Upgrade the database driver",
            "owner": "Noor",
            "tag": "Chore"
          }
        ]
      },
      {
        "label": "In progress",
        "limit": 2,
        "cards": [
          {
            "title": "Single sign-on for teams",
            "owner": "Mara",
            "tag": "Feature"
          },
          {
            "title": "Fix the duplicate email on signup",
            "owner": "Jonas",
            "tag": "Bug",
            "blocked": true
          },
          {
            "title": "Rework the onboarding checklist",
            "owner": "Ines",
            "tag": "Design"
          }
        ]
      },
      {
        "label": "Review",
        "limit": 3,
        "cards": [
          {
            "title": "Rate limits for the public API",
            "owner": "Noor",
            "tag": "Feature"
          },
          {
            "title": "Correct the VAT rounding",
            "owner": "Mara",
            "tag": "Bug"
          }
        ]
      },
      {
        "label": "Done",
        "cards": [
          {
            "title": "Billing page copy",
            "owner": "Ines",
            "tag": "Design"
          },
          {
            "title": "Rotate the signing keys",
            "owner": "Jonas",
            "tag": "Chore"
          }
        ]
      }
    ]
  }
}
Sprint board
Sprint boardKanban board with 4 columns and 10 cards. Backlog: 3 cards. In progress: 3 cards, over its limit of 2. Review: 2 cards (limit 3). Done: 2 cards. Blocked: “Fix the duplicate email on signup” in In progress.BacklogBacklog3Export the invoice list as CSVExport the invoice list asCSVFeatureDark mode for the dashboardDark mode for thedashboardDesignUpgrade the database driverUpgrade the databasedriverChoreNoorIn progressIn progress3/2In progress: over the limit!Single sign-on for teamsSingle sign-on for teamsFeatureMaraFix the duplicate email on signupFix the duplicate email onsignupBugJonasBlockedRework the onboarding checklistRework the onboardingchecklistDesignInesReviewReview2/3Rate limits for the public APIRate limits for the publicAPIFeatureNoorCorrect the VAT roundingCorrect the VAT roundingBugMaraDoneDone2Billing page copyBilling page copyDesignInesRotate the signing keysRotate the signing keysChoreJonas
Sprint boardKanban board with 4 columns and 10 cards. Backlog: 3 cards. In progress: 3 cards, over its limit of 2. Review: 2 cards (limit 3). Done: 2 cards. Blocked: “Fix the duplicate email on signup” in In progress.BacklogBacklog3Export the invoice list as CSVExport the invoice list as CSVFeatureDark mode for the dashboardDark mode for the dashboardDesignUpgrade the database driverUpgrade the database driverChoreNoorIn progressIn progress3/2In progress: over the limit!Single sign-on for teamsSingle sign-on for teamsFeatureMaraFix the duplicate email on signupFix the duplicate email on signupBugJonasBlockedRework the onboarding checklistRework the onboarding checklistDesignInesReviewReview2/3Rate limits for the public APIRate limits for the public APIFeatureNoorCorrect the VAT roundingCorrect the VAT roundingBugMaraDoneDone2Billing page copyBilling page copyDesignInesRotate the signing keysRotate the signing keysChoreJonas

Source: Illustrative board of a small product team

Show chart data
Data for Sprint board
ColumnCardsCardOwnerTagStatus
Backlog3Export the invoice list as CSVFeature
Backlog3Dark mode for the dashboardDesign
Backlog3Upgrade the database driverNoorChore
In progress3/2Single sign-on for teamsMaraFeature
In progress3/2Fix the duplicate email on signupJonasBugBlocked
In progress3/2Rework the onboarding checklistInesDesign
Review2/3Rate limits for the public APINoorFeature
Review2/3Correct the VAT roundingMaraBug
Done2Billing page copyInesDesign
Done2Rotate the signing keysJonasChore
  • Kanban board
  • Show work by state

Story map of an online shop

examples/shop-story-map.jsonDetail: Story map of an online shop →
{
  "schemaVersion": 1,
  "type": "storymap",
  "title": "Story map of an online shop",
  "source": "Illustrative backlog of a small shop",
  "width": 960,
  "height": 560,
  "mobile": {
    "width": 380,
    "height": 900
  },
  "storymap": {
    "releases": [
      "MVP",
      "Release 2",
      "Later"
    ],
    "activities": [
      {
        "label": "Find a product",
        "tasks": [
          {
            "label": "Browse the catalog",
            "stories": [
              {
                "title": "List products by category",
                "release": "MVP"
              },
              {
                "title": "Filter by price",
                "release": "Release 2"
              }
            ]
          },
          {
            "label": "Search",
            "stories": [
              {
                "title": "Search by name",
                "release": "MVP"
              },
              {
                "title": "Suggest while typing",
                "release": "Later"
              }
            ]
          }
        ]
      },
      {
        "label": "Buy it",
        "tasks": [
          {
            "label": "Fill the cart",
            "stories": [
              {
                "title": "Add and remove items",
                "release": "MVP"
              },
              {
                "title": "Save the cart for later",
                "release": "Release 2"
              }
            ]
          },
          {
            "label": "Pay",
            "stories": [
              {
                "title": "Pay by card",
                "release": "MVP"
              },
              {
                "title": "Pay by invoice",
                "release": "Release 2"
              },
              {
                "title": "Split the payment",
                "release": "Later"
              }
            ]
          }
        ]
      },
      {
        "label": "Receive it",
        "tasks": [
          {
            "label": "Follow the order",
            "stories": [
              {
                "title": "Confirmation email",
                "release": "MVP"
              },
              {
                "title": "Tracking page",
                "release": "Release 2"
              }
            ]
          },
          {
            "label": "Return an item",
            "stories": [
              {
                "title": "Return label by email",
                "release": "Release 2"
              }
            ]
          }
        ]
      }
    ]
  }
}
Story map of an online shop
Story map of an online shopStory map of 3 activities, 6 tasks and 12 stories in 3 releases. Find a product: Browse the catalog (MVP: List products by category; Release 2: Filter by price); Search (MVP: Search by name; Later: Suggest while typing). Buy it: Fill the cart (MVP: Add and remove items; Release 2: Save the cart for later); Pay (MVP: Pay by card; Release 2: Pay by invoice; Later: Split the payment). Receive it: Follow the order (MVP: Confirmation email; Release 2: Tracking page); Return an item (Release 2: Return label by email).Find a productFind a productBuy itBuy itReceive itReceive itBrowse the catalogBrowse the catalogSearchSearchFill the cartFill the cartPayPayFollow the orderFollow the orderReturn an itemReturn an itemMVPList products by categoryList products bycategorySearch by nameSearch by nameAdd and remove itemsAdd and removeitemsPay by cardPay by cardConfirmation emailConfirmation emailRelease 2Filter by priceFilter by priceSave the cart for laterSave the cart forlaterPay by invoicePay by invoiceTracking pageTracking pageReturn label by emailReturn label by emailLaterSuggest while typingSuggest while typingSplit the paymentSplit the payment
Story map of an online shopStory map of 3 activities, 6 tasks and 12 stories in 3 releases. Find a product: Browse the catalog (MVP: List products by category; Release 2: Filter by price); Search (MVP: Search by name; Later: Suggest while typing). Buy it: Fill the cart (MVP: Add and remove items; Release 2: Save the cart for later); Pay (MVP: Pay by card; Release 2: Pay by invoice; Later: Split the payment). Receive it: Follow the order (MVP: Confirmation email; Release 2: Tracking page); Return an item (Release 2: Return label by email).Find a productFind a productBrowse the catalogBrowse the catalogList products by categoryList products by categoryMVPFilter by priceFilter by priceRelease 2SearchSearchSearch by nameSearch by nameMVPSuggest while typingSuggest while typingLaterBuy itBuy itFill the cartFill the cartAdd and remove itemsAdd and remove itemsMVPSave the cart for laterSave the cart for laterRelease 2PayPayPay by cardPay by cardMVPPay by invoicePay by invoiceRelease 2Split the paymentSplit the paymentLaterReceive itReceive itFollow the orderFollow the orderConfirmation emailConfirmation emailMVPTracking pageTracking pageRelease 2Return an itemReturn an itemReturn label by emailReturn label by emailRelease 2

Source: Illustrative backlog of a small shop

Show chart data
Data for Story map of an online shop
ActivityTaskReleaseStory
Find a productBrowse the catalogMVPList products by category
Find a productBrowse the catalogRelease 2Filter by price
Find a productSearchMVPSearch by name
Find a productSearchLaterSuggest while typing
Buy itFill the cartMVPAdd and remove items
Buy itFill the cartRelease 2Save the cart for later
Buy itPayMVPPay by card
Buy itPayRelease 2Pay by invoice
Buy itPayLaterSplit the payment
Receive itFollow the orderMVPConfirmation email
Receive itFollow the orderRelease 2Tracking page
Receive itReturn an itemRelease 2Return label by email
  • Story map
  • Plan releases from the user's view

A customer asks for help

examples/customer-support-journey.jsonDetail: A customer asks for help →
{
  "schemaVersion": 1,
  "type": "journey",
  "title": "A customer asks for help",
  "source": "Illustrative journey of a software subscriber",
  "width": 900,
  "height": 520,
  "mobile": {
    "width": 380,
    "height": 1260
  },
  "journey": {
    "stages": [
      {
        "label": "Notice the problem",
        "action": "Cannot export a report, tries twice",
        "touchpoint": "Product",
        "thought": "Did I do something wrong?",
        "sentiment": -1
      },
      {
        "label": "Look for an answer",
        "action": "Searches the help center and the community forum",
        "touchpoint": "Help center, forum",
        "thought": "These articles are about the old version",
        "sentiment": -2
      },
      {
        "label": "Contact support",
        "action": "Opens a chat and describes the export error",
        "touchpoint": "Chat widget",
        "thought": "At least someone answers quickly",
        "sentiment": 0
      },
      {
        "label": "Get it solved",
        "action": "Follows the steps the agent sends",
        "touchpoint": "Chat, email",
        "thought": "That was simple once I knew it",
        "sentiment": 1
      },
      {
        "label": "Follow up",
        "action": "Answers the satisfaction survey",
        "touchpoint": "Email",
        "thought": "I will recommend the support at least",
        "sentiment": 2
      }
    ]
  }
}
A customer asks for help
A customer asks for helpUser journey of 5 stages: Notice the problem: actions: Cannot export a report, tries twice; touchpoints: Product; thoughts: Did I do something wrong?; sentiment: -1. Look for an answer: actions: Searches the help center and the community forum; touchpoints: Help center, forum; thoughts: These articles are about the old version; sentiment: -2. Contact support: actions: Opens a chat and describes the export error; touchpoints: Chat widget; thoughts: At least someone answers quickly; sentiment: 0. Get it solved: actions: Follows the steps the agent sends; touchpoints: Chat, email; thoughts: That was simple once I knew it; sentiment: +1. Follow up: actions: Answers the satisfaction survey; touchpoints: Email; thoughts: I will recommend the support at least; sentiment: +2.Notice the problemLook for an answerContact supportGet it solvedFollow upCannot export areport, tries twiceSearches the helpcenter and thecommunity forumOpens a chat anddescribes the exporterrorFollows the stepsthe agent sendsAnswers thesatisfaction surveyActionsProductHelp center, forumChat widgetChat, emailEmailTouchpointsDid I do somethingwrong?These articles areabout the old versionAt least someoneanswers quicklyThat was simpleonce I knew itI will recommend thesupport at leastThoughts-2-10+1+2Notice the problem: -1-1Look for an answer: -2-2Contact support: 00Get it solved: +1+1Follow up: +2+2Sentiment
A customer asks for helpUser journey of 5 stages: Notice the problem: actions: Cannot export a report, tries twice; touchpoints: Product; thoughts: Did I do something wrong?; sentiment: -1. Look for an answer: actions: Searches the help center and the community forum; touchpoints: Help center, forum; thoughts: These articles are about the old version; sentiment: -2. Contact support: actions: Opens a chat and describes the export error; touchpoints: Chat widget; thoughts: At least someone answers quickly; sentiment: 0. Get it solved: actions: Follows the steps the agent sends; touchpoints: Chat, email; thoughts: That was simple once I knew it; sentiment: +1. Follow up: actions: Answers the satisfaction survey; touchpoints: Email; thoughts: I will recommend the support at least; sentiment: +2.Notice the problemActionsCannot export a report, tries twiceTouchpointsProductThoughtsDid I do something wrong?Sentiment-1Look for an answerActionsSearches the help center and the community forumTouchpointsHelp center, forumThoughtsThese articles are about the old versionSentiment-2Contact supportActionsOpens a chat and describes the export errorTouchpointsChat widgetThoughtsAt least someone answers quicklySentiment0Get it solvedActionsFollows the steps the agent sendsTouchpointsChat, emailThoughtsThat was simple once I knew itSentiment+1Follow upActionsAnswers the satisfaction surveyTouchpointsEmailThoughtsI will recommend the support at leastSentiment+2

Source: Illustrative journey of a software subscriber

Show chart data
Data for A customer asks for help
StageActionsTouchpointsThoughtsSentiment
Notice the problemCannot export a report, tries twiceProductDid I do something wrong?-1
Look for an answerSearches the help center and the community forumHelp center, forumThese articles are about the old version-2
Contact supportOpens a chat and describes the export errorChat widgetAt least someone answers quickly0
Get it solvedFollows the steps the agent sendsChat, emailThat was simple once I knew it+1
Follow upAnswers the satisfaction surveyEmailI will recommend the support at least+2
  • User journey
  • Follow a customer through stages

Service blueprint of a support request

examples/support-blueprint.jsonDetail: Service blueprint of a support request →
{
  "schemaVersion": 1,
  "type": "journey",
  "title": "Service blueprint of a support request",
  "source": "Illustrative blueprint of a software subscription's support",
  "width": 960,
  "height": 640,
  "mobile": {
    "width": 380,
    "height": 1300
  },
  "journey": {
    "display": "blueprint",
    "stages": [
      {
        "label": "Ask",
        "action": "Opens a chat and describes the problem",
        "touchpoint": "Chat widget",
        "sentiment": -1,
        "frontstage": "Greets the customer and asks for the account",
        "backstage": "Routes the chat by product and language",
        "support": "Chat platform, customer database"
      },
      {
        "label": "Solve",
        "action": "Follows the steps",
        "touchpoint": "Chat, email",
        "sentiment": 1,
        "frontstage": "Sends the steps and checks that they worked",
        "backstage": "Files a bug when the cause is the product",
        "support": "Knowledge base, issue tracker"
      },
      {
        "label": "Close",
        "action": "Rates the conversation",
        "touchpoint": "Email survey",
        "sentiment": 2,
        "frontstage": "Thanks the customer and closes the chat",
        "backstage": "Tags the conversation, updates the article",
        "support": "Survey tool, knowledge base"
      }
    ]
  }
}
Service blueprint of a support request
Service blueprint of a support requestService blueprint of 3 stages, with the customer's rows above the line of interaction and the service's below it: Ask: actions: Opens a chat and describes the problem; touchpoints: Chat widget; sentiment: -1; frontstage: Greets the customer and asks for the account; backstage: Routes the chat by product and language; support: Chat platform, customer database. Solve: actions: Follows the steps; touchpoints: Chat, email; sentiment: +1; frontstage: Sends the steps and checks that they worked; backstage: Files a bug when the cause is the product; support: Knowledge base, issue tracker. Close: actions: Rates the conversation; touchpoints: Email survey; sentiment: +2; frontstage: Thanks the customer and closes the chat; backstage: Tags the conversation, updates the article; support: Survey tool, knowledge base.AskSolveCloseOpens a chat and describes theproblemFollows the stepsRates the conversationActionsChat widgetChat, emailEmail surveyTouchpoints-2-10+1+2Ask: -1-1Solve: +1+1Close: +2+2SentimentLine of interactionGreets the customer and asksfor the accountSends the steps and checksthat they workedThanks the customer andcloses the chatFrontstageLine of visibilityRoutes the chat by productand languageFiles a bug when the cause isthe productTags the conversation,updates the articleBackstageChat platform, customerdatabaseKnowledge base, issue trackerSurvey tool, knowledge baseSupport
Service blueprint of a support requestService blueprint of 3 stages, with the customer's rows above the line of interaction and the service's below it: Ask: actions: Opens a chat and describes the problem; touchpoints: Chat widget; sentiment: -1; frontstage: Greets the customer and asks for the account; backstage: Routes the chat by product and language; support: Chat platform, customer database. Solve: actions: Follows the steps; touchpoints: Chat, email; sentiment: +1; frontstage: Sends the steps and checks that they worked; backstage: Files a bug when the cause is the product; support: Knowledge base, issue tracker. Close: actions: Rates the conversation; touchpoints: Email survey; sentiment: +2; frontstage: Thanks the customer and closes the chat; backstage: Tags the conversation, updates the article; support: Survey tool, knowledge base.AskActionsOpens a chat and describes the problemTouchpointsChat widgetSentiment-1Line of interactionFrontstageGreets the customer and asks for the accountLine of visibilityBackstageRoutes the chat by product and languageSupportChat platform, customer databaseSolveActionsFollows the stepsTouchpointsChat, emailSentiment+1Line of interactionFrontstageSends the steps and checks that they workedLine of visibilityBackstageFiles a bug when the cause is the productSupportKnowledge base, issue trackerCloseActionsRates the conversationTouchpointsEmail surveySentiment+2Line of interactionFrontstageThanks the customer and closes the chatLine of visibilityBackstageTags the conversation, updates the articleSupportSurvey tool, knowledge base

Source: Illustrative blueprint of a software subscription's support

Show chart data
Data for Service blueprint of a support request
StageActionsTouchpointsSentimentFrontstageBackstageSupport
AskOpens a chat and describes the problemChat widget-1Greets the customer and asks for the accountRoutes the chat by product and languageChat platform, customer database
SolveFollows the stepsChat, email+1Sends the steps and checks that they workedFiles a bug when the cause is the productKnowledge base, issue tracker
CloseRates the conversationEmail survey+2Thanks the customer and closes the chatTags the conversation, updates the articleSurvey tool, knowledge base
  • Service blueprint
  • Show the service behind the journey

Value chain of an online coffee shop

examples/coffee-shop-chain.jsonDetail: Value chain of an online coffee shop →
{
  "schemaVersion": 1,
  "type": "valuemap",
  "title": "Value chain of an online coffee shop",
  "source": "Illustrative map of a small online retailer",
  "width": 900,
  "height": 560,
  "mobile": {
    "width": 380,
    "height": 640
  },
  "valuemap": {
    "components": [
      {
        "id": "customer",
        "label": "Coffee at home",
        "visibility": 0.97,
        "evolution": 0.62
      },
      {
        "id": "shop",
        "label": "Web shop",
        "visibility": 0.84,
        "evolution": 0.55
      },
      {
        "id": "subscription",
        "label": "Subscription",
        "visibility": 0.76,
        "evolution": 0.3,
        "movesTo": {
          "evolution": 0.55
        }
      },
      {
        "id": "payment",
        "label": "Payment",
        "visibility": 0.62,
        "evolution": 0.88
      },
      {
        "id": "roasting",
        "label": "Roasting",
        "visibility": 0.5,
        "evolution": 0.35,
        "inertia": true
      },
      {
        "id": "shipping",
        "label": "Shipping",
        "visibility": 0.44,
        "evolution": 0.78
      },
      {
        "id": "recommendation",
        "label": "Taste matching",
        "visibility": 0.58,
        "evolution": 0.12,
        "movesTo": {
          "evolution": 0.34
        }
      },
      {
        "id": "beans",
        "label": "Green beans",
        "visibility": 0.28,
        "evolution": 0.8
      },
      {
        "id": "hosting",
        "label": "Hosting",
        "visibility": 0.16,
        "evolution": 0.93
      }
    ],
    "dependencies": [
      {
        "from": "customer",
        "to": "shop"
      },
      {
        "from": "shop",
        "to": "subscription"
      },
      {
        "from": "shop",
        "to": "payment"
      },
      {
        "from": "shop",
        "to": "recommendation"
      },
      {
        "from": "subscription",
        "to": "roasting"
      },
      {
        "from": "subscription",
        "to": "shipping"
      },
      {
        "from": "roasting",
        "to": "beans"
      },
      {
        "from": "shop",
        "to": "hosting"
      },
      {
        "from": "recommendation",
        "to": "hosting"
      }
    ]
  }
}
Value chain of an online coffee shop
Value chain of an online coffee shopValue chain map of 9 components, from the most visible to the user down, each with its visibility, its stage of evolution and where it moves: Coffee at home (visibility 97%, Product). Web shop (visibility 84%, Product). Subscription (visibility 76%, Custom, moving to Product). Payment (visibility 62%, Commodity). Taste matching (visibility 58%, Genesis, moving to Custom). Roasting (visibility 50%, Custom, with inertia). Shipping (visibility 44%, Commodity). Green beans (visibility 28%, Commodity). Hosting (visibility 16%, Commodity). Dependencies: Coffee at home needs Web shop; Web shop needs Subscription; Web shop needs Payment; Web shop needs Taste matching; Subscription needs Roasting; Subscription needs Shipping; Roasting needs Green beans; Web shop needs Hosting; Taste matching needs Hosting.GenesisCustomProductCommodityEvolutionVisibility to the uservisiblehiddenSubscription: moves to 55%Taste matching: moves to 34%Coffee at home: visibility 97%, evolution 62%Web shop: visibility 84%, evolution 55%Subscription: visibility 76%, evolution 30%Payment: visibility 62%, evolution 88%Roasting: visibility 50%, evolution 35%Shipping: visibility 44%, evolution 78%Taste matching: visibility 58%, evolution 12%Green beans: visibility 28%, evolution 80%Hosting: visibility 16%, evolution 93%Coffee at homeWeb shopSubscriptionPaymentTaste matchingRoastingShippingGreen beansHosting
Value chain of an online coffee shopValue chain map of 9 components, from the most visible to the user down, each with its visibility, its stage of evolution and where it moves: Coffee at home (visibility 97%, Product). Web shop (visibility 84%, Product). Subscription (visibility 76%, Custom, moving to Product). Payment (visibility 62%, Commodity). Taste matching (visibility 58%, Genesis, moving to Custom). Roasting (visibility 50%, Custom, with inertia). Shipping (visibility 44%, Commodity). Green beans (visibility 28%, Commodity). Hosting (visibility 16%, Commodity). Dependencies: Coffee at home needs Web shop; Web shop needs Subscription; Web shop needs Payment; Web shop needs Taste matching; Subscription needs Roasting; Subscription needs Shipping; Roasting needs Green beans; Web shop needs Hosting; Taste matching needs Hosting.GenesisCustomProductCommodityEvolutionVisibility to the uservisiblehiddenSubscription: moves to 55%Taste matching: moves to 34%Coffee at home: visibility 97%, evolution 62%Web shop: visibility 84%, evolution 55%Subscription: visibility 76%, evolution 30%Payment: visibility 62%, evolution 88%Roasting: visibility 50%, evolution 35%Shipping: visibility 44%, evolution 78%Taste matching: visibility 58%, evolution 12%Green beans: visibility 28%, evolution 80%Hosting: visibility 16%, evolution 93%Coffee at homeWeb shopSubscriptionPaymentTaste matchingRoastingShippingGreen beansHosting

Source: Illustrative map of a small online retailer

Show chart data
Data for Value chain of an online coffee shop
ComponentVisibilityEvolutionStageMoves toInertiaNeeds
Coffee at home97%62%ProductWeb shop
Web shop84%55%ProductSubscription, Payment, Taste matching, Hosting
Subscription76%30%Custom55%Roasting, Shipping
Payment62%88%Commodity
Taste matching58%12%Genesis34%Hosting
Roasting50%35%CustomyesGreen beans
Shipping44%78%Commodity
Green beans28%80%Commodity
Hosting16%93%Commodity
  • Value chain map
  • Show what a service depends on and where it is going

Where the team's skills overlap

examples/team-skills.jsonDetail: Where the team's skills overlap →
{
  "schemaVersion": 1,
  "type": "venn",
  "title": "Where the team's skills overlap",
  "source": "Illustrative skills survey of a product team of 24",
  "width": 760,
  "height": 520,
  "mobile": {
    "width": 380,
    "height": 560
  },
  "venn": {
    "sets": [
      "Design",
      "Engineering",
      "Research"
    ],
    "regions": [
      {
        "sets": [
          "Design"
        ],
        "label": "Visual design only",
        "count": 3
      },
      {
        "sets": [
          "Engineering"
        ],
        "label": "Engineering only",
        "count": 9
      },
      {
        "sets": [
          "Research"
        ],
        "label": "Research only",
        "count": 2
      },
      {
        "sets": [
          "Design",
          "Engineering"
        ],
        "label": "Prototyping",
        "count": 4
      },
      {
        "sets": [
          "Design",
          "Research"
        ],
        "label": "Usability testing",
        "count": 2
      },
      {
        "sets": [
          "Engineering",
          "Research"
        ],
        "label": "Analytics",
        "count": 3
      },
      {
        "sets": [
          "Design",
          "Engineering",
          "Research"
        ],
        "label": "Product discovery",
        "count": 1
      }
    ]
  }
}
Where the team's skills overlap
Where the team's skills overlapVenn diagram of 3 sets: Design, Engineering and Research. only Design: Visual design only (3). only Engineering: Engineering only (9). only Research: Research only (2). Design and Engineering: Prototyping (4). Design and Research: Usability testing (2). Engineering and Research: Analytics (3). Design, Engineering and Research: Product discovery (1).DesignEngineeringResearchDesignEngineeringResearchVisual design only3Engineering only9Research only2Prototyping4Usabilitytesting2Analytics3Productdiscovery1
Where the team's skills overlapVenn diagram of 3 sets: Design, Engineering and Research. only Design: Visual design only (3). only Engineering: Engineering only (9). only Research: Research only (2). Design and Engineering: Prototyping (4). Design and Research: Usability testing (2). Engineering and Research: Analytics (3). Design, Engineering and Research: Product discovery (1).DesignEngineeringResearchDesignEngineeringResearchVisual designonly3Engineeringonly9Research only21Usabilitytesting2Analytics321Prototyping42Product discovery1

Source: Illustrative skills survey of a product team of 24

Show chart data
Data for Where the team's skills overlap
RegionLabelCount
only DesignVisual design only3
only EngineeringEngineering only9
only ResearchResearch only2
Design and EngineeringPrototyping4
Design and ResearchUsability testing2
Engineering and ResearchAnalytics3
Design, Engineering and ResearchProduct discovery1
  • Venn diagram
  • Show what sets share

Mobile variant

Monthly revenue by sales channel

examples/mobile-revenue.jsonDetail: Monthly revenue by sales channel →
{
  "schemaVersion": 1,
  "type": "time",
  "title": "Monthly revenue by sales channel",
  "description": "Direct sales led every month and grew from 420 to 560 thousand over eighteen months; partner and marketplace revenue rose more slowly, each with a peak in December.",
  "source": "Illustrative values, chartlet",
  "showValues": false,
  "timeAxis": {
    "timezone": "UTC",
    "title": "Month"
  },
  "panes": [
    {
      "valueAxis": {
        "title": "Revenue in thousands"
      },
      "layers": [
        {
          "mark": "line",
          "name": "Direct sales",
          "points": [
            {
              "time": "2025-01-01",
              "value": 420
            },
            {
              "time": "2025-02-01",
              "value": 432
            },
            {
              "time": "2025-03-01",
              "value": 445
            },
            {
              "time": "2025-04-01",
              "value": 451
            },
            {
              "time": "2025-05-01",
              "value": 468
            },
            {
              "time": "2025-06-01",
              "value": 474
            },
            {
              "time": "2025-07-01",
              "value": 490
            },
            {
              "time": "2025-08-01",
              "value": 482
            },
            {
              "time": "2025-09-01",
              "value": 505
            },
            {
              "time": "2025-10-01",
              "value": 512
            },
            {
              "time": "2025-11-01",
              "value": 530
            },
            {
              "time": "2025-12-01",
              "value": 561
            },
            {
              "time": "2026-01-01",
              "value": 498
            },
            {
              "time": "2026-02-01",
              "value": 506
            },
            {
              "time": "2026-03-01",
              "value": 522
            },
            {
              "time": "2026-04-01",
              "value": 531
            },
            {
              "time": "2026-05-01",
              "value": 544
            },
            {
              "time": "2026-06-01",
              "value": 560
            }
          ]
        },
        {
          "mark": "line",
          "name": "Partner network",
          "points": [
            {
              "time": "2025-01-01",
              "value": 180
            },
            {
              "time": "2025-02-01",
              "value": 186
            },
            {
              "time": "2025-03-01",
              "value": 205
            },
            {
              "time": "2025-04-01",
              "value": 199
            },
            {
              "time": "2025-05-01",
              "value": 198
            },
            {
              "time": "2025-06-01",
              "value": 214
            },
            {
              "time": "2025-07-01",
              "value": 224
            },
            {
              "time": "2025-08-01",
              "value": 219
            },
            {
              "time": "2025-09-01",
              "value": 236
            },
            {
              "time": "2025-10-01",
              "value": 232
            },
            {
              "time": "2025-11-01",
              "value": 241
            },
            {
              "time": "2025-12-01",
              "value": 268
            },
            {
              "time": "2026-01-01",
              "value": 226
            },
            {
              "time": "2026-02-01",
              "value": 231
            },
            {
              "time": "2026-03-01",
              "value": 244
            },
            {
              "time": "2026-04-01",
              "value": 250
            },
            {
              "time": "2026-05-01",
              "value": 255
            },
            {
              "time": "2026-06-01",
              "value": 262
            }
          ]
        },
        {
          "mark": "line",
          "name": "Marketplace",
          "points": [
            {
              "time": "2025-01-01",
              "value": 96
            },
            {
              "time": "2025-02-01",
              "value": 91
            },
            {
              "time": "2025-03-01",
              "value": 88
            },
            {
              "time": "2025-04-01",
              "value": 104
            },
            {
              "time": "2025-05-01",
              "value": 121
            },
            {
              "time": "2025-06-01",
              "value": 118
            },
            {
              "time": "2025-07-01",
              "value": 132
            },
            {
              "time": "2025-08-01",
              "value": 127
            },
            {
              "time": "2025-09-01",
              "value": 140
            },
            {
              "time": "2025-10-01",
              "value": 146
            },
            {
              "time": "2025-11-01",
              "value": 158
            },
            {
              "time": "2025-12-01",
              "value": 189
            },
            {
              "time": "2026-01-01",
              "value": 149
            },
            {
              "time": "2026-02-01",
              "value": 152
            },
            {
              "time": "2026-03-01",
              "value": 160
            },
            {
              "time": "2026-04-01",
              "value": 166
            },
            {
              "time": "2026-05-01",
              "value": 171
            },
            {
              "time": "2026-06-01",
              "value": 178
            }
          ]
        }
      ]
    }
  ],
  "mobile": {
    "width": 360,
    "height": 420,
    "breakpoint": 640
  }
}
Monthly revenue by sales channel
Monthly revenue by sales channelDirect sales led every month and grew from 420 to 560 thousand over eighteen months; partner and marketplace revenue rose more slowly, each with a peak in December.02004006002025-012025-042025-072025-102026-012026-04Revenue in thousandsDirect salesPartner networkMarketplace2025-01 – Direct sales: 4202025-02 – Direct sales: 4322025-03 – Direct sales: 4452025-04 – Direct sales: 4512025-05 – Direct sales: 4682025-06 – Direct sales: 4742025-07 – Direct sales: 4902025-08 – Direct sales: 4822025-09 – Direct sales: 5052025-10 – Direct sales: 5122025-11 – Direct sales: 5302025-12 – Direct sales: 5612026-01 – Direct sales: 4982026-02 – Direct sales: 5062026-03 – Direct sales: 5222026-04 – Direct sales: 5312026-05 – Direct sales: 5442026-06 – Direct sales: 5602025-01 – Partner network: 1802025-02 – Partner network: 1862025-03 – Partner network: 2052025-04 – Partner network: 1992025-05 – Partner network: 1982025-06 – Partner network: 2142025-07 – Partner network: 2242025-08 – Partner network: 2192025-09 – Partner network: 2362025-10 – Partner network: 2322025-11 – Partner network: 2412025-12 – Partner network: 2682026-01 – Partner network: 2262026-02 – Partner network: 2312026-03 – Partner network: 2442026-04 – Partner network: 2502026-05 – Partner network: 2552026-06 – Partner network: 2622025-01 – Marketplace: 962025-02 – Marketplace: 912025-03 – Marketplace: 882025-04 – Marketplace: 1042025-05 – Marketplace: 1212025-06 – Marketplace: 1182025-07 – Marketplace: 1322025-08 – Marketplace: 1272025-09 – Marketplace: 1402025-10 – Marketplace: 1462025-11 – Marketplace: 1582025-12 – Marketplace: 1892026-01 – Marketplace: 1492026-02 – Marketplace: 1522026-03 – Marketplace: 1602026-04 – Marketplace: 1662026-05 – Marketplace: 1712026-06 – Marketplace: 178Month
Monthly revenue by sales channelDirect sales led every month and grew from 420 to 560 thousand over eighteen months; partner and marketplace revenue rose more slowly, each with a peak in December.02004006002025-012025-072026-01Revenue in thousandsDirect salesPartner networkMarketplace2025-01 – Direct sales: 4202025-02 – Direct sales: 4322025-03 – Direct sales: 4452025-04 – Direct sales: 4512025-05 – Direct sales: 4682025-06 – Direct sales: 4742025-07 – Direct sales: 4902025-08 – Direct sales: 4822025-09 – Direct sales: 5052025-10 – Direct sales: 5122025-11 – Direct sales: 5302025-12 – Direct sales: 5612026-01 – Direct sales: 4982026-02 – Direct sales: 5062026-03 – Direct sales: 5222026-04 – Direct sales: 5312026-05 – Direct sales: 5442026-06 – Direct sales: 5602025-01 – Partner network: 1802025-02 – Partner network: 1862025-03 – Partner network: 2052025-04 – Partner network: 1992025-05 – Partner network: 1982025-06 – Partner network: 2142025-07 – Partner network: 2242025-08 – Partner network: 2192025-09 – Partner network: 2362025-10 – Partner network: 2322025-11 – Partner network: 2412025-12 – Partner network: 2682026-01 – Partner network: 2262026-02 – Partner network: 2312026-03 – Partner network: 2442026-04 – Partner network: 2502026-05 – Partner network: 2552026-06 – Partner network: 2622025-01 – Marketplace: 962025-02 – Marketplace: 912025-03 – Marketplace: 882025-04 – Marketplace: 1042025-05 – Marketplace: 1212025-06 – Marketplace: 1182025-07 – Marketplace: 1322025-08 – Marketplace: 1272025-09 – Marketplace: 1402025-10 – Marketplace: 1462025-11 – Marketplace: 1582025-12 – Marketplace: 1892026-01 – Marketplace: 1492026-02 – Marketplace: 1522026-03 – Marketplace: 1602026-04 – Marketplace: 1662026-05 – Marketplace: 1712026-06 – Marketplace: 178Month

Source: Illustrative values, chartlet

Show chart data
Data for Monthly revenue by sales channel
TimeDirect salesPartner networkMarketplace
2025-0142018096
2025-0243218691
2025-0344520588
2025-04451199104
2025-05468198121
2025-06474214118
2025-07490224132
2025-08482219127
2025-09505236140
2025-10512232146
2025-11530241158
2025-12561268189
2026-01498226149
2026-02506231152
2026-03522244160
2026-04531250166
2026-05544255171
2026-06560262178
  • Mobile variant
  • Stay readable on a phone

Recipes

Revenue by region and quarter

examples/recipes/report-from-csv/spec.jsonDetail: Revenue by region and quarter →
{
  "schemaVersion": 1,
  "type": "bar",
  "title": "Revenue by region and quarter",
  "source": "Sample data for this recipe, not real measurements",
  "width": 800,
  "height": 450,
  "categoryAxis": {
    "title": "Quarter"
  },
  "valueAxis": {
    "title": "Revenue in thousands",
    "thousandsSeparator": true
  },
  "categories": [
    "Q1",
    "Q2",
    "Q3",
    "Q4"
  ],
  "series": [
    {
      "name": "North",
      "values": [
        120,
        135,
        142,
        150
      ]
    },
    {
      "name": "South",
      "values": [
        98,
        104,
        null,
        121
      ]
    },
    {
      "name": "West",
      "values": [
        76,
        81,
        90,
        97
      ]
    }
  ],
  "showValues": false,
  "mobile": {
    "width": 360
  }
}
Series
Revenue by region and quarter
Revenue by region and quarterBar chart with 4 categories and 3 series (North, South, West). Highest: 150 (North in Q4). Lowest: 76 (West in Q1). 1 value is missing.050100150Revenue in thousandsNorthSouthWestQ1 – North: 120Q1 – South: 98Q1 – West: 76Q1Q2 – North: 135Q2 – South: 104Q2 – West: 81Q2Q3 – North: 142Q3 – West: 90Q3Q4 – North: 150Q4 – South: 121Q4 – West: 97Q4Quarter
Revenue by region and quarterBar chart with 4 categories and 3 series (North, South, West). Highest: 150 (North in Q4). Lowest: 76 (West in Q1). 1 value is missing.050100150Revenue in thousandsNorthSouthWestQ1 – North: 120Q1 – South: 98Q1 – West: 76Q1Q2 – North: 135Q2 – South: 104Q2 – West: 81Q2Q3 – North: 142Q3 – West: 90Q3Q4 – North: 150Q4 – South: 121Q4 – West: 97Q4Quarter

Source: Sample data for this recipe, not real measurements

Show chart data
Data for Revenue by region and quarter
CategoryNorthSouthWest
Q11209876
Q213510481
Q3142Missing90
Q415012197
  • Report from CSV
  • Bar (grouped)
  • HTML, narrow screen, print

How a cached page is served

examples/recipes/blog-explanation/spec.jsonDetail: How a cached page is served →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "How a cached page is served",
  "source": "Illustration for this recipe",
  "description": "A request is answered from the cache when the page is there and still fresh; otherwise the server renders it, stores it and answers.",
  "width": 1200,
  "height": 420,
  "flow": {
    "nodes": [
      {
        "id": "request",
        "label": "Request arrives",
        "kind": "start"
      },
      {
        "id": "lookup",
        "label": "In the cache?",
        "kind": "decision"
      },
      {
        "id": "fresh",
        "label": "Still fresh?",
        "kind": "decision"
      },
      {
        "id": "render",
        "label": "Render the page"
      },
      {
        "id": "store",
        "label": "Store it",
        "kind": "store"
      },
      {
        "id": "answer",
        "label": "Send the answer",
        "kind": "end"
      }
    ],
    "edges": [
      {
        "from": "request",
        "to": "lookup"
      },
      {
        "from": "lookup",
        "to": "fresh",
        "label": "yes"
      },
      {
        "from": "lookup",
        "to": "render",
        "label": "no"
      },
      {
        "from": "fresh",
        "to": "answer",
        "label": "yes"
      },
      {
        "from": "fresh",
        "to": "render",
        "label": "no"
      },
      {
        "from": "render",
        "to": "store"
      },
      {
        "from": "store",
        "to": "answer"
      }
    ]
  },
  "mobile": {
    "width": 360,
    "height": 660
  }
}
Focus
How a cached page is served
How a cached page is servedA request is answered from the cache when the page is there and still fresh; otherwise the server renders it, stores it and answers.Request arrives → In the cache?In the cache? → Still fresh?: yesIn the cache? → Render the page: noStill fresh? → Send the answer: yesStill fresh? → Render the page: noRender the page → Store itStore it → Send the answeryesnoyesnoRequest arrivesRequest arrivesIn the cache?In the cache?Still fresh?Still fresh?Render the pageRender the pageStore itStore itSend the answerSend the answer
How a cached page is servedA request is answered from the cache when the page is there and still fresh; otherwise the server renders it, stores it and answers.Request arrives → In the cache?In the cache? → Still fresh?: yesIn the cache? → Render the page: noStill fresh? → Send the answer: yesStill fresh? → Render the page: noRender the page → Store itStore it → Send the answeryesnoyesnoRequest arrivesRequestarrivesIn the cache?In the cache?Still fresh?Still fresh?Render the pageRender thepageStore itStore itSend the answerSend theanswer

Source: Illustration for this recipe

Show chart data
Data for How a cached page is served
StepKindLeads to
Request arrivesstartIn the cache?
In the cache?decisionStill fresh? (yes), Render the page (no)
Still fresh?decisionSend the answer (yes), Render the page (no)
Render the pagestepStore it
Store itdata storeSend the answer
Send the answerend
  • Blog explanation
  • Flow chart
  • HTML with table, narrow screen

Booking service

examples/recipes/architecture-views/spec.jsonDetail: Booking service →
{
  "schemaVersion": 1,
  "type": "architecture",
  "title": "Booking service",
  "source": "Illustrative model for this recipe",
  "width": 1200,
  "height": 480,
  "architecture": {
    "boundaries": [
      {
        "id": "system",
        "label": "Booking system"
      }
    ],
    "components": [
      {
        "id": "guest",
        "label": "Guest",
        "kind": "person"
      },
      {
        "id": "web",
        "label": "Booking site",
        "sublabel": "browser",
        "kind": "frontend",
        "in": "system"
      },
      {
        "id": "api",
        "label": "Booking API",
        "sublabel": "Node.js",
        "in": "system"
      },
      {
        "id": "db",
        "label": "Reservations",
        "sublabel": "Postgres",
        "kind": "database",
        "in": "system"
      },
      {
        "id": "mail",
        "label": "Mail service",
        "sublabel": "SMTP provider",
        "kind": "external"
      }
    ],
    "connections": [
      {
        "id": "visit",
        "from": "guest",
        "to": "web",
        "label": "books a room"
      },
      {
        "id": "call",
        "from": "web",
        "to": "api",
        "label": "calls",
        "technology": "HTTPS/JSON"
      },
      {
        "id": "save",
        "from": "api",
        "to": "db",
        "label": "stores",
        "technology": "SQL/TLS"
      },
      {
        "id": "confirm",
        "from": "api",
        "to": "mail",
        "label": "sends confirmation",
        "technology": "SMTP"
      }
    ],
    "views": [
      {
        "key": "context",
        "title": "Booking service: context",
        "components": [
          "guest",
          "api",
          "mail"
        ]
      },
      {
        "key": "booking",
        "title": "Booking service: one booking",
        "steps": [
          {
            "connection": "visit",
            "label": "chooses dates"
          },
          {
            "connection": "call",
            "label": "submits"
          },
          {
            "connection": "save",
            "label": "reserves"
          },
          {
            "connection": "confirm"
          }
        ]
      }
    ]
  }
}
Focus
Booking service: context
Booking service: contextArchitecture diagram with 3 components and 1 connection in 1 boundary. It is a view that shows 3 of the model's 5 components and 1 of its 4 connections. Booking system: Booking API. Nothing leads into Booking API. Nothing leads out of Mail service. The diagram has 2 unconnected parts. Guest (person): no outgoing connection. Booking API (service): connects to Mail service (sends confirmation, via SMTP). Mail service (external system): no outgoing connection.Booking systemBooking API → Mail service: sends confirmation [SMTP]sends confirmation[SMTP]GuestGuestBooking API – Node.jsBooking APINode.jsMail service – SMTP providerMail serviceSMTP provider

Source: Illustrative model for this recipe

Show chart data
Data for Booking service: context
ComponentKindBoundaryConnects to
Guestperson
Booking APIserviceBooking systemMail service (sends confirmation, via SMTP)
Mail serviceexternal system
  • Software architecture in views
  • Architecture (views)
  • Page of all views, SVG per view

From tag to published release

examples/recipes/release-flow/spec.jsonDetail: From tag to published release →
{
  "schemaVersion": 1,
  "type": "flow",
  "title": "From tag to published release",
  "source": "Illustrative process for this recipe",
  "width": 1000,
  "height": 700,
  "flow": {
    "lanes": [
      {
        "id": "dev",
        "label": "Maintainer"
      },
      {
        "id": "ci",
        "label": "Pipeline"
      }
    ],
    "nodes": [
      {
        "id": "tag",
        "label": "Push version tag",
        "kind": "start",
        "lane": "dev"
      },
      {
        "id": "build",
        "label": "Build artifacts",
        "lane": "ci"
      },
      {
        "id": "sums",
        "label": "Write checksums",
        "lane": "ci"
      },
      {
        "id": "ok",
        "label": "Checks pass?",
        "kind": "decision",
        "lane": "ci"
      },
      {
        "id": "fix",
        "label": "Fix and retag",
        "lane": "dev"
      },
      {
        "id": "publish",
        "label": "Publish release",
        "kind": "end",
        "lane": "ci"
      }
    ],
    "edges": [
      {
        "from": "tag",
        "to": "build"
      },
      {
        "from": "build",
        "to": "sums"
      },
      {
        "from": "sums",
        "to": "ok"
      },
      {
        "from": "ok",
        "to": "publish",
        "label": "yes"
      },
      {
        "from": "ok",
        "to": "fix",
        "label": "no"
      },
      {
        "from": "fix",
        "to": "tag"
      }
    ]
  },
  "mobile": {
    "width": 364,
    "height": 760
  }
}
Focus
From tag to published release
From tag to published releaseFlow chart with 6 steps and 6 connections in 2 lanes: Maintainer and Pipeline. Most connected: Checks pass? (3 connections). Loop: Push version tag → Build artifacts → Write checksums → Checks pass? → Fix and retag → Push version tag. Push version tag (start) in Maintainer: leads to Build artifacts. Build artifacts in Pipeline: leads to Write checksums. Write checksums in Pipeline: leads to Checks pass?. Checks pass? (decision) in Pipeline: leads to Publish release (yes) and Fix and retag (no). Fix and retag in Maintainer: leads to Push version tag. Publish release (end) in Pipeline: no further step.MaintainerPipelinePush version tag → Build artifactsBuild artifacts → Write checksumsWrite checksums → Checks pass?Checks pass? → Publish release: yesChecks pass? → Fix and retag: noFix and retag → Push version tagyesnoPush version tagPush version tagBuild artifactsBuild artifactsWrite checksumsWrite checksumsChecks pass?Checks pass?Fix and retagFix and retagPublish releasePublish release
From tag to published releaseFlow chart with 6 steps and 6 connections in 2 lanes: Maintainer and Pipeline. Most connected: Checks pass? (3 connections). Loop: Push version tag → Build artifacts → Write checksums → Checks pass? → Fix and retag → Push version tag. Push version tag (start) in Maintainer: leads to Build artifacts. Build artifacts in Pipeline: leads to Write checksums. Write checksums in Pipeline: leads to Checks pass?. Checks pass? (decision) in Pipeline: leads to Publish release (yes) and Fix and retag (no). Fix and retag in Maintainer: leads to Push version tag. Publish release (end) in Pipeline: no further step.MaintainerPipelinePush version tag → Build artifactsBuild artifacts → Write checksumsWrite checksums → Checks pass?Checks pass? → Publish release: yesChecks pass? → Fix and retag: noFix and retag → Push version tagyesnoPush version tagPush versiontagBuild artifactsBuildartifactsWrite checksumsWritechecksumsChecks pass?Checks pass?Fix and retagFix and retagPublish releasePublishrelease

Source: Illustrative process for this recipe

Show chart data
Data for From tag to published release
StepKindLaneLeads to
Push version tagstartMaintainerBuild artifacts
Build artifactsstepPipelineWrite checksums
Write checksumsstepPipelineChecks pass?
Checks pass?decisionPipelinePublish release (yes), Fix and retag (no)
Fix and retagstepMaintainerPush version tag
Publish releaseendPipeline
  • Release flow
  • Flow chart (lanes)
  • SVG, strict build, narrow screen

Support tickets per month

examples/recipes/slide-figure/spec.jsonDetail: Support tickets per month →
{
  "schemaVersion": 1,
  "type": "bar",
  "title": "Support tickets per month",
  "source": "Sample data for this recipe, not real measurements",
  "size": "slide-16x9",
  "categoryAxis": {
    "title": "Month"
  },
  "valueAxis": {
    "title": "Tickets"
  },
  "categories": [
    "Jan",
    "Feb",
    "Mar",
    "Apr",
    "May",
    "Jun"
  ],
  "series": [
    {
      "name": "Tickets",
      "values": [
        310,
        290,
        340,
        275,
        250,
        238
      ]
    }
  ]
}
Support tickets per month
Support tickets per monthBar chart with 6 categories. Highest: 340 (Mar). Lowest: 238 (Jun).0100200300400TicketsJan – Tickets: 310310JanFeb – Tickets: 290290FebMar – Tickets: 340340MarApr – Tickets: 275275AprMay – Tickets: 250250MayJun – Tickets: 238238JunMonth

Source: Sample data for this recipe, not real measurements

Show chart data
Data for Support tickets per month
CategoryTickets
Jan310
Feb290
Mar340
Apr275
May250
Jun238
  • Slide and print figure
  • Bar
  • 16:9 SVG, print SVG, PNG

QR codes

QR code for a link

examples/qr/link.svgDetail: QR code for a link →
use chartlet::qr::{ErrorCorrection, QrCode};

let code = QrCode::encode("https://casoon.github.io/chartlet/", ErrorCorrection::Medium)?;
let svg = code.to_svg("Link to the chartlet documentation", 4);
Link to the chartlet documentation
  • QR code
  • Link a page from print