Error Bars in F#
How to add error-bars to charts in F# with Plotly.
Plotly is known for its graphing libraries, but it's also a broader ecosystem for building interactive data apps, AI data analysis tools, and deploying and hosting Dash apps. Explore the full set of tools and platforms designed to help turn data into action. Discover Plotly.
Note: We are retiring documentation for R, MATLAB, Julia, and F#. Learn more about this change here.
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"
#r "nuget: FSharp.Data"
For functions representing 2D data points such as Chart.Scatter, Chart.Line, Chart.Bar etc., error bars are given by setting the ErrorX (for the error on x position) and ErrorY (for the error on y position).
Basic Symmetric Error Bars¶
In [2]:
open Plotly.NET
Chart.Scatter(x = [ 0; 1; 2 ], y = [ 6; 10; 2 ], mode = StyleParam.Mode.Lines_Markers)
|> Chart.withYErrorStyle (Array = [ 1; 2; 3 ])
Out[2]:
Asymmetric Error Bars¶
In [3]:
open Plotly.NET
Chart.Scatter(x = [ 1; 2; 3; 4 ], y = [ 2; 1; 3; 4 ], mode = StyleParam.Mode.Lines_Markers)
|> Chart.withYErrorStyle (Array = [ 0.1; 0.2; 0.1; 0.1 ], Arrayminus = [ 0.2; 0.4; 1.; 0.2 ], Symmetric = false)
Out[3]:
Error Bars as a Percentage of the y Value¶
In [4]:
open Plotly.NET
open Plotly.NET.TraceObjects
Chart.Scatter(x = [ 0; 1; 2 ], y = [ 6; 10; 2 ], mode = StyleParam.Mode.Lines_Markers)
|> Chart.withYError (Error.init (Type = StyleParam.ErrorType.Percent, Value = 50.)) // value of error bar given as percentage of y value
Out[4]:
Asymmetric Error Bars with a Constant Offset¶
In [5]:
open Plotly.NET
Chart.Scatter(x = [ 1; 2; 3; 4 ], y = [ 2; 1; 3; 4 ], mode = StyleParam.Mode.Lines_Markers)
|> Chart.withYError (
Error.init (
Array = [ 0.1; 0.2; 0.1; 0.1 ],
Arrayminus = [ 0.2; 0.4; 1.; 0.2 ],
Symmetric = false,
Value = 15.,
Valueminus = 25.
)
)
Out[5]:
Horizontal Error Bars¶
In [6]:
open Plotly.NET
Chart.Scatter(x = [ 1; 2; 3; 4 ], y = [ 2; 1; 3; 4 ], mode = StyleParam.Mode.Lines_Markers)
|> Chart.withXError (Error.init (Type = StyleParam.ErrorType.Percent, Value = 10.))
Out[6]:
Bar Chart with Error Bars¶
In [7]:
open Plotly.NET
[
Chart.Column(Keys = [ "Trial 1"; "Trial 2"; "Trial 3" ], values = [ 3; 6; 4 ], Name = "Control", ShowLegend = true)
|> Chart.withYErrorStyle (Array = [ 1.; 0.5; 1.5 ])
Chart.Column(
Keys = [ "Trial 1"; "Trial 2"; "Trial 3" ],
values = [ 4; 7; 3 ],
Name = "Experimental",
ShowLegend = true)
|> Chart.withYErrorStyle (Array = [ 0.5; 1.; 2. ])
]
|> Chart.combine
Out[7]:
Colored and Styled Error Bars¶
In [8]:
open Plotly.NET
open System
let x_theo = [-4. .. 0.08 ..4.]
let sincx = [for x in x_theo -> Math.Sin(Math.PI*x)/(Math.PI*x)]
let x = [-3.8; -3.03; -1.91; -1.46; -0.89; -0.24; -0.0; 0.41; 0.89; 1.01; 1.91; 2.28; 2.79; 3.56]
let y = [-0.02; 0.04; -0.01; -0.27; 0.36; 0.75; 1.03; 0.65; 0.28; 0.02; -0.11; 0.16; 0.04; -0.15]
[ Chart.Scatter(x = x_theo, y = sincx, mode = StyleParam.Mode.Lines, Name = "sinc(x)")
Chart.Scatter(x = x, y = y, mode = StyleParam.Mode.Markers, Name = "measured")
|> Chart.withYError (
Error.init (
Type = StyleParam.ErrorType.Constant,
Value = 0.1,
Color = Color.fromString "purple",
Thickness = 1.5,
Width = 3.
)
)
|> Chart.withXError (
Error.init (
Type = StyleParam.ErrorType.Constant,
Value = 0.2,
Color = Color.fromString "purple",
Thickness = 1.5,
Width = 3.
)
)
|> Chart.withMarkerStyle (Size = 8, Color = Color.fromString "purple") ]
|> Chart.combine
Out[8]:
In [9]:
open FSharp.Data
let data= CsvFile.Load("https://raw.githubusercontent.com/plotly/datasets/master/iris.csv")
let sepalWidth = data.Rows |> Seq.map (fun row -> float <| row.GetColumn("SepalWidth"))
let sepalLength = data.Rows |> Seq.map (fun row -> float <| row.GetColumn("SepalLength"))
let color = data.Rows
|> Seq.map (fun row -> row.GetColumn("Name"))
|> Seq.map (function
|"Iris-setosa" -> Color.fromString "red"
|"Iris-versicolor" -> Color.fromString "blue"
|_ -> Color.fromString "yellow")
|> Color.fromColors
let error = sepalWidth |> Seq.map (fun w -> float w/100.)
Chart.Scatter(x=sepalWidth,y=sepalLength,mode=StyleParam.Mode.Markers,Color=color)
|>Chart.withXErrorStyle(Array=error)
|>Chart.withYErrorStyle(Array=error)
|>Chart.withSize(Width=800)
Out[9]: