annotate ext/SbplibMakieExt.jl @ 1629:2fab141e4a9a feature/grids/plotting

Add attempt at proper makie recipes for plotting a grid.
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 24 Jun 2024 08:40:57 +0200
parents 9cd2b8f81175
children 27d270c9cb89
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1628
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 module SbplibMakieExt
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 using Sbplib.Grids
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 using Makie
1629
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
5 using StaticArrays
1628
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 function verticies_and_faces_and_values(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2})
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 ps = map(Tuple, g)[:]
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 values = gf[:]
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 N = length(ps)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 faces = Vector{NTuple{3,Int}}()
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 n,m = size(g)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 Li = LinearIndices((1:n, 1:m))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 for i ∈ 1:n-1, j = 1:m-1
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 # Add point in the middle of the patch to preserve symmetries
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 push!(ps, Tuple((g[i,j] + g[i+1,j] + g[i+1,j+1] + g[i,j+1])/4))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 push!(values, (gf[i,j] + gf[i+1,j] + gf[i+1,j+1] + gf[i,j+1])/4)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 push!(faces, (Li[i,j], Li[i+1,j], length(ps)))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 push!(faces, (Li[i+1,j], Li[i+1,j+1], length(ps)))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 push!(faces, (Li[i+1,j+1], Li[i,j+1], length(ps)))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 push!(faces, (Li[i,j+1], Li[i,j], length(ps)))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 end
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 verticies = permutedims(reinterpret(reshape,eltype(eltype(ps)), ps))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 faces = permutedims(reinterpret(reshape,Int, faces))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 return verticies, faces, values
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 end
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 function make_plot(g,gf)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 v,f,c = verticies_and_faces_and_values(g,gf)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 mesh(v,f,color=c,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 shading = NoShading,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 )
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 end
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 # scatter(collect(g)[:])
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 function Makie.surface(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}; kwargs...)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 surface(getindex.(g,1), getindex.(g,2), gf;
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 shading = NoShading,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 kwargs...,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 )
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 end
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 function Makie.mesh(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}; kwargs...)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 v,f,c = verticies_and_faces_and_values(g, gf)
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 mesh(v,f,color=c,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 shading = NoShading,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 kwargs...,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 )
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 end
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 function Makie.plot!(plot::Plot(Grid{<:Any,2},AbstractArray{<:Any, 2}))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 # TODO: How to handle kwargs?
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 # v,f,c = verticies_and_faces_and_values(plot[1], plot[2])
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 r = @lift verticies_and_faces_and_values($(plot[1]), $(plot[2]))
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 v,f,c = (@lift $r[1]), (@lift $r[2]), (@lift $r[3])
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 mesh!(plot, v, f, color=c,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 shading = NoShading,
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 )
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 end
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70
1629
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
71
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
72 Makie.convert_arguments(::Type{<:Scatter}, g::Grid) = (reshape(map(Point,g),:),) # (map(Point,collect(g)[:]),)
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
73 function Makie.convert_arguments(::Type{<:Lines}, g::Grid{<:Any,2})
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
74 M = collect(g)
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
75
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
76 function cat_with_NaN(a,b)
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
77 vcat(a,[@SVector[NaN,NaN]],b)
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
78 end
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
79
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
80 xlines = reduce(cat_with_NaN, eachrow(M))
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
81 ylines = reduce(cat_with_NaN, eachcol(M))
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
82
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
83 return (cat_with_NaN(xlines,ylines),)
1628
9cd2b8f81175 Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 end
1629
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
85
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
86 Makie.plot!(plot::Plot(Grid{<:Any,2})) = lines!(plot, plot.attributes, plot[1])
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
87 # Makie.convert_arguments(::PointBased, g::Grid) = (map(Tuple,collect(g)[:]),)
2fab141e4a9a Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1628
diff changeset
88 end