Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Observable to adjust colorbar height crashes with GeoMakie but not GLMakie #135

Closed
haakon-e opened this issue Nov 9, 2022 · 5 comments
Closed
Labels
makiecon Issues to address at MakieCon

Comments

@haakon-e
Copy link
Contributor

haakon-e commented Nov 9, 2022

I am trying to make a colorbar for a plot that adjusts to the height of the figure. Following MakieOrg/Makie.jl#1874 (comment), with GLMakie I can do:

using GLMakie

julia> fig = Figure()

julia> ax = Axis(fig[1,1], aspect=DataAspect());

julia> hm = heatmap!(ax, rand(10,4));

julia> Colorbar(fig[1,2], hm, height = @lift Fixed($(pixelarea(ax.scene)).widths[2]));

which produces the desired output:
image

However, if I do essentially the same with GeoMakie:

julia> using GLMakie, GeoMakie

julia> fig = Figure()

julia> ga = GeoAxis(fig[1, 1]; 
           coastlines = true, coastline_attributes = (;),
           dest = "+proj=eqc"
       );


julia> hm = heatmap!(ga, -170:170, -80:80, rand(341, 161));

julia> Colorbar(fig[1,2], hm, height = @lift Fixed($(pixelarea(ga.scene)).widths[2]))

I get either this error:

ERROR: AssertionError: length(positions) == length(labels)

