Axis + Surface



using AbstractPlotting

vx = -1:0.01:1
vy = -1:0.01:1

f(x, y) = (sin(x*10) + cos(y*10)) / 4
scene = Scene(resolution = (500, 500))
# One way to style the axis is to pass a nested dictionary / named tuple to it.
surface!(scene, vx, vy, f, axis = (frame = (linewidth = 2.0,),))
psurf = scene[end] # the surface we last plotted to scene
# One can also directly get the axis object and manipulate it
axis = scene[Axis] # get axis

# You can access nested attributes likes this:
axis[:names, :axisnames] = ("\\bf{ℜ}[u]", "\\bf{𝕴}[u]", " OK\n\\bf{δ}\n γ")
tstyle = axis[:names] # or just get the nested attributes and work directly with them

tstyle[:textsize] = 10
tstyle[:textcolor] = (:red, :green, :black)
tstyle[:font] = "helvetica"

psurf[:colormap] = :RdYlBu
wh = widths(scene)
t = text!(
    campixel(scene),
    "Multipole Representation of first resonances of U-238",
    position = (wh[1] / 2.0, wh[2] - 20.0),
    align = (:center,  :center),
    textsize = 20,
    font = "helvetica",
    raw = :true
)
c = lines!(scene, Circle(Point2f0(0.1, 0.5), 0.1f0), color = :red, offset = Vec3f0(0, 0, 1))
scene
#update surface
# TODO explain and improve the situation here
psurf.converted[3][] = f.(vx .+ 0.5, (vy .+ 0.5)')
scene