Seems like you’re on the right track. You can fill the contour regions by passing the f=true flag. To make the contour less wiggly, one option is to increase the resolution of the grid. Below is an example which might serve as inspiration:
using Plots
Random.seed!(1)
p = rand(40,3) + rand(40,3)*im
r = 0:.002:1
# classifier: returns 1, 2, or 3 for any given (x, y)
f(x, y) = findmin(sum(abs.(x + y*im .- p); dims=1)[:])[2]
# colors and markers for the 3 regions
ccol = cgrad([RGB(1,.3,.3), RGB(.4,1,.4), RGB(.3,.3,1)])
mcol = [RGB(1,.1,.1) RGB(.3,1,.3) RGB(.1,.1,1)]
m = [:rect :circle :utriangle]
anim = @animate for d = 0:.03:2π
contour(r, r, f, f=true, nlev=3, c=ccol, leg=:none)
scatter!(real(p), imag(p), m=m, c=mcol, lims=(0,1))
gui()
c = [cis(d)sin(d+.5π) cis(d+2π/3)cos(d) cis(d-2π/3)]
global p += .003(c .+ .5(1+im) .- p)
end
gif(anim, "contour.gif", fps = 30)