MakieOrg / Makie.jl

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

Error when saving a plot with a label with a LaTeX fraction #3364

Closed adamslc closed 1 week ago

adamslc commented 10 months ago

An assertion error is thrown when saving a plot with a LaTeX fraction as a label:


(makie) pkg> st
Status `~/tmp/makie/Project.toml`
  [13f3f980] CairoMakie v0.10.12

julia> using CairoMakie

julia> fig = Figure()

julia> ax = Axis(fig[1, 1])
Axis with 0 plots:

julia> ax.xlabel = L"\frac{a}{b}"
L"$\frac{a}{b}$"

julia> save("test.png", fig)
ERROR: AssertionError: length(positions) == length(colors)
Stacktrace:
  [1] draw_multi(primitive::LineSegments{Tuple{Vector{Point{2, Float32}}}}, ctx::Cairo.CairoContext, positions::Vector{Vec{2, Float32}}, colors::Vector{ColorTypes.RGBA{Float32}}, linewidths::Vector{Float32}, dash::Nothing)
    @ CairoMakie ~/.julia/packages/CairoMakie/VqiwS/src/primitives.jl:164
  [2] draw_atomic(scene::Scene, screen::CairoMakie.Screen{CairoMakie.IMAGE}, primitive::Union{LineSegments, Lines})
    @ CairoMakie ~/.julia/packages/CairoMakie/VqiwS/src/primitives.jl:64
  [3] draw_plot(scene::Scene, screen::CairoMakie.Screen{CairoMakie.IMAGE}, primitive::LineSegments{Tuple{Vector{Point{2, Float32}}}})
    @ CairoMakie ~/.julia/packages/CairoMakie/VqiwS/src/infrastructure.jl:131
  [4] cairo_draw(screen::CairoMakie.Screen{CairoMakie.IMAGE}, scene::Scene)
    @ CairoMakie ~/.julia/packages/CairoMakie/VqiwS/src/infrastructure.jl:51
  [5] backend_show(screen::CairoMakie.Screen{CairoMakie.IMAGE}, io::IOStream, #unused#::MIME{Symbol("image/png")}, scene::Scene)
    @ CairoMakie ~/.julia/packages/CairoMakie/VqiwS/src/display.jl:111
  [6] (::Makie.var"#1194#1195"{Module, Bool, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, Figure, MIME{Symbol("image/png")}, Scene})(io::IOStream)
    @ Makie ~/.julia/packages/Makie/RgxaV/src/display.jl:325
  [7] open(::Makie.var"#1194#1195"{Module, Bool, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, Figure, MIME{Symbol("image/png")}, Scene}, ::String, ::Vararg{String}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./io.jl:395
  [8] open
    @ ./io.jl:392 [inlined]
  [9] save(file::FileIO.File{FileIO.DataFormat{:PNG}, String}, fig::Figure; resolution::Tuple{Int64, Int64}, backend::Module, update::Bool, screen_config::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Makie ~/.julia/packages/Makie/RgxaV/src/display.jl:319
 [10] save(file::FileIO.File{FileIO.DataFormat{:PNG}, String}, fig::Figure)
    @ Makie ~/.julia/packages/Makie/RgxaV/src/display.jl:297
 [11] save(filename::String, fig::Figure; args::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Makie ~/.julia/packages/Makie/RgxaV/src/display.jl:294
 [12] save(filename::String, fig::Figure)
    @ Makie ~/.julia/packages/Makie/RgxaV/src/display.jl:291
 [13] top-level scope
    @ REPL[8]:1

julia> versioninfo()
Julia Version 1.9.3
Commit bed2cd540a1 (2023-08-24 14:43 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: macOS (x86_64-apple-darwin22.4.0)
  CPU: 16 × Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-14.0.6 (ORCJIT, skylake)
  Threads: 1 on 16 virtual cores
gbruer15 commented 1 month ago

This error exists in the current version.

(jl_uGUFTy) pkg> st
Status `/tmp/jl_uGUFTy/Project.toml`
  [13f3f980] CairoMakie v0.12.5

julia> using CairoMakie

julia> fig = Figure(title=L"hello")

julia> fig = Figure()

julia> ax = Axis(fig[1, 1], title=L"hello")
Axis with 0 plots:

julia> fig

julia> ax.xlabel = L"\frac{a}{b}"
L"$\frac{a}{b}$"

julia> fig
Error showing value of type Figure:
ERROR: AssertionError: length(positions) == length(colors)
Stacktrace:
  [1] draw_multi(primitive::LineSegments{Tuple{Vector{Point{2, Float32}}}}, ctx::Cairo.CairoContext, positions::Vector{Vec{2, Float32}}, colors::Vector{ColorTypes.RGBA{Float32}}, linewidths::Vector{Float32}, indices::Vector{Int64}, dash::Nothing)
    @ CairoMakie ~/.julia/packages/CairoMakie/wKKMp/src/primitives.jl:263
  [2] draw_atomic(scene::Scene, screen::CairoMakie.Screen{CairoMakie.IMAGE}, primitive::Union{Lines, LineSegments})
    @ CairoMakie ~/.julia/packages/CairoMakie/wKKMp/src/primitives.jl:157
  [3] draw_plot(scene::Scene, screen::CairoMakie.Screen{CairoMakie.IMAGE}, primitive::LineSegments{Tuple{Vector{Point{2, Float32}}}})
    @ CairoMakie ~/.julia/packages/CairoMakie/wKKMp/src/infrastructure.jl:129
  [4] cairo_draw(screen::CairoMakie.Screen{CairoMakie.IMAGE}, scene::Scene)
    @ CairoMakie ~/.julia/packages/CairoMakie/wKKMp/src/infrastructure.jl:51
  [5] display(screen::CairoMakie.Screen{CairoMakie.IMAGE}, scene::Scene; connect::Bool)
    @ CairoMakie ~/.julia/packages/CairoMakie/wKKMp/src/display.jl:43
  [6] display(screen::CairoMakie.Screen{CairoMakie.IMAGE}, scene::Scene)
    @ CairoMakie ~/.julia/packages/CairoMakie/wKKMp/src/display.jl:40
  [7] display(figlike::Figure; backend::Module, inline::MakieCore.Automatic, update::Bool, screen_config::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Makie ~/.julia/packages/Makie/rEu75/src/display.jl:166
  [8] display(figlike::Figure)
    @ Makie ~/.julia/packages/Makie/rEu75/src/display.jl:130
  [9] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
 [10] invokelatest
    @ ./essentials.jl:726 [inlined]
 [11] print_response(errio::IO, response::Any, show_value::Bool, have_color::Bool, specialdisplay::Union{Nothing, AbstractDisplay})
    @ REPL ~/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/share/julia/stdlib/v1.8/REPL/src/REPL.jl:296
 [12] (::REPL.var"#45#46"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
    @ REPL ~/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/share/julia/stdlib/v1.8/REPL/src/REPL.jl:278
 [13] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL ~/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/share/julia/stdlib/v1.8/REPL/src/REPL.jl:521
 [14] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
    @ REPL ~/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/share/julia/stdlib/v1.8/REPL/src/REPL.jl:276
 [15] (::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 ~/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/share/julia/stdlib/v1.8/REPL/src/REPL.jl:857
 [16] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
 [17] invokelatest
    @ ./essentials.jl:726 [inlined]
 [18] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
    @ REPL.LineEdit ~/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/share/julia/stdlib/v1.8/REPL/src/LineEdit.jl:2510
 [19] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
    @ REPL ~/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/share/julia/stdlib/v1.8/REPL/src/REPL.jl:1248
 [20] (::REPL.var"#49#54"{REPL.LineEditREPL, REPL.REPLBackendRef})()
    @ REPL ./task.jl:484
ffreyer commented 1 week ago

Closing as duplicate of #3208