MakieOrg / Makie.jl

Interactive data visualizations and plotting in Julia
https://docs.makie.org/stable
MIT License
2.37k stars 302 forks source link

Zooming around a plot randomly generates errors #4065

Open EdsterG opened 1 month ago

EdsterG commented 1 month ago

Are you running newest version (version from docs) ?

0.21.8

Can you reproduce the bug with a fresh environment ? (]activate --temp; add Makie)

Yes

What platform + GPU are you on?

MacOS

I haven't figured out how to reliably recreate this error. It seems to "randomly" happen while quickly scrolling around and zooming in/out of a plot. Specifically, it seems to happens while changing zoom levels. The simplest plot I've seen it happen on is:

using WGLMakie

scatter(1:4, color=1:4)

The output is:

┌ Warning: Error in window event callback
│   exception =
│    All non scalars need same length, Found lengths for each argument: (4, 5, 1), (Vector{Makie.GlyphCollection}, Vector{GeometryBasics.Point{3, Float64}}, Makie.Quaternion{Float64})
│    Stacktrace:
│      [1] error(s::String)
│        @ Base ./error.jl:35
│      [2] macro expansion
│        @ ~/.julia/packages/Makie/rEu75/src/utilities/utilities.jl:206 [inlined]
│      [3] broadcast_foreach(::Makie.var"#1050#1051", ::Vector{Makie.GlyphCollection}, ::Vector{GeometryBasics.Point{3, Float64}}, ::Makie.Quaternion{Float64})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/utilities/utilities.jl:199
│      [4] unchecked_boundingbox(layouts::Vector{Makie.GlyphCollection}, positions::Vector{GeometryBasics.Point{3, Float64}}, rotations::Makie.Quaternion{Float64})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/layouting/text_boundingbox.jl:108
│      [5] string_boundingbox(::Vector{Makie.GlyphCollection}, ::Vector{GeometryBasics.Point{3, Float64}}, ::Vararg{Any})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/layouting/text_boundingbox.jl:63
│      [6] string_boundingbox(x::MakieCore.Text{Tuple{Vector{Makie.GlyphCollection}}})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/layouting/text_boundingbox.jl:59
│      [7] string_boundingbox(plot::MakieCore.Text{Tuple{Vector{GeometryBasics.Point{3, Float64}}}})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/layouting/text_boundingbox.jl:26
│    --- the last 1 lines are repeated 1 more time ---
│      [9] data_limits(plot::MakieCore.Text{Tuple{Vector{Tuple{Any, GeometryBasics.Point{2, Float32}}}}})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/layouting/data_limits.jl:80
│     [10] boundingbox(plot::MakieCore.Text{Tuple{Vector{Tuple{Any, GeometryBasics.Point{2, Float32}}}}}, target_space::Symbol)
│        @ Makie ~/.julia/packages/Makie/rEu75/src/layouting/text_boundingbox.jl:13
│     [11] (::Makie.var"#1588#1602"{Observables.Observable{Tuple{Float32, Tuple{Float32, Float32}, Bool}}, Observables.Observable{Any}})(::Vector{Tuple{Any, GeometryBasics.Point{2, Float32}}}, ::Vararg{Any})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/lineaxis.jl:303
│     [12] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base ./essentials.jl:892
│     [13] invokelatest(::Any, ::Any, ::Vararg{Any})
│        @ Base ./essentials.jl:889
│     [14] (::Observables.MapCallback)(value::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:436
│     [15] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [16] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [17] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [18] update_ticklabel_node(closure_args::Tuple{Observables.Observable{Bool}, Observables.Observable{Any}, Observables.Observable{Float32}, Observables.Observable{Any}, Observables.Observable{Vector{Float64}}}, ticklabel_annotation_obs::Observables.Observable{Vector{Tuple{Any, GeometryBasics.Point{2, Float32}}}}, labelgap::Float32, flipped::Bool, tickpositions::Vector{GeometryBasics.Point{2, Float32}}, tickstrings::Vector{Any})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/lineaxis.jl:165
│     [19] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base ./essentials.jl:892
│     [20] invokelatest(::Any, ::Any, ::Vararg{Any})
│        @ Base ./essentials.jl:889
│     [21] (::Observables.OnAny)(value::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:420
│     [22] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [23] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [24] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [25] setindex!(observable::Observables.Observable, val::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123
│     [26] update_tickpos_string(closure_args::Tuple{Observables.Observable{Vector{Any}}, Observables.Observable{Vector{GeometryBasics.Point{2, Float32}}}, Observables.Observable{Vector{Float64}}, Observables.Observable{Tuple{Float32, Tuple{Float32, Float32}, Bool}}, Observables.Observable{Tuple{Float64, Float64}}}, tickvalues_labels_unfiltered::Tuple{Vector{Float64}, Vector{Any}}, reversed::Bool, scale::typeof(identity))
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/lineaxis.jl:228
│     [27] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base ./essentials.jl:892
│     [28] invokelatest(::Any, ::Any, ::Vararg{Any})
│        @ Base ./essentials.jl:889
│     [29] (::Observables.OnAny)(value::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:420
│     [30] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [31] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [32] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [33] setindex!(observable::Observables.Observable, val::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123
│     [34] (::Observables.MapCallback)(value::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:436
│    --- the last 5 lines are repeated 1 more time ---
│     [40] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [41] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [42] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [43] setindex!(observable::Observables.Observable, val::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123
│     [44] (::Observables.SetindexCallback)(x::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:148
│     [45] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [46] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [47] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [48] setindex!(observable::Observables.Observable, val::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123
│     [49] (::Observables.MapCallback)(value::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:436
│     [50] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [51] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [52] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [53] setindex!(observable::Observables.Observable, val::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123
│     [54] adjustlimits!(la::Makie.Axis)
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/blocks/axis.jl:990
│     [55] (::Makie.var"#1658#1689"{Makie.Axis})(pxa::GeometryBasics.HyperRectangle{2, Int64}, lims::GeometryBasics.HyperRectangle{2, Float64})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/blocks/axis.jl:507
│     [56] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base ./essentials.jl:892
│     [57] invokelatest(::Any, ::Any, ::Vararg{Any})
│        @ Base ./essentials.jl:889
│     [58] (::Observables.OnAny)(value::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:420
│     [59] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [60] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [61] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [62] setindex!(observable::Observables.Observable, val::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123
│     [63] process_interaction(s::Makie.ScrollZoom, event::Makie.ScrollEvent, ax::Makie.Axis)
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/interactions.jl:287
│     [64] process_axis_event(ax::Makie.Axis, event::Makie.ScrollEvent)
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/blocks/axis.jl:15
│     [65] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base ./essentials.jl:892
│     [66] invokelatest(::Any, ::Any, ::Vararg{Any})
│        @ Base ./essentials.jl:889
│     [67] (::Observables.OnAny)(value::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:420
│     [68] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [69] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [70] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [71] setindex!
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123 [inlined]
│     [72] (::Makie.var"#1623#1625"{Makie.Scene, Observables.Observable{Makie.ScrollEvent}})(s::Tuple{Float64, Float64})
│        @ Makie ~/.julia/packages/Makie/rEu75/src/makielayout/blocks/axis.jl:33
│     [73] #invokelatest#2
│        @ ./essentials.jl:892 [inlined]
│     [74] invokelatest
│        @ ./essentials.jl:889 [inlined]
│     [75] notify
│        @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:206 [inlined]
│     [76] setindex!(observable::Observables.Observable, val::Any)
│        @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:123
└ @ WGLMakie ~/.julia/packages/WGLMakie/7QQ6J/src/events.jl:112
SimonDanisch commented 1 month ago

I've seen this too and it does seem to be not fatal, so it hasn't been a priority yet. Might get fixed as part of the planned updating improvements for (WGL)Makie.