ERROR: AssertionError: length(positions) == length(labels)
Stacktrace:
    [1] are_ticks_colocated(scene::Scene, positions::Vector{Point{2, Float32}}, labels::Vector{String}, fontsize::Float64)
      @ GeoMakie ~/.julia/packages/GeoMakie/SRydi/src/utils.jl:306
    [2] (::GeoMakie.var"#44#47"{Axis, Int64, Bool, MakieCore.Text{Tuple{Vector{Tuple{AbstractString, Point{2, Float32}}}}}, MakieCore.Text{Tuple{Vector{Tuple{AbstractString, Point{2, Float32}}}}}, Observable{Tuple{Float32, Float32}}, Observable{Tuple{Float32, Float32}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{String}}, Observable{Vector{String}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Scene})(limits::GeometryBasics.HyperRectangle{2, Float32}, xticks::LinearTicks, xtickformat::Function, yticks::LinearTicks, ytickformat::Function, xminor::IntervalsBetween, yminor::IntervalsBetween, pxarea::GeometryBasics.HyperRectangle{2, Int64}, _tfunc::Proj.Transformation, spinewidth::Float64, xgridwidth::Float64, ygridwidth::Float64)
      @ GeoMakie ~/.julia/packages/GeoMakie/SRydi/src/geoaxis.jl:234
    [3] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
      @ Base ./essentials.jl:729
    [4] invokelatest(::Any, ::Any, ::Vararg{Any})
      @ Base ./essentials.jl:726
    [5] (::Observables.MapCallback)(value::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
    [6] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
    [7] invokelatest
      @ ./essentials.jl:726 [inlined]
    [8] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [9] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
--- the last 5 lines are repeated 2 more times ---
   [20] update_computedbbox!(computedbbox::Observable{GeometryBasics.HyperRectangle{2, Float32}}, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32}, alignment::Tuple{Float32, Float32}, reporteddimensions::GridLayoutBase.Dimensions, alignmode::Outside, protrusions::GridLayoutBase.RectSides{Float32}, sizeattrs::Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, autosizeobservable::Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:356
   [21] (::GridLayoutBase.var"#106#108"{Observable{GridLayoutBase.Dimensions}, Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}}, Observable{Any}, Observable{GridLayoutBase.RectSides{Float32}}, Observable{GeometryBasics.HyperRectangle{2, Float32}}})(sbbox::GeometryBasics.HyperRectangle{2, Float32}, ali::Tuple{Float32, Float32})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:218
   [22] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
      @ Base ./essentials.jl:729
   [23] invokelatest(::Any, ::Any, ::Vararg{Any})
      @ Base ./essentials.jl:726
   [24] (::Observables.OnAny)(value::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
   [25] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [26] invokelatest
      @ ./essentials.jl:726 [inlined]
   [27] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [28] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [29] align_to_bbox!(gl::GridLayout, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1084
   [30] (::GridLayoutBase.var"#11#12"{GridLayout})(bbox::GeometryBasics.HyperRectangle{2, Float32})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:157
   [31] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [32] invokelatest
      @ ./essentials.jl:726 [inlined]
   [33] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [34] update!(gl::GridLayout)
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:192
   [35] update!
      @ ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1513 [inlined]
   [36] (::GridLayoutBase.var"#14#15"{GridLayoutBase.GridContent{GridLayout}, Colorbar})(c::GridLayoutBase.Dimensions)
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:254
   [37] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [38] invokelatest
      @ ./essentials.jl:726 [inlined]
   [39] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [40] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [41] (::Observables.MapCallback)(value::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
   [42] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [43] invokelatest
      @ ./essentials.jl:726 [inlined]
   [44] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [45] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [46] (::GridLayoutBase.var"#104#105"{Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}})(w::Auto, h::Fixed)
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:101
   [47] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
      @ Base ./essentials.jl:729
   [48] invokelatest(::Any, ::Any, ::Vararg{Any})
      @ Base ./essentials.jl:726
   [49] (::Observables.OnAny)(value::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
   [50] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [51] invokelatest
      @ ./essentials.jl:726 [inlined]
   [52] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [53] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [54] (::Observables.SetindexCallback)(x::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:111
   [55] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [56] invokelatest
      @ ./essentials.jl:726 [inlined]
   [57] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [58] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [59] (::Observables.var"#11#12"{Observable{Any}})(x::Fixed)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:539
   [60] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [61] invokelatest
      @ ./essentials.jl:726 [inlined]
   [62] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [63] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [64] (::Observables.MapCallback)(value::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
--- the last 5 lines are repeated 3 more times ---
   [80] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
   [81] invokelatest
      @ ./essentials.jl:726 [inlined]
   [82] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [83] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
--- the last 64 lines are repeated 29 more times ---
 [1940] update_computedbbox!(computedbbox::Observable{GeometryBasics.HyperRectangle{2, Float32}}, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32}, alignment::Tuple{Float32, Float32}, reporteddimensions::GridLayoutBase.Dimensions, alignmode::Outside, protrusions::GridLayoutBase.RectSides{Float32}, sizeattrs::Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, autosizeobservable::Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:356
 [1941] (::GridLayoutBase.var"#106#108"{Observable{GridLayoutBase.Dimensions}, Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}}, Observable{Any}, Observable{GridLayoutBase.RectSides{Float32}}, Observable{GeometryBasics.HyperRectangle{2, Float32}}})(sbbox::GeometryBasics.HyperRectangle{2, Float32}, ali::Tuple{Float32, Float32})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:218
 [1942] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
      @ Base ./essentials.jl:729
 [1943] invokelatest(::Any, ::Any, ::Vararg{Any})
      @ Base ./essentials.jl:726
 [1944] (::Observables.OnAny)(value::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
 [1945] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
 [1946] invokelatest
      @ ./essentials.jl:726 [inlined]
 [1947] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [1948] setindex!(observable::Observable, val::Any)
      @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [1949] align_to_bbox!(gl::GridLayout, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1084
 [1950] (::GridLayoutBase.var"#11#12"{GridLayout})(bbox::GeometryBasics.HyperRectangle{2, Float32})
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:157
 [1951] #invokelatest#2
      @ ./essentials.jl:729 [inlined]
 [1952] invokelatest
      @ ./essentials.jl:726 [inlined]
 [1953] notify
      @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [1954] update!(gl::GridLayout)
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:192
 [1955] add_to_gridlayout!
      @ ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:286 [inlined]
 [1956] add_content!(g::GridLayout, content::Colorbar, rows::UnitRange{Int64}, cols::UnitRange{Int64}, side::GridLayoutBase.Inner)
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1539
 [1957] setindex!(g::GridLayout, content::Colorbar, rows::UnitRange{Int64}, cols::UnitRange{Int64}, side::GridLayoutBase.Inner)
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1433
 [1958] setindex!(gp::GridPosition, element::Colorbar)
      @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1572
 [1959] _block(::Type{Colorbar}, ::GridPosition; kwargs::Base.Pairs{Symbol, Observable, NTuple{5, Symbol}, NamedTuple{(:colormap, :limits, :highclip, :lowclip, :height), Tuple{Observable{Any}, Observable{Any}, Observable{Any}, Observable{Any}, Observable{Fixed}}}})
      @ Makie ~/.julia/packages/Makie/iY5BJ/src/makielayout/blocks.jl:294
 [1960] #_#1064
      @ ~/.julia/packages/Makie/iY5BJ/src/makielayout/blocks.jl:279 [inlined]
 [1961] Colorbar(fig_or_scene::GridPosition, heatmap::Heatmap{Tuple{Vector{Float32}, Vector{Float32}, Matrix{Float32}}}; kwargs::Base.Pairs{Symbol, Observable{Fixed}, Tuple{Symbol}, NamedTuple{(:height,), Tuple{Observable{Fixed}}}})
      @ Makie ~/.julia/packages/Makie/iY5BJ/src/makielayout/blocks/colorbar.jl:45

or this error:

ERROR: StackOverflowError:

ERROR: StackOverflowError:
Stacktrace:
     [1] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
     [2] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
     [3] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
     [4] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
     [5] invokelatest
       @ ./essentials.jl:726 [inlined]
     [6] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
     [7] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
--- the last 5 lines are repeated 1 more time ---
    [13] (::Makie.var"#175#177"{Attributes, Observable{Tuple{Vector{Point{2, Float32}}}}, DataType})(kwargs::Tuple{}, args::Vector{Point{2, Float32}})
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/interfaces.jl:333
    [14] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
    [15] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
    [16] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
    [17] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [18] invokelatest
       @ ./essentials.jl:726 [inlined]
    [19] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [20] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [21] (::Makie.var"#1859#1863"{Scene, Observable{Vector{Point{2, Float32}}}, Base.RefValue{Vector{Int64}}})(segs::Vector{Point{2, Float32}}, pos::Vector{Point{3, Float32}}, #unused#::StaticArraysCore.SMatrix{4, 4, Float32, 16}, #unused#::GeometryBasics.HyperRectangle{2, Int64}, transf::Function)
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/basic_recipes/text.jl:59
    [22] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
    [23] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
    [24] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
    [25] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [26] invokelatest
       @ ./essentials.jl:726 [inlined]
    [27] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [28] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [29] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
    [30] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [31] invokelatest
       @ ./essentials.jl:726 [inlined]
    [32] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [33] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [34] (::Makie.var"#175#177"{Attributes, Observable{Tuple{Vector{Point{3, Float32}}}}, DataType})(kwargs::Tuple{}, args::Vector{Point{3, Float32}})
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/interfaces.jl:333
    [35] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
    [36] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
    [37] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
    [38] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [39] invokelatest
       @ ./essentials.jl:726 [inlined]
    [40] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [41] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [42] (::Makie.var"#1866#1867"{Observable{Vector{Point{3, Float32}}}, Observable{Vector{AbstractString}}})(str_pos::Vector{Tuple{AbstractString, Point{2, Float32}}})
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/basic_recipes/text.jl:156
    [43] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [44] invokelatest
       @ ./essentials.jl:726 [inlined]
    [45] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [46] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [47] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
    [48] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [49] invokelatest
       @ ./essentials.jl:726 [inlined]
    [50] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [51] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [52] (::Makie.var"#175#177"{Attributes, Observable{Tuple{Vector{Tuple{AbstractString, Point{2, Float32}}}}}, DataType})(kwargs::Tuple{}, args::Vector{Tuple{AbstractString, Point{2, Float32}}})
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/interfaces.jl:333
    [53] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
    [54] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
    [55] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
    [56] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [57] invokelatest
       @ ./essentials.jl:726 [inlined]
    [58] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [59] update_ticklabel_node(closure_args::Tuple{Observable{Bool}, Observable{Any}, Observable{Float32}, Observable{Any}, Observable{Vector{Float32}}}, ticklabel_annotation_obs::Observable{Vector{Tuple{AbstractString, Point{2, Float32}}}}, labelgap::Float32, flipped::Bool, tickpositions::Vector{Point{2, Float32}}, tickstrings::Vector{AbstractString})
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/makielayout/lineaxis.jl:161
    [60] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
    [61] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
    [62] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
    [63] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [64] invokelatest
       @ ./essentials.jl:726 [inlined]
    [65] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [66] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [67] update_tickpos_string(closure_args::Tuple{Observable{Vector{AbstractString}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Float32}}, Observable{Tuple{Float32, Tuple{Float32, Float32}, Bool}}, Observable{Tuple{Float32, Float32}}}, tickvalues_labels_unfiltered::Tuple{Vector{Float32}, Vector{AbstractString}}, reversed::Bool, scale::typeof(identity))
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/makielayout/lineaxis.jl:224
    [68] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
    [69] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
    [70] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
    [71] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [72] invokelatest
       @ ./essentials.jl:726 [inlined]
    [73] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [74] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [75] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
--- the last 5 lines are repeated 1 more time ---
    [81] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [82] invokelatest
       @ ./essentials.jl:726 [inlined]
    [83] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [84] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [85] (::Observables.SetindexCallback)(x::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:111
    [86] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
    [87] invokelatest
       @ ./essentials.jl:726 [inlined]
    [88] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
    [89] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
    [90] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
--- the last 5 lines are repeated 2 more times ---
   [101] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [102] invokelatest
       @ ./essentials.jl:726 [inlined]
   [103] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [104] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [105] update_computedbbox!(computedbbox::Observable{GeometryBasics.HyperRectangle{2, Float32}}, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32}, alignment::Tuple{Float32, Float32}, reporteddimensions::GridLayoutBase.Dimensions, alignmode::Outside, protrusions::GridLayoutBase.RectSides{Float32}, sizeattrs::Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, autosizeobservable::Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:356
   [106] (::GridLayoutBase.var"#106#108"{Observable{GridLayoutBase.Dimensions}, Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}}, Observable{Any}, Observable{GridLayoutBase.RectSides{Float32}}, Observable{GeometryBasics.HyperRectangle{2, Float32}}})(sbbox::GeometryBasics.HyperRectangle{2, Float32}, ali::Tuple{Float32, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:218
   [107] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
   [108] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
   [109] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
   [110] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [111] invokelatest
       @ ./essentials.jl:726 [inlined]
   [112] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [113] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [114] align_to_bbox!(gl::GridLayout, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1084
   [115] (::GridLayoutBase.var"#11#12"{GridLayout})(bbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:157
   [116] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [117] invokelatest
       @ ./essentials.jl:726 [inlined]
   [118] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [119] update!(gl::GridLayout)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:192
   [120] update!
       @ ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1513 [inlined]
   [121] (::GridLayoutBase.var"#14#15"{GridLayoutBase.GridContent{GridLayout}, Colorbar})(c::GridLayoutBase.Dimensions)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:254
   [122] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [123] invokelatest
       @ ./essentials.jl:726 [inlined]
   [124] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [125] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [126] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
   [127] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [128] invokelatest
       @ ./essentials.jl:726 [inlined]
   [129] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [130] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [131] (::GridLayoutBase.var"#104#105"{Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}})(w::Auto, h::Fixed)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:101
   [132] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
   [133] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
   [134] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
   [135] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [136] invokelatest
       @ ./essentials.jl:726 [inlined]
   [137] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [138] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [139] (::Observables.SetindexCallback)(x::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:111
   [140] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [141] invokelatest
       @ ./essentials.jl:726 [inlined]
   [142] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [143] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [144] (::Observables.var"#11#12"{Observable{Any}})(x::Fixed)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:539
   [145] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
   [146] invokelatest
       @ ./essentials.jl:726 [inlined]
   [147] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
   [148] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
   [149] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
--- the last 5 lines are repeated 3 more times ---
--- the last 64 lines are repeated 603 more times ---
 [38757] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38758] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38759] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38760] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38761] update_computedbbox!(computedbbox::Observable{GeometryBasics.HyperRectangle{2, Float32}}, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32}, alignment::Tuple{Float32, Float32}, reporteddimensions::GridLayoutBase.Dimensions, alignmode::Outside, protrusions::GridLayoutBase.RectSides{Float32}, sizeattrs::Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, autosizeobservable::Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:356
 [38762] (::GridLayoutBase.var"#106#108"{Observable{GridLayoutBase.Dimensions}, Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}}, Observable{Any}, Observable{GridLayoutBase.RectSides{Float32}}, Observable{GeometryBasics.HyperRectangle{2, Float32}}})(sbbox::GeometryBasics.HyperRectangle{2, Float32}, ali::Tuple{Float32, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:218
 [38763] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
 [38764] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
 [38765] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
 [38766] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38767] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38768] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38769] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38770] align_to_bbox!(gl::GridLayout, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1084
 [38771] (::GridLayoutBase.var"#11#12"{GridLayout})(bbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:157
 [38772] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38773] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38774] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38775] update!(gl::GridLayout)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:192
 [38776] update!
       @ ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1513 [inlined]
 [38777] (::GridLayoutBase.var"#14#15"{GridLayoutBase.GridContent{GridLayout}, Axis})(c::GridLayoutBase.Dimensions)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:254
 [38778] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38779] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38780] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38781] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38782] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
--- the last 5 lines are repeated 2 more times ---
 [38793] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38794] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38795] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38796] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38797] (::Makie.var"#1231#1244"{Observable{Any}})(idealspace::Float32, space::MakieCore.Automatic)
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/makielayout/lineaxis.jl:322
 [38798] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
 [38799] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
 [38800] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
 [38801] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38802] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38803] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38804] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38805] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
 [38806] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38807] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38808] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38809] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38810] (::Observables.SetindexCallback)(x::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:111
 [38811] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38812] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38813] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38814] setindex!
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86 [inlined]
 [38815] (::GeoMakie.var"#44#47"{Axis, Int64, Bool, MakieCore.Text{Tuple{Vector{Tuple{AbstractString, Point{2, Float32}}}}}, MakieCore.Text{Tuple{Vector{Tuple{AbstractString, Point{2, Float32}}}}}, Observable{Tuple{Float32, Float32}}, Observable{Tuple{Float32, Float32}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{String}}, Observable{Vector{String}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Observable{Vector{Point{2, Float32}}}, Scene})(limits::GeometryBasics.HyperRectangle{2, Float32}, xticks::LinearTicks, xtickformat::Function, yticks::LinearTicks, ytickformat::Function, xminor::IntervalsBetween, yminor::IntervalsBetween, pxarea::GeometryBasics.HyperRectangle{2, Int64}, _tfunc::Proj.Transformation, spinewidth::Float64, xgridwidth::Float64, ygridwidth::Float64)
       @ GeoMakie ~/.julia/packages/GeoMakie/SRydi/src/geoaxis.jl:235
 [38816] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
 [38817] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
 [38818] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
 [38819] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38820] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38821] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38822] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
--- the last 5 lines are repeated 2 more times ---
 [38833] update_computedbbox!(computedbbox::Observable{GeometryBasics.HyperRectangle{2, Float32}}, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32}, alignment::Tuple{Float32, Float32}, reporteddimensions::GridLayoutBase.Dimensions, alignmode::Outside, protrusions::GridLayoutBase.RectSides{Float32}, sizeattrs::Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, autosizeobservable::Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:356
 [38834] (::GridLayoutBase.var"#106#108"{Observable{GridLayoutBase.Dimensions}, Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}}, Observable{Any}, Observable{GridLayoutBase.RectSides{Float32}}, Observable{GeometryBasics.HyperRectangle{2, Float32}}})(sbbox::GeometryBasics.HyperRectangle{2, Float32}, ali::Tuple{Float32, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:218
 [38835] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
 [38836] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
 [38837] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
 [38838] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38839] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38840] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38841] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38842] align_to_bbox!(gl::GridLayout, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1084
 [38843] (::GridLayoutBase.var"#11#12"{GridLayout})(bbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:157
 [38844] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38845] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38846] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38847] update!(gl::GridLayout)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:192
 [38848] update!
       @ ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1513 [inlined]
 [38849] (::GridLayoutBase.var"#14#15"{GridLayoutBase.GridContent{GridLayout}, Colorbar})(c::GridLayoutBase.Dimensions)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:254
 [38850] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38851] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38852] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38853] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38854] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
 [38855] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38856] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38857] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38858] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38859] (::GridLayoutBase.var"#104#105"{Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}})(w::Auto, h::Fixed)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:101
 [38860] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
 [38861] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
 [38862] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
 [38863] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38864] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38865] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38866] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38867] (::Observables.SetindexCallback)(x::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:111
 [38868] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38869] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38870] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38871] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38872] (::Observables.var"#11#12"{Observable{Any}})(x::Fixed)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:539
 [38873] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38874] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38875] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38876] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [38877] (::Observables.MapCallback)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:431
--- the last 5 lines are repeated 3 more times ---
 [38893] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [38894] invokelatest
       @ ./essentials.jl:726 [inlined]
 [38895] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [38896] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
--- the last 64 lines are repeated 12 more times ---
 [39665] update_computedbbox!(computedbbox::Observable{GeometryBasics.HyperRectangle{2, Float32}}, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32}, alignment::Tuple{Float32, Float32}, reporteddimensions::GridLayoutBase.Dimensions, alignmode::Outside, protrusions::GridLayoutBase.RectSides{Float32}, sizeattrs::Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, autosizeobservable::Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:356
 [39666] (::GridLayoutBase.var"#106#108"{Observable{GridLayoutBase.Dimensions}, Observable{Tuple{Union{Nothing, Float32, Auto, Fixed, Relative}, Union{Nothing, Float32, Auto, Fixed, Relative}}}, Observable{Tuple{Union{Nothing, Float32}, Union{Nothing, Float32}}}, Observable{Any}, Observable{GridLayoutBase.RectSides{Float32}}, Observable{GeometryBasics.HyperRectangle{2, Float32}}})(sbbox::GeometryBasics.HyperRectangle{2, Float32}, ali::Tuple{Float32, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/layoutobservables.jl:218
 [39667] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
       @ Base ./essentials.jl:729
 [39668] invokelatest(::Any, ::Any, ::Vararg{Any})
       @ Base ./essentials.jl:726
 [39669] (::Observables.OnAny)(value::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:415
 [39670] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [39671] invokelatest
       @ ./essentials.jl:726 [inlined]
 [39672] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [39673] setindex!(observable::Observable, val::Any)
       @ Observables ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:86
 [39674] align_to_bbox!(gl::GridLayout, suggestedbbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1084
 [39675] (::GridLayoutBase.var"#11#12"{GridLayout})(bbox::GeometryBasics.HyperRectangle{2, Float32})
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:157
 [39676] #invokelatest#2
       @ ./essentials.jl:729 [inlined]
 [39677] invokelatest
       @ ./essentials.jl:726 [inlined]
 [39678] notify
       @ ~/.julia/packages/Observables/PHGQ8/src/Observables.jl:169 [inlined]
 [39679] update!(gl::GridLayout)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:192
 [39680] add_to_gridlayout!
       @ ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:286 [inlined]
 [39681] add_content!(g::GridLayout, content::Colorbar, rows::UnitRange{Int64}, cols::UnitRange{Int64}, side::GridLayoutBase.Inner)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1539
 [39682] setindex!(g::GridLayout, content::Colorbar, rows::UnitRange{Int64}, cols::UnitRange{Int64}, side::GridLayoutBase.Inner)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1433
 [39683] setindex!(gp::GridPosition, element::Colorbar)
       @ GridLayoutBase ~/.julia/packages/GridLayoutBase/lYdxT/src/gridlayout.jl:1572
 [39684] _block(::Type{Colorbar}, ::GridPosition; kwargs::Base.Pairs{Symbol, Observable, NTuple{5, Symbol}, NamedTuple{(:colormap, :limits, :highclip, :lowclip, :height), Tuple{Observable{Any}, Observable{Any}, Observable{Any}, Observable{Any}, Observable{Fixed}}}})
       @ Makie ~/.julia/packages/Makie/iY5BJ/src/makielayout/blocks.jl:294
 [39685] #_#1064
       @ ~/.julia/packages/Makie/iY5BJ/src/makielayout/blocks.jl:279 [inlined]


OS details:

julia> versioninfo()
Julia Version 1.8.2
Commit 36034abf260 (2022-09-29 15:21 UTC)
Platform Info:
  OS: macOS (arm64-apple-darwin21.3.0)
  CPU: 8 × Apple M1
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-13.0.1 (ORCJIT, apple-m1)
  Threads: 1 on 4 virtual cores

julia> using Pkg; Pkg.status(mode=PKGMODE_MANIFEST)
Status `~/Documents/test/Manifest.toml`
  [621f4979] AbstractFFTs v1.2.1
  [1520ce14] AbstractTrees v0.4.3
  [79e6a3ab] Adapt v3.4.0
  [27a7e980] Animations v0.4.1
  [67c07d97] Automa v0.8.2
  [13072b0f] AxisAlgorithms v1.0.1
  [fa961155] CEnum v0.4.2
  [49dc2e85] Calculus v0.5.1
  [d360d2e6] ChainRulesCore v1.15.6
  [9e997f8a] ChangesOfVariables v0.1.4
  [a2cac450] ColorBrewer v0.4.0
  [35d6a980] ColorSchemes v3.19.0
  [3da002f7] ColorTypes v0.11.4
  [c3611d14] ColorVectorSpace v0.9.9
  [5ae59095] Colors v0.12.8
  [34da2185] Compat v4.3.0
  [d38c429a] Contour v0.6.2
  [150eb455] CoordinateTransformations v0.6.2
  [9a962f9c] DataAPI v1.13.0
  [864edb3b] DataStructures v0.18.13
  [e2d170a0] DataValueInterfaces v1.0.0
  [b429d917] DensityInterface v0.4.0
  [31c24e10] Distributions v0.25.77
  [ffbed154] DocStringExtensions v0.9.2
  [fa6b7ba4] DualNumbers v0.6.8
  [411431e0] Extents v0.1.1
  [c87230d0] FFMPEG v0.4.1
  [7a1cc6ca] FFTW v1.5.0
  [5789e2e9] FileIO v1.16.0
  [1a297f60] FillArrays v0.13.5
  [53c48c17] FixedPointNumbers v0.8.4
  [59287772] Formatting v0.4.2
  [b38be410] FreeType v4.0.0
  [663a7486] FreeTypeAbstraction v0.10.0
  [f7f18e0c] GLFW v3.4.1
  [e9467ef8] GLMakie v0.7.2
  [68eda718] GeoFormatTypes v0.4.1
  [cf35fbd7] GeoInterface v1.0.1
  [0329782f] GeoInterfaceRecipes v1.0.0
  [61d90e0f] GeoJSON v0.6.1
  [db073c08] GeoMakie v0.4.6
  [5c1252a2] GeometryBasics v0.4.4
  [a2bd30eb] Graphics v1.1.2
  [3955a311] GridLayoutBase v0.9.1
  [42e2da0e] Grisu v1.0.2
  [34004b35] HypergeometricFunctions v0.3.11
  [a09fc81d] ImageCore v0.9.4
  [82e4d734] ImageIO v0.6.6
  [9b13fd28] IndirectArrays v1.0.0
  [d25df0c9] Inflate v0.1.3
  [a98d9a8b] Interpolations v0.14.6
  [8197267c] IntervalSets v0.7.3
  [3587e190] InverseFunctions v0.1.8
  [92d709cd] IrrationalConstants v0.1.1
  [f1662d9f] Isoband v0.1.1
  [c8e1da08] IterTools v1.4.0
  [82899510] IteratorInterfaceExtensions v1.0.0
  [692b3bcd] JLLWrappers v1.4.1
  [682c06a0] JSON v0.21.3
  [0f8b85d8] JSON3 v1.11.1
  [b835a17e] JpegTurbo v0.1.1
  [5ab0869b] KernelDensity v0.6.5
  [b964fa9f] LaTeXStrings v1.3.0
  [8cdb02fc] LazyModules v0.3.1
  [2ab3a3ac] LogExpFunctions v0.3.18
  [ee78f7c6] Makie v0.18.2
  [20f20a25] MakieCore v0.5.2
  [dbb5928d] MappedArrays v0.4.1
  [7eb4fadd] Match v1.2.0
  [0a4f8689] MathTeXEngine v0.5.3
  [7269a6da] MeshIO v0.4.10
  [978d7f02] MiniQhull v0.4.0
  [e1d29d7a] Missings v1.0.2
  [66fc600b] ModernGL v1.1.5
  [e94cdb99] MosaicViews v0.3.3
  [77ba4419] NaNMath v1.0.1
  [f09324ee] Netpbm v1.0.2
  [510215fc] Observables v0.5.4
  [6fe1bfb0] OffsetArrays v1.12.8
  [52e1d378] OpenEXR v0.3.2
  [bac558e1] OrderedCollections v1.4.1
  [90014a1f] PDMats v0.11.16
  [f57f5aa1] PNGFiles v0.3.17
  [19eb6ba3] Packing v0.4.2
  [5432bcbf] PaddedViews v0.5.11
  [69de0a69] Parsers v2.5.0
  [eebad327] PkgVersion v0.3.2
  [995b91a9] PlotUtils v1.3.1
  [647866c9] PolygonOps v0.1.2
  [21216c6a] Preferences v1.3.0
  [92933f4c] ProgressMeter v1.7.2
  [c94c279d] Proj v1.2.0
  [4b34888f] QOI v1.0.0
  [1fd47b50] QuadGK v2.6.0
  [c84ed2f1] Ratios v0.4.3
  [3cdcf5f2] RecipesBase v1.3.1
  [189a3867] Reexport v1.2.2
  [05181044] RelocatableFolders v1.0.0
  [ae029012] Requires v1.3.0
  [79098fc4] Rmath v0.7.0
  [fdea26ae] SIMD v3.4.2
  [7b38b023] ScanByte v0.3.3
  [6c6a2e73] Scratch v1.1.1
  [65257c39] ShaderAbstractions v0.2.9
  [992d4aef] Showoff v1.0.3
  [73760f76] SignedDistanceFields v0.4.0
  [45858cf5] Sixel v0.1.2
  [66db9d55] SnoopPrecompile v1.0.1
  [a2af1166] SortingAlgorithms v1.0.1
  [276daf66] SpecialFunctions v2.1.7
  [cae243ae] StackViews v0.1.1
  [90137ffa] StaticArrays v1.5.9
  [1e83bf80] StaticArraysCore v1.4.0
  [82ae8749] StatsAPI v1.5.0
  [2913bbd2] StatsBase v0.33.21
  [4c63d2b9] StatsFuns v1.0.1
  [09ab397b] StructArrays v0.6.13
  [856f2bd8] StructTypes v1.10.0
  [3783bdb8] TableTraits v1.0.1
  [bd369af6] Tables v1.10.0
  [62fd8b95] TensorCore v0.1.1
  [731e570b] TiffImages v0.6.1
  [3bb67fe8] TranscodingStreams v0.9.9
  [981d1d27] TriplotBase v0.1.0
  [1cfade01] UnicodeFun v0.4.1
  [efce3f68] WoodburyMatrices v0.5.5
  [6e34b625] Bzip2_jll v1.0.8+0
  [83423d85] Cairo_jll v1.16.1+1
  [5ae413db] EarCut_jll v2.2.4+0
  [2e619515] Expat_jll v2.4.8+0
  [b22a6f82] FFMPEG_jll v4.4.2+2
  [f5851436] FFTW_jll v3.3.10+0
  [a3f928ae] Fontconfig_jll v2.13.93+0
  [d7e528f0] FreeType2_jll v2.10.4+0
  [559328eb] FriBidi_jll v1.0.10+0
  [0656b61e] GLFW_jll v3.3.8+0
  [78b55507] Gettext_jll v0.21.0+0
  [7746bdde] Glib_jll v2.74.0+1
  [3b182d85] Graphite2_jll v1.3.14+0
  [2e76f6c2] HarfBuzz_jll v2.8.1+1
  [905a6f67] Imath_jll v3.1.2+0
  [1d5cc7b8] IntelOpenMP_jll v2018.0.3+2
  [aacddb02] JpegTurbo_jll v2.1.2+0
  [c1c5ebd0] LAME_jll v3.100.1+0
  [88015f11] LERC_jll v3.0.0+1
  [dd4b983a] LZO_jll v2.10.1+0
⌅ [e9f186c6] Libffi_jll v3.2.2+1
  [d4300ac3] Libgcrypt_jll v1.8.7+0
  [7e76a0d4] Libglvnd_jll v1.3.0+3
  [7add5ba3] Libgpg_error_jll v1.42.0+0
  [94ce4f54] Libiconv_jll v1.16.1+1
  [4b2f31a3] Libmount_jll v2.35.0+0
  [89763e89] Libtiff_jll v4.4.0+0
  [38a345b3] Libuuid_jll v2.36.0+0
  [856f044c] MKL_jll v2022.2.0+0
  [e7412a2a] Ogg_jll v1.3.5+1
  [18a262bb] OpenEXR_jll v3.1.1+0
  [458c3c95] OpenSSL_jll v1.1.19+0
  [efe28fd5] OpenSpecFun_jll v0.5.5+0
  [91d4177d] Opus_jll v1.3.2+0
  [58948b4f] PROJ_jll v900.100.0+0
  [30392449] Pixman_jll v0.40.1+0
  [460c41e3] QhullMiniWrapper_jll v1.0.0+1
⌅ [784f63db] Qhull_jll v8.0.1000+0
  [f50d1b31] Rmath_jll v0.3.0+0
  [76ed43ae] SQLite_jll v3.39.4+0
  [02c8fc9c] XML2_jll v2.9.14+0
  [aed1982a] XSLT_jll v1.1.34+0
  [4f6342f7] Xorg_libX11_jll v1.6.9+4
  [0c0b7dd1] Xorg_libXau_jll v1.0.9+4
  [935fb764] Xorg_libXcursor_jll v1.2.0+4
  [a3789734] Xorg_libXdmcp_jll v1.1.3+4
  [1082639a] Xorg_libXext_jll v1.3.4+4
  [d091e8ba] Xorg_libXfixes_jll v5.0.3+4
  [a51aa0fd] Xorg_libXi_jll v1.7.10+4
  [d1454406] Xorg_libXinerama_jll v1.1.4+4
  [ec84b674] Xorg_libXrandr_jll v1.5.2+4
  [ea2f1a96] Xorg_libXrender_jll v0.9.10+4
  [14d82f49] Xorg_libpthread_stubs_jll v0.1.0+3
  [c7cfdc94] Xorg_libxcb_jll v1.13.0+3
  [c5fb5394] Xorg_xtrans_jll v1.4.0+3
  [3161d3a3] Zstd_jll v1.5.2+0
  [9a68df92] isoband_jll v0.2.3+0
  [a4ae2306] libaom_jll v3.4.0+0
  [0ac62f75] libass_jll v0.15.1+0
  [f638f0a6] libfdk_aac_jll v2.0.2+0
  [b53b4c65] libpng_jll v1.6.38+0
  [075b6546] libsixel_jll v1.10.3+0
  [f27f6e37] libvorbis_jll v1.3.7+1
  [1270edf5] x264_jll v2021.5.5+0
  [dfaa095f] x265_jll v3.5.0+0
  [0dad84c5] ArgTools v1.1.1
  [56f22d72] Artifacts
  [2a0f44e3] Base64
  [ade2ca70] Dates
  [8ba89e20] Distributed
  [f43a241f] Downloads v1.6.0
  [7b1f6079] FileWatching
  [b77e0a4c] InteractiveUtils
  [4af54fe1] LazyArtifacts
  [b27032c2] LibCURL v0.6.3
  [76f85450] LibGit2
  [8f399da3] Libdl
  [37e2e46d] LinearAlgebra
  [56ddb016] Logging
  [d6f4376e] Markdown
  [a63ad114] Mmap
  [ca575930] NetworkOptions v1.2.0
  [44cfe95a] Pkg v1.8.0
  [de0858da] Printf
  [3fa0cd96] REPL
  [9a3f8284] Random
  [ea8e919c] SHA v0.7.0
  [9e88b42a] Serialization
  [1a1011a3] SharedArrays
  [6462fe0b] Sockets
  [2f01184e] SparseArrays
  [10745b16] Statistics
  [4607b0f0] SuiteSparse
  [fa267f1f] TOML v1.0.0
  [a4e569a6] Tar v1.10.1
  [8dfed614] Test
  [cf7118a7] UUIDs
  [4ec0a83e] Unicode
  [e66e0078] CompilerSupportLibraries_jll v0.5.2+0
  [deac9b47] LibCURL_jll v7.84.0+0
  [29816b5a] LibSSH2_jll v1.10.2+0
  [c8ffd9c3] MbedTLS_jll v2.28.0+0
  [14a3606d] MozillaCACerts_jll v2022.2.1
  [4536629a] OpenBLAS_jll v0.3.20+0
  [05823500] OpenLibm_jll v0.8.1+0
  [efcefdf7] PCRE2_jll v10.40.0+0
  [83775a58] Zlib_jll v1.2.12+3
  [8e850b90] libblastrampoline_jll v5.1.1+0
  [8e850ede] nghttp2_jll v1.48.0+0
  [3f19e933] p7zip_jll v17.4.0+0
Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`

any suggestions?

@haakon-e
Copy link
Contributor Author

haakon-e commented Nov 11, 2022

I seem to slip up with the same gotcha every time I do prototypes: don't use heatmap! with GLMakie... (perhaps there is a way to warn about this when coding?)

If I use surface! instead, and also use the default projection dest = "+proj=eqearth":

julia> using GeoMakie, GLMakie

julia> fig = Figure()

julia> ga = GeoAxis(fig[1,1]);

julia> sf = surface!(ga, -180:180, -90:90, rand(361, 181));

julia> Colorbar(fig[1,2], sf, height = @lift Fixed($(pixelarea(ga.scene)).widths[2]))

the code doesn't crash, but it is made very very small:
image

If I try to use the projection dest = "+proj=eqc":

julia> fig = Figure()

julia> ga = GeoAxis(fig[1,1]; dest = "+proj=eqc");

julia> sf = surface!(ga, -180:180, -90:90, rand(361, 181));

julia> Colorbar(fig[1,2], sf, height = @lift Fixed($(pixelarea(ga.scene)).widths[2]))
ERROR: StackOverflowError:
[...]

the call to Colorbar still crashes with a StackOverflowError, as before. But it does plot something:
image

@haakon-e
Copy link
Contributor Author

haakon-e commented Nov 11, 2022

With this code:

julia> using GeoMakie, GLMakie

julia> fig = Figure()
ga 
julia> ga = GeoAxis(fig[1,1]; dest = "+proj=eqc");

julia> sf = surface!(ga, -180:180, -90:90, rand(361, 181));

julia> obs = @lift Fixed($(pixelarea(ga.scene)).widths[2])
Observable(Fixed(762.0f0))

# before this call, I resized the plot window with my cursor to make it bigger
julia> obs
Observable(Fixed(1154.0f0))

# Adding a fixed-size colorbar (with default height) usually works
julia> Colorbar(fig[1,2], sf);

julia> Colorbar(fig[1,3], sf, height = obs)
ERROR: StackOverflowError:
[...]

I was once able to get the resizing to work, but now I am unable to reproduce that, and I get StackOverflowError...

@haakon-e
Copy link
Contributor Author

I have a very rudimentary understanding of Fixed in Makie and how to interact with Observables more broadly, but I was able to hack something together that seems to work:

julia> fig = Figure()

julia> ga = GeoAxis(fig[1,1]; dest = "+proj=eqc");
# julia> ga = GeoAxis(fig[1,1])  # works with default projection too

julia> obs = @lift Fixed($(pixelarea(ga.scene)).widths[2])  # fetch plot height
Observable(Fixed(362.0f0))

# This is not needed for fixing the Colorbar, but shows the current figure height as an axis title -->
julia> tobs = @lift "figure height: $(string($obs)[7:end-3])"  # dirty hack to get the number part of the string "Fixed(362.0f0)"
Observable("figure height: 362.0")

julia> ga.title[] = tobs.val  # set initial title
"figure height: 362.0"

julia> on(tobs) do t  # update title when plot pane is resized
           ga.title = t
       end
ObserverFunction defined at REPL[247]:2 operating on Observable("figure height: 361.0")
# <--

julia> sf = surface!(ga, -180:180, -90:90, rand(361, 181));

julia> rowsize!(fig.layout, 1, Auto(false))  # This is the critical part of the code

julia> Colorbar(fig[1,2], sf, height = obs)
Colorbar()

The critical component is the call to rowsize!. According to the Makie docs:

If a column or row is sized Auto(false), fixed-size objects are ignored.

i.e.: The vertical size of the plot (≤ height of fig[1,1]) will not depend on the vertical size of the colorbar (= height of fig[1,2]). It seems like GeoMakie axes handle Auto(true) (which is the default option) less gracefully than GLMakie axes, at least in the context this issue.
The resulting figure is:
image

@haakon-e
Copy link
Contributor Author

Looking at the Fixed stuff again, I quickly realized that I can do without it. A simpler code is this:

julia> using GeoMakie, GLMakie

julia> fig = Figure()

julia> ga = GeoAxis(fig[1,1])#; dest = "+proj=eqc");

julia> obs = @lift $(pixelarea(ga.scene)).widths[2]

# For title --->
julia> tobs = @lift "plot height: $($obs)"

julia> ga.title[] = tobs.val

julia> on(tobs) do t
           ga.title = t
       end
# <---

julia> sf = surface!(ga, -180:180, -90:90, rand(361, 181));

julia> rowsize!(fig.layout, 1, Auto(false))  # This is the critical part of the code

julia> Colorbar(fig[1,2], sf, height = obs)

image

A very similar code can be used to have a horizontal colorbar under the figure:

See details for horizontal colorbar
julia> using GeoMakie, GLMakie

julia> fig = Figure()

julia> ga = GeoAxis(fig[1,1])#; dest = "+proj=eqc");

julia> obs = @lift $(pixelarea(ga.scene)).widths[1]  # fetch the first element of .widths instead of the second.

# For title --->
julia> tobs = @lift "plot width: $($obs)"

julia> ga.title[] = tobs.val

julia> on(tobs) do t
           ga.title = t
       end
# <---

julia> sf = surface!(ga, -180:180, -90:90, rand(361, 181));

julia> colsize!(fig.layout, 1, Auto(false))  # use colsize! instead of rowsize!

julia> Colorbar(fig[2,1], sf, vertical=false, width = obs)  # set vertical to false, and specify width instead of height.
# set `flipaxis=false` to get ticks and ticklabels below colorbar

resulting figure:
image

@asinghvi17 asinghvi17 added the makiecon Issues to address at MakieCon label Mar 26, 2023
@asinghvi17
Copy link
Member

It looks like the approach from the initial post is now working!

iTerm2 4vrfo4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
makiecon Issues to address at MakieCon
Projects
None yet
Development

No branches or pull requests

2 participants