Contour Plots in F#

How to make Contour plots 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"
Installed Packages
  • FSharp.Data, 4.2.4
  • Newtonsoft.Json, 12.0.3
  • Plotly.NET, 2.0.0-preview.10
  • Plotly.NET.Interactive, 2.0.0-preview.10

Loading extensions from Plotly.NET.Interactive.dll

Added Kernel Extension including formatters for Plotly.NET charts.

Basic Contour Plot

A 2D contour plot shows the contour lines of a 2D numerical array z, i.e. interpolated lines of isovalues of z.

In [2]:
open Plotly.NET

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

z|> Chart.Contour
Out[2]:

Setting X and Y Coordinates in a Contour Plot

In [3]:
open Plotly.NET

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

Chart.Contour(data=z,X=[-9; -6; -5 ; -3; -1],Y=[0; 1; 4; 5; 7],zSmooth=StyleParam.SmoothAlg.Best)
Out[3]:

Colorscale for Contour Plot

In [4]:
open Plotly.NET

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

Chart.Contour(data=z,Colorscale=StyleParam.Colorscale.Electric)
Out[4]:

Customizing Size and Range of a Contour Plot's Contours (ABSTRACTION MISSING)

Customizing Spacing Between X and Y Axis Ticks

In [5]:
open Plotly.NET

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

Chart.Contour(data=z,Colorscale=StyleParam.Colorscale.Electric)
|> GenericChart.mapTrace (Trace2DStyle.Contour(X0=5,dX=10,Y0=10,dY=10))
Out[5]:

Connect the Gaps Between None Values in the Z Matrix

In [6]:
open Plotly.NET

let z = [[Double.NaN;Double.NaN ; Double.NaN; 12.; 13.; 14.; 15.; 16.];
     [Double.NaN; 1.; Double.NaN; 11.; Double.NaN; Double.NaN; Double.NaN; 17.];
     [Double.NaN; 2.; 6.; 7.; Double.NaN; Double.NaN; Double.NaN; 18.];
     [Double.NaN; 3.; Double.NaN; 8.; Double.NaN; Double.NaN; Double.NaN; 19.];
     [5.; 4.; 10.; 9.; Double.NaN; Double.NaN; Double.NaN; 20.];
     [Double.NaN; Double.NaN; Double.NaN; 27.; Double.NaN; Double.NaN; Double.NaN; 21.];
     [Double.NaN; Double.NaN; Double.NaN; 26.; 25.; 24.; 23.; 22.]]

[
    Chart.Contour(data=z,Showscale=false)
    Chart.Contour(data=z,Showscale=false)
    |> GenericChart.mapTrace(fun t -> t?connectgaps<-true;t)
    Chart.Contour(data=z,Showscale=false,zSmooth=StyleParam.SmoothAlg.Best)
    Chart.Contour(data=z,Showscale=false,zSmooth=StyleParam.SmoothAlg.Best)
    |> GenericChart.mapTrace(fun t -> t?connectgaps<-true;t)
] |> Chart.Grid(2,2)
Out[6]:

Smoothing the Contour lines (ABSTRACTION MISSING) (NOT WORKING)

In [7]:
open Plotly.NET

let z =   [[2; 4; 7; 12; 13; 14; 15; 16];
       [3; 1; 6; 11; 12; 13; 16; 17];
       [4; 2; 7; 7; 11; 14; 17; 18];
       [5; 3; 8; 8; 13; 15; 18; 19];
       [7; 4; 10; 9; 16; 18; 20; 19];
       [9; 10; 5; 27; 23; 21; 21; 21];
       [11; 14; 17; 26; 25; 24; 23; 22]]


[
Chart.Contour(z,Name="Without Smoothing")
|> GenericChart.mapTrace (fun t -> t?line_smoothing <- 0;t)
Chart.Contour(z,Name="With Smoothing")
|> GenericChart.mapTrace (fun t -> t?line_smoothing <- 0.85;t)
]|> Chart.Grid(1,2)
Out[7]:

Smooth Contour Coloring (ABSTRACTION MISSING)

Contour Line Labels (ABSTRACTION MISSING)

Contour Lines (ABSTRACTION MISSING)

Custom Contour Plot Colorscale

In [8]:
open Plotly.NET

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

let colorscale = StyleParam.Colorscale.Custom([(0., "gold"); (0.5, "mediumturquoise"); (1., "lightsalmon")])

Chart.Contour(data=z,Colorscale=colorscale)
Out[8]:

Color Bar Title

In [9]:
open Plotly.NET
open Plotly.NET.TraceObjects
open Plotly.NET.LayoutObjects

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

let colorBar =
    ColorBar.init (
        Title =
            Title.init (
                "Color bar Title",
                Side = StyleParam.Side.Right,
                Font = Font.init (Family = StyleParam.FontFamily.Arial, Size = 14.)
            )
    )

Chart.Contour(data=z,ColorBar=colorBar)
Out[9]:

Color Bar Size for Contour Plots

In the example below, both the thickness (given here in pixels) and the length (given here as a fraction of the plot height) are set.

In [10]:
open Plotly.NET
open Plotly.NET.TraceObjects
open Plotly.NET.LayoutObjects

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

let colorBar =
    ColorBar.init (
        Thickness = 25.,
        ThicknessMode = StyleParam.UnitMode.Pixels,
        Len = 0.6,
        LenMode = StyleParam.UnitMode.Fraction,
        OutlineWidth = 0.
    )

Chart.Contour(data=z,ColorBar=colorBar)
Out[10]:

Styling Color Bar Ticks for Contour Plots

In [11]:
open Plotly.NET
open Plotly.NET.TraceObjects
open Plotly.NET.LayoutObjects

let z = [[10.; 10.625; 12.5; 15.625; 20.];
           [5.625; 6.25;8.125;11.25;15.625];
           [2.5; 3.125; 5.; 8.125; 12.5];
           [0.625; 1.25; 3.125; 6.25; 10.625];
           [0.; 0.625; 2.5; 5.625; 10.]]

let colorBar =
    ColorBar.init (
        NTicks = 10,
        Ticks = StyleParam.TickOptions.Outside,
        TickLen = 5.,
        TickWidth = 1.,
        ShowTickLabels = true,
        TickAngle = 0,
        TickFont = Font.init (Size = 12.)
    )

Chart.Contour(data=z,ColorBar=colorBar)
Out[11]: