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
using Downloads: download
# First load a FITS file of interest
herca = load(download("https://www.chandra.harvard.edu/photo/2014/archives/fits/herca/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
pHere 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