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

Can't plot a second Lines SpecApi.PlotSpec with Date x-axis #4802

Open
3 tasks done
rdboyes opened this issue Feb 17, 2025 · 2 comments · May be fixed by #4803
Open
3 tasks done

Can't plot a second Lines SpecApi.PlotSpec with Date x-axis #4802

rdboyes opened this issue Feb 17, 2025 · 2 comments · May be fixed by #4803
Labels
bug units aka dim converts

Comments

@rdboyes
Copy link

rdboyes commented Feb 17, 2025

  • what version of Makie are you running? (]st -m Makie)
(jl_OOZ0Ex) pkg> status
Status `/tmp/jl_OOZ0Ex/Project.toml`
  [ee78f7c6] Makie v0.22.1
  [ade2ca70] Dates v1.11.0
  • can you reproduce the bug with a fresh environment ? (]activate --temp; add Makie)

yes

  • What platform + GPU are you on?

Ubuntu 24.04, Nvidia 1080

Using the SpecApi, you get the error ArgumentError: Cannot change dim conversion for dimension 1, since it already is set to a conversion: Makie.DateTimeConversion(Observable(Date)). when trying to plot a second Lines object if the x axis is a Date. This operation works fine if the x axis is not a Date or if you don't use the SpecApi.

using Dates
using Makie

xdates = Date.(["2025-02-17", "2025-02-18"])
nums1 = [1, 2]
nums2 = [3, 4]

Makie.plot(
        Makie.SpecApi.GridLayout(
            Makie.SpecApi.Axis(
                plots=[
                    Makie.PlotSpec(
                        :Lines,
                        xdates,
                        nums1),
                    Makie.PlotSpec(
                        :Lines,
                        xdates,
                        nums2)
                ]
            )
        )
    )

Expected output:

f, _, pl = lines(xdates, nums1)
lines!(f[1,1], xdates, nums2)
f

Image

Full stacktrace:

ERROR: ArgumentError: Cannot change dim conversion for dimension 1, since it already is set to a conversion: Makie.DateTimeConversion(Observable(Date)).
Stacktrace:
  [1] setindex!(conversions::Makie.DimConversions, value::Makie.DateTimeConversion, i::Int64)
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/dim-converts/dim-converts.jl:35
  [2] (::Makie.var"#201#202"{Makie.DimConversions, Int64})(val::Makie.DateTimeConversion)
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/dim-converts/dim-converts.jl:23
  [3] on(f::Any, observable::Observables.AbstractObservable; weak::Bool, priority::Int64, update::Bool)
    @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:368
  [4] on
    @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:361 [inlined]
  [5] setindex!
    @ ~/.julia/packages/Makie/Q6F2P/src/dim-converts/dim-converts.jl:22 [inlined]
  [6] connect_conversions!(conversions::Makie.DimConversions, new_conversions::Makie.DimConversions)
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/dim-converts/dim-converts.jl:139
  [7] connect_plot!(parent::Scene, plot::Lines{Tuple{Vector{Point{2, Float64}}}})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/interfaces.jl:394
  [8] diff_plotlist!(scene::Scene, plotspecs::Vector{PlotSpec}, obs_to_notify::Vector{Observable}, plotlist::Nothing, reusable_plots::IdDict{PlotSpec, Plot}, new_plots::IdDict{PlotSpec, Plot})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:611
  [9] (::Makie.var"#update_plotlist#1132"{Scene, Nothing, IdDict{PlotSpec, Plot}, IdDict{PlotSpec, Plot}, Bool, Vector{Observable}})(plotspecs::Vector{PlotSpec})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:651
 [10] (::Makie.var"#1131#1136"{Vector{PlotSpec}})()
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:675
 [11] lock(f::Makie.var"#1131#1136"{Vector{PlotSpec}}, l::ReentrantLock)
    @ Base ./lock.jl:232
 [12] (::Makie.var"#1130#1135"{ReentrantLock})(plotspecs::Vector{PlotSpec})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:674
 [13] on(f::Any, observable::Observables.AbstractObservable; weak::Bool, priority::Int64, update::Bool)
    @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:368
 [14] on
    @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:361 [inlined]
 [15] #on#238
    @ ~/.julia/packages/Makie/Q6F2P/src/scenes.jl:152 [inlined]
 [16] on
    @ ~/.julia/packages/Makie/Q6F2P/src/scenes.jl:151 [inlined]
 [17] update_plotspecs!
    @ ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:673 [inlined]
 [18] update_plotspecs!(scene::Scene, list_of_plotspecs::Observable{Vector{PlotSpec}}, plotlist::Nothing)
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:642
 [19] update_plotspecs!
    @ ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:642 [inlined]
 [20] update_gridlayout!(gridlayout::GridLayout, nesting::Int64, oldgridspec::Nothing, gridspec::Makie.GridLayoutSpec, previous_contents::Vector{Pair{Tuple{…}, Tuple{…}}}, new_layoutables::Vector{Pair{Tuple{…}, Tuple{…}}})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:930
 [21] update_gridlayout!(target_layout::GridLayout, layout_spec::Makie.GridLayoutSpec, unused_layoutables::Vector{Pair{Tuple{…}, Tuple{…}}}, new_layoutables::Vector{Pair{Tuple{…}, Tuple{…}}})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:982
 [22] #1150
    @ ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:1033 [inlined]
 [23] lock(f::Makie.var"#1150#1152"{Makie.GridLayoutSpec, GridLayout, Vector{Pair{Tuple{…}, Tuple{…}}}, Vector{Pair{Tuple{…}, Tuple{…}}}}, l::ReentrantLock)
    @ Base ./lock.jl:232
 [24] (::Makie.var"#1149#1151"{GridLayout, ReentrantLock, Vector{Pair{Tuple{…}, Tuple{…}}}, Vector{Pair{Tuple{…}, Tuple{…}}}})(layout_spec::Makie.GridLayoutSpec)
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:1032
 [25] on(f::Any, observable::Observables.AbstractObservable; weak::Bool, priority::Int64, update::Bool)
    @ Observables ~/.julia/packages/Observables/YdEbO/src/Observables.jl:368
 [26] on
    @ ~/.julia/packages/Observables/YdEbO/src/Observables.jl:361 [inlined]
 [27] #on#238
    @ ~/.julia/packages/Makie/Q6F2P/src/scenes.jl:152 [inlined]
 [28] on
    @ ~/.julia/packages/Makie/Q6F2P/src/scenes.jl:151 [inlined]
 [29] update_fig!(fig::Figure, layout_obs::Observable{Makie.GridLayoutSpec})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:1031
 [30] plot!(fig::Figure, plot::Plot{plot, Tuple{Makie.GridLayoutSpec}})
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/specapi.jl:1047
 [31] _create_plot(F::Function, attributes::Dict{Symbol, Any}, args::Makie.GridLayoutSpec)
    @ Makie ~/.julia/packages/Makie/Q6F2P/src/figureplotting.jl:318
 [32] plot(args::Makie.GridLayoutSpec)
    @ MakieCore ~/.julia/packages/MakieCore/sHgwT/src/recipes.jl:58
 [33] top-level scope
    @ REPL[57]:1
Some type information was truncated. Use `show(err)` to see complete types.
@rdboyes rdboyes added the bug label Feb 17, 2025
@rdboyes
Copy link
Author

rdboyes commented Feb 17, 2025

This can be fixed by editing

conversions[i] === value && return # ignore same conversion

to

conversions[i] == value && return

and adding

Base.:(==)(a::DateTimeConversion, b::DateTimeConversion) = a.type[] == b.type[]

But this seems like a change with too many consequences to just make a PR

@rdboyes rdboyes linked a pull request Feb 17, 2025 that will close this issue
1 task
@rdboyes
Copy link
Author

rdboyes commented Feb 17, 2025

Since I have a working fix that seems to pass all tests, I have submitted a PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug units aka dim converts
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants