HTMLcopy
1
<div id="container"></div>
CSScopy
6
1
html, body, #container {
2
width: 100%;
3
height: 100%;
4
margin: 0;
5
padding: 0;
6
}
JavaScriptcopy
x
1
anychart.onDocumentReady(function () {
2
var data = [
3
{ x: 'Net Sales', value: 5085000 },
4
{ x: 'Cost of Sales', value: -1250450 },
5
{ x: 'Operating Expenses', value: -2350050 },
6
{ x: 'Other Income', value: 750000 },
7
{ x: 'Extraordinary Gain', value: -230050 },
8
{ x: 'Interest Expense', value: -500000 },
9
{ x: 'Taxes', value: 490000 }
10
];
11
12
// create waterfall chart with our data
13
var chart = anychart.waterfall(data);
14
15
// set chart title
16
chart.title('Income Statement for ACME Corp.');
17
18
// add arrow
19
var totalChangeArrow = chart.addArrow({
20
from: 'Net Sales',
21
to: 'Net Income'
22
});
23
24
// set arrow's label format
25
totalChangeArrow.label().format('${%Value}{scale:(1000000)(1)|(M)}');
26
27
// set connector stroke settings
28
chart.connectors().stroke('#e96a26', 1, '5 2');
29
30
// set scale minimum
31
chart.yScale().minimum(0);
32
33
// format y-axis labels
34
chart.yAxis().labels().format('${%Value}{scale:(1000000)(1)|( mln)}');
35
36
// set x-axis labels settings
37
chart.xAxis().labels().rotation(-90);
38
39
// set labels settings
40
chart
41
.labels()
42
.enabled(true)
43
.format(function () {
44
console.log(this);
45
if (this.isTotal) {
46
return anychart.format.number(this.value, { scale: true });
47
}
48
49
return anychart.format.number(this.value, { scale: true });
50
});
51
52
chart.addTotal({x: 'Cost of Sales', name: 'Gross Income'});
53
chart.addTotal({x: 'Operating Expenses', name: 'Operating Income'});
54
chart.addTotal({x: 'Interest Expense', name: 'Net Profit Before Taxes'});
55
chart.addTotal({x: 'Taxes', name: 'Net Income'});
56
57
// set container id for the chart
58
chart.container('container');
59
// initiate chart drawing
60
chart.draw();
61
});