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

[BUG] Crash on annotate with Unitful #4366

Closed
ivan-boikov opened this issue Sep 21, 2022 · 11 comments · Fixed by #4371
Closed

[BUG] Crash on annotate with Unitful #4366

ivan-boikov opened this issue Sep 21, 2022 · 11 comments · Fixed by #4371

Comments

@ivan-boikov
Copy link
Contributor

ivan-boikov commented Sep 21, 2022

Details

Using annotate! with Unitful coordinates fails on GR, InspectDR, PGFPlotsX and UnicodePlots:

Plots.plot([0,1]u"s", [0,2]u"m")
annotate!([0.5]u"s", [1]u"m", text("annotation"))

on PlotlyJS no crash, but annotation ends up on top left corner of plot. Without units no crashes on all backends, but it is assumed that units are the same as in plot() call, i.e. here annotation will be at (0.5s,1m)

Plots.plot([0,1]u"s", [0,2]u"m")
annotate!([0.5], [1], text("annotation"))

Not sure if it belongs here, Unitful or UnitfulRecipes though. Or if I should split the report per backend.

GR stacktrace:

ERROR: MethodError: no method matching wctondc(::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}}, ::Quantity{Float64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}})
Stacktrace:
[1] gr_display(sp::Plots.Subplot{Plots.GRBackend}, w::Measures.AbsoluteLength, h::Measures.AbsoluteLength, viewport_canvas::Vector{Float64}) 
    @ Plots ~/.local/share/julia/packages/Plots/FCUr0/src/backends/gr.jl:1050
[2] gr_display(plt::Plots.Plot{Plots.GRBackend}, fmt::String)
    @ Plots ~/.local/share/julia/packages/Plots/FCUr0/src/backends/gr.jl:699
[3] gr_display
    @ ~/.local/share/julia/packages/Plots/FCUr0/src/backends/gr.jl:665 [inlined]
[4] _display(plt::Plots.Plot{Plots.GRBackend}) 
    @ Plots ~/.local/share/julia/packages/Plots/FCUr0/src/backends/gr.jl:2250
[5] display(#unused#::Plots.PlotsDisplay, plt::Plots.Plot{Plots.GRBackend})
    @ Plots ~/.local/share/julia/packages/Plots/FCUr0/src/output.jl:164
[6] display(x::Any)
    @ Base.Multimedia ./multimedia.jl:328
[7] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
[8] invokelatest
    @ ./essentials.jl:726 [inlined]
[9] print_response(errio::IO, response::Any, show_value::Bool, have_color::Bool, specialdisplay::Union{Nothing, AbstractDisplay})
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:296
[10] (::REPL.var"#45#46"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:278
[11] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:521
[12] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:276
[13] (::REPL.var"#do_respond#66"{Bool, Bool, REPL.var"#77#87"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:857
[14] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
[15] invokelatest
    @ ./essentials.jl:726 [inlined]
[16] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
    @ REPL.LineEdit ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/LineEdit.jl:2510
[17] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:1248
[18] (::REPL.var"#49#54"{REPL.LineEditREPL, REPL.REPLBackendRef})()
    @ REPL ./task.jl:484

UnicodePlots:

ERROR: DimensionError: -0.03 and 0.5 s are not dimensionally compatible.
Stacktrace:
[1] _lt
    @ ~/.local/share/julia/packages/Unitful/ApCuY/src/quantities.jl:272 [inlined]
[2] <(x::Quantity{Float64, NoDims, Unitful.FreeUnits{(), NoDims, nothing}}, y::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}})
    @ Unitful ~/.local/share/julia/packages/Unitful/ApCuY/src/quantities.jl:262
[3] <(x::Float64, y::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}})
    @ Unitful ~/.local/share/julia/packages/Unitful/ApCuY/src/quantities.jl:264
[4] <=(x::Float64, y::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}})
    @ Base ./operators.jl:405
[5] valid_x
    @ ~/.local/share/julia/packages/UnicodePlots/qsVLH/src/canvas.jl:35 [inlined]
[6] annotate!(c::UnicodePlots.BrailleCanvas{typeof(identity), typeof(identity)}, x::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}}, y::Quantity{Int64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}}, text::String, color::Symbol; halign::Symbol, valign::Symbol)
    @ UnicodePlots ~/.local/share/julia/packages/UnicodePlots/qsVLH/src/canvas.jl:326
[7] annotate!(plot::UnicodePlots.Plot{UnicodePlots.BrailleCanvas{typeof(identity), typeof(identity)}, Val{false}, Bool}, x::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}}, y::Quantity{Int64, 𝐋, Unitful.FreeUnits{(m,), 𝐋, nothing}}, text::String; color::Symbol, kw::Base.Pairs{Symbol, Symbol, Tuple{Symbol, Symbol}, NamedTuple{(:halign, :valign), Tuple{Symbol, Symbol}}})
    @ UnicodePlots ~/.local/share/julia/packages/UnicodePlots/qsVLH/src/plot.jl:504
[8] _before_layout_calcs(plt::Plots.Plot{Plots.UnicodePlotsBackend})
    @ Plots ~/.local/share/julia/packages/Plots/FCUr0/src/backends/unicodeplots.jl:133
[9] prepare_output(plt::Plots.Plot{Plots.UnicodePlotsBackend})
    @ Plots ~/.local/share/julia/packages/Plots/FCUr0/src/plot.jl:240
[10] display(#unused#::Plots.PlotsDisplay, plt::Plots.Plot{Plots.UnicodePlotsBackend})
    @ Plots ~/.local/share/julia/packages/Plots/FCUr0/src/output.jl:163
[11] display(x::Any)
    @ Base.Multimedia ./multimedia.jl:328
[12] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
[13] invokelatest
    @ ./essentials.jl:726 [inlined]
[14] print_response(errio::IO, response::Any, show_value::Bool, have_color::Bool, specialdisplay::Union{Nothing, AbstractDisplay})
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:296
[15] (::REPL.var"#45#46"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:278
[16] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:521
[17] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:276
[18] (::REPL.var"#do_respond#66"{Bool, Bool, REPL.var"#77#87"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:857
[19] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
[20] invokelatest
    @ ./essentials.jl:726 [inlined]
[21] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
    @ REPL.LineEdit ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/LineEdit.jl:2510
[22] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
    @ REPL ~/soft/julia-1.8.1/share/julia/stdlib/v1.8/REPL/src/REPL.jl:1248
[23] (::REPL.var"#49#54"{REPL.LineEditREPL, REPL.REPLBackendRef})()
    @ REPL ./task.jl:484

Can upload stacktraces of PGFPlotsX and InspectDR if needed.

Backends

This bug occurs on ( insert x below )

Backend yes no untested
gr (default) x
pyplot x
plotlyjs x
pgfplotsx x
unicodeplots x
inspectdr x
gaston x

Versions

Plots.jl version: 1.33.0
Backend version:

PlotlyJS v0.18.8
PyPlot v2.11.0
UnicodePlots v3.1.2
PGFPlotsX v1.5.1
InspectDR v0.4.3

Output of versioninfo():

Julia Version 1.8.1
Commit afb6c60d69a (2022-09-06 15:09 UTC)
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 12 × AMD Ryzen 5 3600 6-Core Processor
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-13.0.1 (ORCJIT, znver2)
Threads: 1 on 12 virtual cores
Environment:
JULIA_DEPOT_PATH = /home/ivan/.local/share/julia:/home/ivan/.local/share/julia:/home/ivan/.local/share/julia:
@t-bltg
Copy link
Member

t-bltg commented Sep 21, 2022

Thanks for the report. I have slightly different results, so this might have to do with floating point numerics.

julia> using Unitful, Plots; unicodeplots()
julia> plot([0,1]u"s", [0,2]u"m")

ERROR: DimensionError: Inf and 0.0 s are not dimensionally compatible.
Stacktrace:
  [1] _isless
    @ [...]/Unitful/ApCuY/src/quantities.jl:272 [inlined]
  [2] isless(x::Quantity{Float64, NoDims, Unitful.FreeUnits{(), NoDims, nothing}}, y::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}})
    @ Unitful [...]/Unitful/ApCuY/src/quantities.jl:262
  [3] isless(x::Float64, y::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}})
    @ Unitful [...]/Unitful/ApCuY/src/quantities.jl:264
  [4] min(x::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}}, y::Float64)
    @ Base ./operators.jl:494
  [5] expand_extrema!(ex::Plots.Extrema, v::Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}})
    @ Plots [...]/Plots.jl/src/axes.jl:407
  [6] expand_extrema!(axis::Plots.Axis, v::Vector{Quantity{Float64, 𝐓, Unitful.FreeUnits{(s,), 𝐓, nothing}}})
    @ Plots [...]/Plots.jl/src/axes.jl:427
  [7] expand_extrema!(sp::Plots.Subplot{Plots.UnicodePlotsBackend}, plotattributes::RecipesPipeline.DefaultsDict)
    @ Plots [...]/Plots.jl/src/axes.jl:462
  [8] _expand_subplot_extrema(sp::Plots.Subplot{Plots.UnicodePlotsBackend}, plotattributes::RecipesPipeline.DefaultsDict, st::Symbol)
    @ Plots [...]/Plots.jl/src/pipeline.jl:421
  [9] add_series!(plt::Plots.Plot{Plots.UnicodePlotsBackend}, plotattributes::RecipesPipeline.DefaultsDict)
    @ Plots [...]/Plots.jl/src/pipeline.jl:364
 [10] _process_seriesrecipe(plt::Any, plotattributes::Any)
    @ RecipesPipeline [...]/RecipesPipeline/OXGmH/src/series_recipe.jl:46
 [11] _process_seriesrecipes!(plt::Any, kw_list::Any)
    @ RecipesPipeline [...]/RecipesPipeline/OXGmH/src/series_recipe.jl:27
 [12] recipe_pipeline!(plt::Any, plotattributes::Any, args::Any)
    @ RecipesPipeline [...]/RecipesPipeline/OXGmH/src/RecipesPipeline.jl:97
 [13] _plot!(plt::Plots.Plot, plotattributes::Any, args::Any)
    @ Plots [...]/Plots.jl/src/plot.jl:232
 [14] plot(::Any, ::Vararg{Any}; kw::Base.Pairs{Symbol, V, Tuple{Vararg{Symbol, N}}, NamedTuple{names, T}} where {V, N, names, T<:Tuple{Vararg{Any, N}}})
    @ Plots [...]/Plots.jl/src/plot.jl:107
 [15] plot(::Any, ::Any)
    @ Plots [...]/Plots.jl/src/plot.jl:98
 [16] top-level scope
    @ REPL[15]:1

@t-bltg
Copy link
Member

t-bltg commented Sep 21, 2022

Related: PainterQubits/Unitful.jl#455.

The "fix" is to use UnitfulRecipes, although admittedly the error message leaves you clueless:

julia> using Unitful, UnitfulRecipes, Plots; unicodeplots()
julia> plot([0,1]u"s", [0,2]u"m")
         ┌────────────────────────────────────────┐   
    2.06 │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠀│ y1
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
       m │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
   -0.06 │⠤⡷⠭⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤│   
         └────────────────────────────────────────┘   
         ⠀-0.03⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀s⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀1.03

@BeastyBlacksmith
Copy link
Member

That might be one reason to do #4114, actually we could just load it via Requires.jl.

@t-bltg
Copy link
Member

t-bltg commented Sep 22, 2022

Something like that in https://github.com/JuliaPlots/Plots.jl/blob/master/src/init.jl ?

@require Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" begin
   include("<the code contained in module `UnitfulRecipes`>")
   using .UnitfulRecipes
end

Looks feasible, since you need Unitful loaded for the data fed in Plots, when working with quantities.

It depends if @jw3126 would be in favor of archiving / deprecating UnitfulRecipes by integrating it in Plots.jl (#4114 (comment)).

@BeastyBlacksmith
Copy link
Member

BeastyBlacksmith commented Sep 22, 2022

We wouldn't neccessarily need to move the code. We could also do something like

@require Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" begin
    try
        @eval Main using UnitfulRecipes
    catch
        @warn "Plotting unitful quantities requires to have UnitfulRecipes installed."
    end
end

@t-bltg
Copy link
Member

t-bltg commented Sep 22, 2022

Won't this imply that each time your are loading Unitful + Plots, and do not have UnitfulRecipes installed, you get a warning ? I'd rather make it @debug.

@BeastyBlacksmith
Copy link
Member

I'd rather make it @debug

Maybe @info? People rarely run with debug logging enabled. But probably it's not the brightest idea anyways.

@t-bltg
Copy link
Member

t-bltg commented Sep 22, 2022

Even @info would be too spurious (people unaware of UnitfulRecipes will complain about this).

@ivan-boikov
Copy link
Contributor Author

ivan-boikov commented Sep 24, 2022

Pardon, I was not entirely clear about the situation. It happens with UnitfulRecipes and I have problem with annotate!, plot works fine.

Here's the full snippet to recreate behaviour

using Plots, PGFPlotsX, Plotly, PlotlyJS, InspectDR, UnicodePlots
using Unitful, UnitfulRecipes
gr() # or other backends I mentioned
Plots.plot([0,1]u"s", [0,1]u"m") # it works on all backends with UnitfulRecipes
Plots.annotate!([0.25]u"s", [0.5]u"m", text("annotation"))

Related: PainterQubits/Unitful.jl#455.

The "fix" is to use UnitfulRecipes, although admittedly the error message leaves you clueless:

julia> using Unitful, UnitfulRecipes, Plots; unicodeplots()
julia> plot([0,1]u"s", [0,2]u"m")
         ┌────────────────────────────────────────┐   
    2.06 │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠀│ y1
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
       m │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⠀⠀⠀⣀⠔⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⠀⠀⢀⠤⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
         │⠀⡇⠀⡠⠒⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│   
   -0.06 │⠤⡷⠭⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤│   
         └────────────────────────────────────────┘   
         ⠀-0.03⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀s⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀1.03

@t-bltg
Copy link
Member

t-bltg commented Sep 24, 2022

It happens with UnitfulRecipes and I have problem with annotate!

If you have UnitfulRecipes loaded, then this issue should be reported to https://github.com/jw3126/UnitfulRecipes.jl/issues instead.

@jw3126
Copy link
Contributor

jw3126 commented Sep 24, 2022

It depends if @jw3126 would be in favor of archiving / deprecating UnitfulRecipes by integrating it in Plots.jl (#4114 (comment)).

Sure I am open to moving UnitfulRecipes.jl into Plots.jl.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants