Contour Plots in Julia

How to make Contour plots in Julia 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.

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.

using PlotlyJS

plot(contour(
    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
    ]'
))

Setting X and Y Coordinates in a Contour Plot

using PlotlyJS

plot(contour(
    x=[-9, -6, -5 , -3, -1], # horizontal axis
    y=[0, 1, 4, 5, 7], # vertical axis
    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
    ]'
))

Colorscale for Contour Plot

using PlotlyJS

plot(contour(
    colorscale="Electric",
    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
    ]'
))

Customizing Size and Range of a Contour Plot's Contours

using PlotlyJS

plot(contour(
    z=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
    ]',
    colorscale="Hot",
    contours_start=0,
    contours_end=8,
    contours_size=2
))

Customizing Spacing Between X and Y Axis Ticks

using PlotlyJS
plot(contour(
    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
    ]',
    dx=10, x0=5, dy=10, y0=10,
))

Connect the Gaps Between None Values in the Z Matrix

using PlotlyJS

p = make_subplots(
    rows=2, cols=2,
    column_titles=["connectgaps = False"; "connectgaps = True"],
    row_titles=["Contour map"; "Heatmap"]
)
z = [
    [missing, missing, missing, 12, 13, 14, 15, 16],
    [missing, 1, missing, 11, missing, missing, missing, 17],
    [missing, 2, 6, 7, missing, missing, missing, 18],
    [missing, 3, missing, 8, missing, missing, missing, 19],
    [5, 4, 10, 9, missing, missing, missing, 20],
    [missing, missing, missing, 27, missing, missing, missing, 21],
    [missing, missing, missing, 26, 25, 24, 23, 22]
]

add_trace!(p, contour(z=z, showscale=false), row=1, col=1)
add_trace!(p, contour(z=z, showscale=false, connectgaps=true), row=1, col=2)
add_trace!(p, heatmap(z=z, showscale=false, zsmooth="best"), row=2, col=1)
add_trace!(p, heatmap(z=z, showscale=false, connectgaps=true, zsmooth="best"), row=2, col=2)

p

Smoothing the Contour lines

using PlotlyJS

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
]'

p = make_subplots(
    rows=1, cols=2, column_titles=["Without Smoothing"; "With Smoothing"]
)

add_trace!(p, contour(z=z, line_smoothing=0), row=1, col=1)
add_trace!(p, contour(z=z, line_smoothing=0.85), row=1, col=2)

p

Smooth Contour Coloring

using PlotlyJS

plot(contour(
    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
    ]',
    # heatmap gradient coloring is applied between each contour level
    contours_coloring="heatmap" # can also be "lines", or "none"
))

Contour Line Labels

using PlotlyJS

plot(contour(
    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
    ]',
    # heatmap gradient coloring is applied between each contour level
    contours=attr(
        coloring ="heatmap",
        showlabels = true, # show labels on contours
        labelfont = attr( # label font properties
            size = 12,
            color = "white",
        )
    )
))

Contour Lines

using PlotlyJS

plot(contour(
    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
    ]',
    contours_coloring="lines",
    line_width=2,
))

Custom Contour Plot Colorscale

using PlotlyJS

# Valid color strings are CSS colors, rgb or hex strings
colorscale = [[0, "gold"], [0.5, "mediumturquoise"], [1, "lightsalmon"]]

plot(contour(
    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
    ]',
   colorscale=colorscale,
))

Color Bar Title

using PlotlyJS

plot(contour(
    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
    ]',
    colorbar=attr(
        title="Color bar title", # title here
        titleside="right",
        titlefont=attr(
            size=14,
            family="Arial, sans-serif"
        )
    )
))

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.

using PlotlyJS

plot(contour(
    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
    ]',
    colorbar=attr(
        thickness=25,
        thicknessmode="pixels",
        len=0.6,
        lenmode="fraction",
        outlinewidth=0
    )
))

Styling Color Bar Ticks for Contour Plots

using PlotlyJS

plot(contour(
    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
    ]',
    colorbar=attr(
        nticks=10, ticks="outside",
        ticklen=5, tickwidth=1,
        showticklabels=true,
        tickangle=0, tickfont_size=12
    )
))

Reference

See https://plotly.com/julia/reference/contour/ for more information and chart attribute options!