3D Volume plots

BinderScriptNotebook

Summary: This example shows how to create 3D-Volume charts in F#.

let's first create some data for the purpose of creating example charts:

open System
open Plotly.NET 

let linspace (min,max,n) = 
    if n <= 2 then failwithf "n needs to be larger then 2"
    let bw = float (max - min) / (float n - 1.)
    Array.init n (fun i -> min + (bw * float i))

let mgrid (min,max,n) = 

    let data = linspace(min,max,n)

    let z = [|for i in 1 .. n do [|for i in 1 .. n do yield data|]|]
    let x = [|for i in 1 .. n do [|for j in 1 .. n do yield [|for k in 1 .. n do yield data.[i-1]|]|]|]
    let y = [|for i in 1 .. n do [|for j in 1 .. n do yield [|for k in 1 .. n do yield data.[j-1]|]|]|]

    x,y,z

let x,y,z = 
    mgrid(-8.,8.,40)
    |> fun (x,y,z) ->
        (x |> Array.concat |> Array.concat),
        (y |> Array.concat |> Array.concat),
        (z |> Array.concat |> Array.concat)

let values = 
    Array.map3 (fun x y z ->
        sin(x*y*z) / (x*y*z)
    ) x y z

open Plotly.NET.TraceObjects

let volume =
    Chart.Volume(
       x, y, z, values,
       Opacity=0.1,
       Surface=(Surface.init(Count=17)),
       IsoMin=0.1,
       IsoMax=0.8,
       ColorScale = StyleParam.Colorscale.Viridis
    )