Waterfall Charts in JavaScript

How to make a D3.js-based waterfall chart in javascript.


Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Sign up for early access now.

var data = [ { name: "2018", type: "waterfall", orientation: "v", measure: [ "relative", "relative", "total", "relative", "relative", "total" ], x: [ "Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax" ], textposition: "outside", text: [ "+60", "+80", "", "-40", "-20", "Total" ], y: [ 60, 80, 0, -40, -20, 0 ], connector: { line: { color: "rgb(63, 63, 63)" } }, } ]; layout = { title: { text: "Profit and loss statement 2018" }, xaxis: { type: "category" }, yaxis: { type: "linear" }, autosize: true, showlegend: true }; Plotly.newPlot('myDiv', data, layout);
var gd = document.getElementById('myDiv'); var data = [ { type: "waterfall", x: [ ["2016", "2017", "2017", "2017", "2017", "2018", "2018", "2018", "2018"], ["initial", "q1", "q2", "q3", "total", "q1", "q2", "q3", "total" ] ], measure: ["absolute", "relative", "relative", "relative", "total", "relative", "relative", "relative", "total"], y: [1, 2, 3, -1, null, 1, 2, -4, null], base: 1000 }, { type: "waterfall", x: [ ["2016", "2017", "2017", "2017", "2017", "2018", "2018", "2018", "2018"], ["initial", "q1", "q2", "q3", "total", "q1", "q2", "q3", "total" ] ], measure: ["absolute", "relative", "relative", "relative", "total", "relative", "relative", "relative", "total"], y: [1.1, 2.2, 3.3, -1.1, null, 1.1, 2.2, -4.4, null], base: 1000 } ]; var layout = { waterfallgroupgap : 0.5, xaxis: { title: { text: "MULTI-CATEGORY", }, tickfont: {size: 16}, ticks: "outside" } } Plotly.newPlot('myDiv', data, layout);
var gd = document.getElementById('myDiv'); var data = [ { name: "2018", type: "waterfall", orientation: "h", measure: [ "relative", "relative", "relative", "relative", "total", "relative", "relative", "relative", "relative", "total", "relative", "relative", "total", "relative", "total" ], y: [ "Sales", "Consulting", "Maintenance", "Other revenue", "Net revenue", "Purchases", "Material expenses", "Personnel expenses", "Other expenses", "Operating profit", "Investment income", "Financial income", "Profit before tax", "Income tax (15%)", "Profit after tax" ], x: [ 375, 128, 78, 27, null, -327, -12, -78, -12, null, 32, 89, null, -45, null ], connector: { mode: "between", line: { width: 4, color: "rgb(0, 0, 0)", dash: 0 } } } ]; var layout = {title: { text: "Profit and loss statement 2018<br>waterfall chart displaying positive and negative" }, yaxis: { type: "category", autorange: "reversed" }, xaxis: { type: "linear" }, margin: { l: 150 }, showlegend: true } Plotly.newPlot('myDiv', data, layout); 
var gd = document.getElementById('myDiv'); var data = [ { type: "waterfall", x: [ ["2016", "2017", "2017", "2017", "2017", "2018", "2018", "2018", "2018"], ["initial", "q1", "q2", "q3", "total", "q1", "q2", "q3", "total" ] ], measure: ["absolute", "relative", "relative", "relative", "total", "relative", "relative", "relative", "total"], y: [10, 20, 30, -10, null, 10, 20, -40, null], base: 300, decreasing: { marker: { color: "Maroon" , line:{color : "red", width :2}}}, increasing: { marker: { color: "Teal"} }, totals: { marker: { color: "deep sky blue", line:{color:'blue',width:3}} } }]; var layout = {title: { text: "Profit and loss statement" }, waterfallgap : 0.3, xaxis: { title: { text: ""}, tickfont: {size: 15}, ticks: "outside" } } Plotly.newPlot('myDiv', data, layout);