# Waterfall Charts in F#

How to make waterfall plots in F# with Plotly.

In [1]:
#r "nuget: Newtonsoft.Json, 12.0.3"
#r "nuget: Plotly.NET,  2.0.0-preview.10"
#r "nuget: Plotly.NET.Interactive,  2.0.0-preview.10"

Installed Packages
• Newtonsoft.Json, 12.0.3
• Plotly.NET, 2.0.0-preview.10
• Plotly.NET.Interactive, 2.0.0-preview.10

Loading extensions from Plotly.NET.Interactive.dll

Added Kernel Extension including formatters for Plotly.NET charts.

# Simple Waterfall Chart¶

In [2]:
open Plotly.NET
open Plotly.NET.TraceObjects
open Plotly.NET.LayoutObjects

let x =
[ "Sales"
"Consulting"
"Net revenue"
"Purchases"
"Other expenses"
"Profit before tax" ]

let y = [ 60; 80; 0; -40; -20; 0 ]

let measure =
[ StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Total
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Total ]

Chart.Waterfall(
x = x,
y = y,
Measure = measure,
Connector = WaterfallConnector.init (Line = Line.init (Color = Color.fromString "rgb(63, 63, 63)"))
)
|> GenericChart.mapTrace //Workaround
(fun t ->
t?text <- [ "+60";"+80";"";"-40";"-20";"Total" ]
t?textposition <- "outside"
t)

Out[2]:

# Horizontal Waterfall Chart¶

In [3]:
open Plotly.NET

let x = [375.; 128.; 78.; 27.; Double.NaN; -327.; -12.; -78.; -12.; Double.NaN; 32.; 89.; Double.NaN; -45.; Double.NaN]

let measure =
[ StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Total
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Total
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Total
StyleParam.WaterfallMeasure.Relative
StyleParam.WaterfallMeasure.Total ]

let 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" ]

Chart.Waterfall(
x = x,
y = y,
Measure = measure,
Orientation = StyleParam.Orientation.Horizontal,
Connector =
WaterfallConnector.init (
ConnectorMode = StyleParam.ConnectorMode.Between,
Line = Line.init (Color = Color.fromString "rgb(0,0,0)", Dash = StyleParam.DrawingStyle.Solid, Width = 4.)
)
)
|> Chart.withTitle ("Profit and loss statement 2018")
|> Chart.withTraceName ("2018")
|> Chart.withMarginSize (Left = 150)

Out[3]: