Closed ConnectedSystems closed 10 months ago
Thanks for the PR.
We have gone between two extremes of dependencies (depending on AbstractPlotting
vs depending on GLMakie
) as Makie
has changed over the years. In principle, I have no objection to users having to install GLMakie
separately (we had that when we depended in the past on AbstractPlotting
). But it makes sense only if there are more than one backends that we are able to support.
I have never tested InteractiveViz
with WGLMakie
before. Does it work well?
Works relatively well, I guess - the control feel laggy and you can't pan/zoom too fast otherwise it overshoots or tearing occurs (see video attached).
I'm not sure if there's anything you can do on InteractiveViz
as such, WGLMakie needs to be optimized further perhaps?
I also see a lot of warnings being thrown but this seems to be from Makie itself rather than InteractiveViz (see copy below). That said, I'm of the opinion that WGLMakie will continue to mature so worthwhile having this flexibility in now rather than later.
┌ Warning: Error in window event callback
│ exception =
│ All non scalars need same length, Found lengths for each argument: (5, 3, 1), (Vector{Makie.GlyphCollection}, Vector{Point{3, Float32}}, Quaternion{Float64})
│ Stacktrace:
│ [1] error(s::String)
│ @ Base .\error.jl:35
│ [2] macro expansion
│ @ C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\utilities\utilities.jl:210 [inlined]
│ [3] broadcast_foreach(::Makie.var"#966#967", ::Vector{Makie.GlyphCollection}, ::Vector{Point{3, Float32}}, ::Quaternion{Float64})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\utilities\utilities.jl:203
│ [4] boundingbox(layouts::Vector{Makie.GlyphCollection}, positions::Vector{Point{3, Float32}}, rotations::Quaternion{Float64})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\layouting\boundingbox.jl:81
│ [5] boundingbox(x::MakieCore.Text{Tuple{Vector{Makie.GlyphCollection}}})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\layouting\boundingbox.jl:112
│ [6] boundingbox(plot::MakieCore.Text{Tuple{Vector{Point{3, Float32}}}})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\layouting\boundingbox.jl:118
│ --- the last 1 lines are repeated 1 more time ---
│ [8] (::Makie.var"#1427#1441"{Observable{Tuple{Float32, Tuple{Float32, Float32}, Bool}}, Observable{Any}})(::Vector{Tuple{Any, Point{2, Float32}}}, ::Vararg{Any})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\lineaxis.jl:297
│ [9] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Base .\essentials.jl:819
│ [10] invokelatest(::Any, ::Any, ::Vararg{Any})
│ @ Base .\essentials.jl:816
│ [11] (::Observables.MapCallback)(value::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:436
│ [12] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [13] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [14] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [15] update_ticklabel_node(closure_args::Tuple{Observable{Bool}, Observable{Any}, Observable{Float32}, Observable{Any}, Observable{Vector{Float32}}}, ticklabel_annotation_obs::Observable{Vector{Tuple{Any, Point{2, Float32}}}}, labelgap::Float32, flipped::Bool, tickpositions::Vector{Point{2, Float32}}, tickstrings::Vector{Any})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\lineaxis.jl:160
│ [16] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Base .\essentials.jl:819
│ [17] invokelatest(::Any, ::Any, ::Vararg{Any})
│ @ Base .\essentials.jl:816
│ [18] (::Observables.OnAny)(value::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:420
│ [19] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [20] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [21] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [22] setindex!(observable::Observable, val::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123
│ [23] update_tickpos_string(closure_args::Tuple{Observable{Vector{Any}}, 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{Any}}, reversed::Bool, scale::typeof(identity))
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\lineaxis.jl:224
│ [24] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Base .\essentials.jl:819
│ [25] invokelatest(::Any, ::Any, ::Vararg{Any})
│ @ Base .\essentials.jl:816
│ [26] (::Observables.OnAny)(value::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:420
│ [27] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [28] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [29] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [30] setindex!(observable::Observable, val::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123
│ [31] (::Observables.MapCallback)(value::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:436
│ --- the last 5 lines are repeated 1 more time ---
│ [37] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [38] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [39] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [40] setindex!(observable::Observable, val::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123
│ [41] (::Observables.SetindexCallback)(x::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:148
│ [42] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [43] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [44] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [45] setindex!(observable::Observable, val::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123
│ [46] (::Observables.MapCallback)(value::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:436
│ [47] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [48] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [49] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [50] setindex!(observable::Observable, val::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123
│ [51] adjustlimits!(la::Axis)
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\blocks\axis.jl:998
│ [52] (::Makie.var"#1496#1526"{Axis})(pxa::GeometryBasics.HyperRectangle{2, Int64}, lims::GeometryBasics.HyperRectangle{2, Float32})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\blocks\axis.jl:510
│ [53] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Base .\essentials.jl:819
│ [54] invokelatest(::Any, ::Any, ::Vararg{Any})
│ @ Base .\essentials.jl:816
│ [55] (::Observables.OnAny)(value::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:420
│ [56] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [57] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [58] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [59] setindex!(observable::Observable, val::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123
│ [60] process_interaction(s::Makie.ScrollZoom, event::ScrollEvent, ax::Axis)
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\interactions.jl:287
│ [61] process_axis_event(ax::Axis, event::ScrollEvent)
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\blocks\axis.jl:27
│ [62] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│ @ Base .\essentials.jl:819
│ [63] invokelatest(::Any, ::Any, ::Vararg{Any})
│ @ Base .\essentials.jl:816
│ [64] (::Observables.OnAny)(value::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:420
│ [65] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [66] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [67] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [68] setindex!
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123 [inlined]
│ [69] (::Makie.var"#1462#1464"{Scene, Observable{ScrollEvent}})(s::Tuple{Float64, Float64})
│ @ Makie C:\Users\tiwanaga\.julia\packages\Makie\RgxaV\src\makielayout\blocks\axis.jl:45
│ [70] #invokelatest#2
│ @ .\essentials.jl:819 [inlined]
│ [71] invokelatest
│ @ .\essentials.jl:816 [inlined]
│ [72] notify
│ @ C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:206 [inlined]
│ [73] setindex!(observable::Observable, val::Any)
│ @ Observables C:\Users\tiwanaga\.julia\packages\Observables\YdEbO\src\Observables.jl:123
│ [74] macro expansion
│ @ C:\Users\tiwanaga\.julia\packages\WGLMakie\CLlNf\src\events.jl:85 [inlined]
└ @ WGLMakie C:\Users\tiwanaga\.julia\packages\WGLMakie\CLlNf\src\events.jl:109
Thanks. I'll test this out shortly and then approve/merge.
A follow up question re bumping the version number for InteractiveViz
but otherwise I've addressed your comments.
By the way, I'm not sure if it's a placebo or not but WGLMakie does feel a bit smoother with Makie v0.20. The controls are still a bit laggy and tearing when panning/zooming around quickly still occurs though.
All done on my end :smile:
Change required dependency from GLMakie to Makie.
The current dependency requirements forces users to install GLMakie regardless of whether they are using it or not, as opposed to installing the desired backend (WGLMakie for example).
The tradeoff is that users are now required to install the specific backend they want, so visualizations won't work "out of the box".