Visitar URL original
Histograms in Fsharp

Histograms in F#

How to make Histograms 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: Plotly.NET, 2.0.0-preview.7"
#r "nuget: Plotly.NET.Interactive, 2.0.0-preview.7"
#r "nuget: newtonsoft.json"
open Plotly.NET
Installed Packages
  • newtonsoft.json, 13.0.1
  • Plotly.NET, 2.0.0-preview.7
  • Plotly.NET.Interactive, 2.0.0-preview.7

Loading extensions from Plotly.NET.Interactive.dll

Added Kernel Extension including formatters for Plotly.NET charts.

Basic Histogram

In [2]:
let N = 500
let rnd = System.Random()
let x = Array.init N (fun _ -> rnd.NextDouble())
Chart.Histogram(x)
Out[2]:

Normalized Histogram

In [3]:
let N = 500
let rnd = System.Random()
let x = Array.init N (fun _ -> rnd.NextDouble())
Chart.Histogram(
               x,
               HistNorm=StyleParam.HistNorm.Probability
               )
Out[3]:

Horizontal Histogram

In [4]:
open Plotly.NET
let N = 500
let rnd = System.Random()
let x = Array.init N (fun _ -> rnd.NextDouble())
In [5]:
Chart.Histogram(
               x,
               Orientation=StyleParam.Orientation.Horizontal
               )  // issue with horizental allign
Out[5]:

Overlaid Histogram

In [6]:
let N = 500
let rnd = System.Random()
let x0 = Array.init N (fun _ -> rnd.NextDouble())
let x1= Array.init N (fun _ -> rnd.NextDouble())
[
    Chart.Histogram(x0)
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "trace 0")
        x.SetValue("marker", {| color = "rgba(103, 102, 255,1)"; line = {| color = "rgba(103, 102, 255, 1)"; width = 3 |} |})
        x)
    Chart.Histogram(x1)
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "trace 1")
        x.SetValue("marker", {| color = "rgba(255, 70, 51, 1)"; line = {| color = "rgba(255, 70, 51, 1)"; width = 3 |} |})
        x)
]
|> Chart.combine
|> Chart.withLayout(Layout.init(Barmode = StyleParam.Barmode.Overlay))
Out[6]:

Stacked Histograms

In [7]:
open Plotly.NET

let N = 500
let rnd = System.Random()
let x0 = Array.init N (fun _ -> rnd.NextDouble())
let x1= Array.init N (fun _ -> rnd.NextDouble())
[
    Chart.Histogram(x0)
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "trace 0")
        x.SetValue("marker", {| color = "rgba(103, 102, 255,1)"; line = {| color = "rgba(103, 102, 255, 1)"; width = 3 |} |})
        x)
    Chart.Histogram(x1)
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "trace 1")
        x.SetValue("marker", {| color = "rgba(255, 70, 51, 1)"; line = {| color = "rgba(255, 70, 51, 1)"; width = 3 |} |})
        x)
]
|> Chart.combine
|> Chart.withLayout(Layout.init(Barmode = StyleParam.Barmode.Stack))
Out[7]:

Styled Histogram

In [8]:
let N = 500
let rnd = System.Random()
let x0 = Array.init N (fun _ -> rnd.NextDouble())
let x1= Array.init N (fun _ -> rnd.NextDouble())

let layout =
    let temp = Layout()
    temp?barmode <- "Overlay"
    temp?bargap <- 0.5
    temp?bargroupgap <- 0.1
    temp
[
    Chart.Histogram(x0)                  // Issues setting the xbins start,end and size=0.5
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "control")
        x.SetValue("HistNorm","percent")
        x.SetValue("Opacity","0.75")
        x.SetValue("marker", {| color = "rgba(255, 69, 246, 0.35)"; line = {| color = "rgba(255, 69, 246, 0.35)"; width = 5 |} |})
        x)
    Chart.Histogram(x1)
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "experimental")
        x.SetValue("HistNorm","percent")
        x.SetValue("Opacity","0.75")
        x.SetValue("marker", {| color = "rgba(103, 102, 255,1)"; line = {| color = "rgba(103, 102, 255,1)"; width = 5 |} |})
        x)
]


|> Chart.combine
|> Chart.withTitle("Sample Result")
|> Chart.withXAxisStyle("Value")
|> Chart.withYAxisStyle("Count")
//|> Chart.withLayout(Layout.init(Barmode = StyleParam.Barmode.Overlay))
|> Chart.withLayout(layout)   // Issues setting the xbins start,end and size=0.5
Out[8]:

Cumulative Histogram

In [9]:
let N = 500
let rnd = System.Random()
let x = Array.init N (fun _ -> rnd.NextDouble())
In [10]:
Chart.Histogram(x)     // issue with not find cumulative in histogram
Out[10]:

Specify Aggregation Function

In [11]:
let fruits =  ["Apples";"Apples";"Apples";"Oranges"; "Bananas"];
let counts = ["5";"10";"3";"10";"5"]
[
Chart.Histogram(
              fruits,
               Name = "Sum"
               );
Chart.Histogram(
              counts ,
               Name = "Count"
               );
]
|> Chart.combine
Out[11]:

Share bins between histograms

In [12]:
let N = 500
let rnd = System.Random()
let x0 = Array.init N (fun _ -> rnd.Next(7, 20))
let x1 = Array.init N (fun _ -> rnd.Next(7, 20))
let layout =
    let obj = Layout()
    obj?bargap <- 0.5
    obj?bargroupgap <- 0.1
    obj
[
    Chart.Histogram(x0)
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "trace 0")
        x.SetValue("marker", {| color = "rgba(103, 102, 255, 1)"; line = {| color = "rgba(103, 102, 255, 1)"; width = 5 |} |})
        x)
    Chart.Histogram(x1)
    |> GenericChart.mapTrace(fun x ->
        x.SetValue("name", "trace 1")
        x.SetValue("marker", {| color = "rgba(255, 70, 51, 1)"; line = {| color = "rgba(255, 70, 51, 1)"; width = 5 |} |})
        x)
]

|> Chart.combine
|> Chart.withLayout(Layout.init(Barmode = StyleParam.Barmode.Stack))
Out[12]: