3D Volume Plots in F#
How to make 3D Volume plots in F# with Plotly.
In [1]:
#r "nuget: Plotly.NET, 2.0.0-preview.6"
#r "nuget: Plotly.NET.Interactive, 2.0.0-preview.6"
#r "nuget: FSharp.Data"
Simple volume plot with go.Volume¶
In [2]:
open System
open Plotly.NET
let N = 50
let rnd = System.Random()
let mirroredXAxis =
Axis.LinearAxis.init(
Showspikes = false,
Backgroundcolor ="rgb(229, 236, 246)",
Showbackground=true
)
let mirroredLogYAxis =
Axis.LinearAxis.init(
Showspikes = false,
Backgroundcolor ="rgb(229, 236, 246)",
Showbackground=true
)
let mirroredZAxis =
Axis.LinearAxis.init(
Showspikes = false,
Backgroundcolor ="rgb(229, 236, 246)",
Showbackground=true
)
let margin =Margin.init(Left =10.0, Bottom=10.0,Top =10.0, Right = 20.0 )
let layout = Layout.init(Width= 700., Margin=margin)
let x = [-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0]
let y =[-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0]
let z =[-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-8.0;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;-2.666666666666667;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;2.666666666666666;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0;8.0]
let value =[0.00015530955861889912;0.004994853639720335;0.004994853639720164;0.00015530955861889912;0.004994853639720335;0.005865742088537837;0.005865742088537603;0.004994853639720335;0.004994853639720164;0.005865742088537603;0.0058657420885372515;0.004994853639720164;0.00015530955861889912;0.004994853639720335;0.004994853639720164;0.00015530955861889912;0.004994853639720335;0.005865742088537837;0.005865742088537603;0.004994853639720335;0.005865742088537837;0.005967638441171089;0.00596763844117072;0.005865742088537837;0.005865742088537603;0.005967638441170904;0.005967638441170535;0.005865742088537603;0.004994853639720335;0.005865742088537837;0.005865742088537603;0.004994853639720335;0.004994853639720164;0.005865742088537603;0.0058657420885372515;0.004994853639720164;0.005865742088537603;0.005967638441170904;0.005967638441170535;0.005865742088537603;0.0058657420885372515;0.005967638441170535;0.005967638441170165;0.0058657420885372515;0.004994853639720164;0.005865742088537603;0.0058657420885372515;0.004994853639720164;0.00015530955861889912;0.004994853639720335;0.004994853639720164;0.00015530955861889912;0.004994853639720335;0.005865742088537837;0.005865742088537603;0.004994853639720335;0.004994853639720164;0.005865742088537603;0.0058657420885372515;0.004994853639720164;0.00015530955861889912;0.004994853639720335;0.004994853639720164;0.00015530955861889912]
let findAllIndices predicate =
Array.indexed
>> Array.filter (snd >> predicate)
>> Array.map fst
let volume3d =
Trace3d.initVolume (fun volume3d ->
volume3d?x <- x
volume3d?y <-y
volume3d?z <-z
volume3d?value <-x
volume3d?isomin <-0.1
volume3d?isomax <-0.8
volume3d?opacity<-0.5
volume3d?color <- "lightpink"
volume3d
)
|> GenericChart.ofTraceObject
|> Chart.withLayout layout
In [3]:
volume3d
Out[3]: