# Contour Plots in Julia

How to make Contour plots in Julia with Plotly.

### 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, 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"]
)

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
)
))