3D Volume plots

BinderNotebook

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 = x,
        y = y,
        z = z,
        value = values,
        Opacity = 0.1,
        Surface = (Surface.init (Count = 17)),
        IsoMin = 0.1,
        IsoMax = 0.8
    )