@@ -3,7 +3,7 @@ module GLMakie_Visualisation
33
44using Statistics
55using GeophysicalModelGenerator: lonlatdepth_grid, GeoData, CartData, km, AbstractGeneralGrid
6- import GeophysicalModelGenerator: visualise
6+ import GeophysicalModelGenerator: visualise, ustrip
77
88# We do not check `isdefined(Base, :get_extension)` as recommended since
99# Julia v1.9.0 does not load package extensions when their dependency is
1414 using .. GLMakie
1515end
1616
17- export visualise
17+ import GLMakie: heatmap!, heatmap
18+
19+ export visualise, heatmap, heatmap!
1820
1921println (" Loading GLMakie extensions for GMG" )
2022
@@ -271,5 +273,121 @@ function visualise(Data::AbstractGeneralGrid; Topography=nothing, Topo_range=not
271273 return nothing
272274end
273275
276+ """
277+ heatmap(x::GeoData, args...; field=:Topography, kwargs...)
278+ heatmap for a 2D GeoData object (surface)
279+ """
280+ function heatmap (x:: GeoData , args... ; field= :Topography , kwargs... )
281+ @assert size (x. depth. val,3 )== 1
282+ @assert hasfield (typeof (x. fields), field)
283+
284+ heatmap (x. lon. val[:,1 ], x. lat. val[1 ,:], ustrip .(x. fields[field][:,:,1 ]), args... ; kwargs... )
285+
286+ end
287+
288+ """
289+ heatmap(x::GeoData, a::Array{_T,N}, args...; kwargs...)
290+ in-place heatmap for a 2D GeoData object (surface) with an array `a`.
291+ """
292+ function heatmap (x:: GeoData , a:: Array{_T,N} , args... ; kwargs... ) where {_T,N}
293+ @assert size (x. depth. val,3 )== 1
294+
295+ if N== 3
296+ heatmap (x. lon. val[:,1 ], x. lat. val[1 ,:], ustrip .(a[:,:,1 ]), args... ; kwargs... )
297+ elseif N== 2
298+ heatmap (x. lon. val[:,1 ], x. lat. val[1 ,:], ustrip .(a), args... ; kwargs... )
299+ end
300+
301+ end
302+
303+ """
304+ heatmap(x::CartData, args...; field=:Topography, kwargs...)
305+ heatmap for a 2D CartData object (surface)
306+ """
307+ function heatmap (x:: CartData , args... ; field= :Topography , kwargs... )
308+ @assert size (x. z. val,3 )== 1
309+ @assert hasfield (typeof (x. fields), field)
310+
311+ heatmap (x. x. val[:,1 ], x. y. val[1 ,:], ustrip .(x. fields[field][:,:,1 ]), args... ; kwargs... )
312+
313+ end
314+
315+ """
316+ heatmap(x::CartData, a::Array{_T,N}, args...; kwargs...)
317+ in-place heatmap for a 2D CartData object (surface) with an array `a`.
318+ """
319+ function heatmap (x:: CartData , a:: Array{_T,N} , args... ; kwargs... ) where {_T,N}
320+ @assert size (x. z. val,3 )== 1
321+
322+ if N== 3
323+ heatmap (x. x. val[:,1 ], x. y. val[1 ,:], ustrip .(a[:,:,1 ]), args... ; kwargs... )
324+ elseif N== 2
325+ heatmap (x. x. val[:,1 ], x. y. val[1 ,:], ustrip .(a), args... ; kwargs... )
326+ end
327+
328+ end
329+
330+
331+ """
332+ heatmap!(x::GeoData, args...; field=:Topography, kwargs...)
333+ in-place heatmap for a 2D GeoData object (surface),
334+ """
335+ function heatmap! (x:: GeoData , args... ; field= :Topography , kwargs... )
336+ @assert size (x. depth. val,3 )== 1
337+ @assert hasfield (typeof (x. fields), field)
338+
339+ heatmap (x. lon. val[:,1 ], x. lat. val[1 ,:], ustrip .(x. fields[field][:,:,1 ]), args... ; kwargs... )
340+
341+ end
342+
343+ """
344+ heatmap!(x::GeoData, a::Array{_T,N}, args...; kwargs...)
345+ in-place heatmap for a 2D GeoData object (surface) with an array `a`.
346+ """
347+ function heatmap! (x:: GeoData , a:: Array{_T,N} , args... ; kwargs... ) where {_T,N}
348+ @assert size (x. depth. val,3 )== 1
349+
350+ if N== 3
351+ heatmap! (x. lon. val[:,1 ], x. lat. val[1 ,:], ustrip .(a[:,:,1 ]), args... ; kwargs... )
352+ elseif N== 2
353+ heatmap! (x. lon. val[:,1 ], x. lat. val[1 ,:], ustrip .(a), args... ; kwargs... )
354+ end
355+
356+ end
357+
358+ """
359+ heatmap!(x::CartData, args...; field=:Topography, colorbar=false, kwargs...)
360+ in-place heatmap for a 2D CartData object (surface)
361+ """
362+ function heatmap! (x:: CartData , args... ; field= :Topography , colorbar= false , kwargs... )
363+ @assert size (x. z. val,3 )== 1
364+ @assert hasfield (typeof (x. fields), field)
365+
366+ data = ustrip .(x. fields[field][:,:,1 ])
367+
368+ fig,ax,hm = heatmap! (x. x. val[:,1 ], x. y. val[1 ,:], data, args... ; kwargs... )
369+
370+ cb = nothing
371+ if colorbar
372+ cb = Colorbar (fig[1 ,2 ], limits= extrema (filter (! isnan,x. fields[field])), label= field)
373+ end
374+
375+ return fig_out
376+ end
377+
378+ """
379+ heatmap!(x::CartData, a::Array{_T,N}, args...; kwargs...)
380+ in-place heatmap for a 2D CartData object (surface) with an array `a`.
381+ """
382+ function heatmap! (x:: CartData , a:: Array{_T,N} , args... ; kwargs... ) where {_T,N}
383+ @assert size (x. z. val,3 )== 1
384+
385+ if N== 3
386+ heatmap! (x. x. val[:,1 ], x. y. val[1 ,:], ustrip .(a[:,:,1 ]), args... ; kwargs... )
387+ elseif N== 2
388+ heatmap! (x. x. val[:,1 ], x. y. val[1 ,:], ustrip .(a[:,:]), args... ; kwargs... )
389+ end
390+
391+ end
274392
275393end
0 commit comments