# Contours

This guide shows a few different ways to measure and visualize contours of images.

## Using Plots

The most basic way to create a contour plot is simply to use Plots.jl contour and contourf functions on your image.

Let's see how that works:

using AstroImages, Plots

# First load a FITS file of interest
)

herca = load("herca-radio.fits")

Create a contour plot

contour(herca)

Create a filled contour plot

contourf(herca)

Specify the number of levels

contour(herca, levels=5)

Specify specific levels

contour(herca, levels=[1, 1000, 5000])

Overplot contours on image:

implot(herca)
contour!(herca, levels=4, color=:cyan)

## Using Contour.jl

For more control over how contours are calculated and plotted, you can use the Contour.jl package:

using Contour

p = implot(herca, cmap=nothing, colorbar=false)

# Note: Contour.jl only supports float inputs.
# See https://github.com/JuliaGeometry/Contour.jl/issues/73
for cl in levels(contours(dims(herca)..., float.(herca)))
lvl = level(cl) # the z-value of this contour level
for line in lines(cl)
xs, ys = coordinates(line) # coordinates of this line segment
plot!(p, xs, ys, line_z=lvl, label="")
end
end

p

Here we plot just the contours, now in world coordinates:

p = plot(xlabel="RA", ylabel="DEC")
for cl in levels(contours(dims(herca)..., float.(herca)))
lvl = level(cl) # the z-value of this contour level
for line in lines(cl)
xs, ys = coordinates(line) # coordinates of this line segment
worldcoords = map(zip(xs,ys)) do pixcoord
pix_to_world(herca, [pixcoord...])
end
plot!(p, getindex.(worldcoords,1), getindex.(worldcoords,2), line_z=lvl, label="")
end
end
p