AlgebraOfGraphics.jl icon indicating copy to clipboard operation
AlgebraOfGraphics.jl copied to clipboard

Cannot mix mapping and visual vector keyword parameters

Open knuesel opened this issue 3 years ago • 0 comments

For example, the following shows no output in IJulia:

df = (x=1:2, y=[5,10], s=["a", "b"])

draw(data(df) *
     mapping(:x, :y, color=:s) *
     visual(Scatter, marker='o', markersize=[20, 30]))

and attempting to save the figure as PNG gives the error

BoundsError: attempt to access 1-element Vector{Point{2, Float32}} at index [2]

Stacktrace
Stacktrace:
  [1] getindex
    @ ./array.jl:861 [inlined]
  [2] attr_broadcast_getindex(x::Vector{Point{2, Float32}}, i::Int64)
    @ Makie ~/.julia/packages/Makie/gQOQF/src/utilities/utilities.jl:142
  [3] _broadcast_getindex_evalf
    @ ./broadcast.jl:670 [inlined]
  [4] _broadcast_getindex
    @ ./broadcast.jl:643 [inlined]
  [5] (::Base.Broadcast.var"#29#30"{Base.Broadcast.Broadcasted{Base.Broadcast.Style{Tuple}, Nothing, typeof(Makie.attr_broadcast_getindex), Tuple{Tuple{Vector{Point{2, Float32}}, ColorTypes.RGBA{Float32}, Vector{Int64}, ColorTypes.RGBA{Float32}, Float32, Char, Vector{Vec{2, Float32}}, Quaternionf}, Int64}}})(k::Int64)
    @ Base.Broadcast ./broadcast.jl:1075
  [6] macro expansion
    @ ./ntuple.jl:74 [inlined]
  [7] ntuple
    @ ./ntuple.jl:69 [inlined]
  [8] copy
    @ ./broadcast.jl:1075 [inlined]
  [9] materialize(bc::Base.Broadcast.Broadcasted{Base.Broadcast.Style{Tuple}, Nothing, typeof(Makie.attr_broadcast_getindex), Tuple{Tuple{Vector{Point{2, Float32}}, ColorTypes.RGBA{Float32}, Vector{Int64}, ColorTypes.RGBA{Float32}, Float32, Char, Vector{Vec{2, Float32}}, Quaternionf}, Int64}})
    @ Base.Broadcast ./broadcast.jl:860
 [10] broadcast_foreach(::Function, ::Vector{Point{2, Float32}}, ::Vararg{Any})
    @ Makie ~/.julia/packages/Makie/gQOQF/src/utilities/utilities.jl:176
 [11] draw_atomic(scene::Scene, screen::CairoMakie.CairoScreen{Cairo.CairoSurfaceBase{UInt32}}, primitive::Scatter{Tuple{Vector{Point{2, Float32}}}})
    @ CairoMakie ~/.julia/packages/CairoMakie/h8f56/src/primitives.jl:187
 [12] draw_plot(scene::Scene, screen::CairoMakie.CairoScreen{Cairo.CairoSurfaceBase{UInt32}}, primitive::Scatter{Tuple{Vector{Point{2, Float32}}}})
    @ CairoMakie ~/.julia/packages/CairoMakie/h8f56/src/infrastructure.jl:240
 [13] cairo_draw(screen::CairoMakie.CairoScreen{Cairo.CairoSurfaceBase{UInt32}}, scene::Scene)
    @ CairoMakie ~/.julia/packages/CairoMakie/h8f56/src/infrastructure.jl:173
 [14] backend_show(x::CairoMakie.CairoBackend, io::IOContext{IOStream}, #unused#::MIME{Symbol("image/png")}, scene::Scene)
    @ CairoMakie ~/.julia/packages/CairoMakie/h8f56/src/infrastructure.jl:345
 [15] show(io::IOContext{IOStream}, m::MIME{Symbol("image/png")}, scene::Scene; update::Bool)
    @ Makie ~/.julia/packages/Makie/gQOQF/src/display.jl:113
 [16] (::Makie.var"#917#918"{Float64, Float64, Bool, DataType, Scene})(s::IOStream)
    @ Makie ~/.julia/packages/Makie/gQOQF/src/display.jl:252
 [17] open(::Makie.var"#917#918"{Float64, Float64, Bool, DataType, Scene}, ::String, ::Vararg{String}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./io.jl:330
 [18] open
    @ ./io.jl:328 [inlined]
 [19] save(file::FileIO.File{FileIO.DataFormat{:PNG}, String}, fig::Figure; resolution::Tuple{Int64, Int64}, pt_per_unit::Float64, px_per_unit::Float64, update::Bool)
    @ Makie ~/.julia/packages/Makie/gQOQF/src/display.jl:246
 [20] save
    @ ~/.julia/packages/Makie/gQOQF/src/display.jl:228 [inlined]
 [21] #save#40
    @ ~/.julia/packages/AlgebraOfGraphics/uTcZk/src/entries.jl:142 [inlined]
 [22] save(file::FileIO.File{FileIO.DataFormat{:PNG}, String}, fg::AlgebraOfGraphics.FigureGrid)
    @ AlgebraOfGraphics ~/.julia/packages/AlgebraOfGraphics/uTcZk/src/entries.jl:142
 [23] save(filename::String, fg::AlgebraOfGraphics.FigureGrid; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ AlgebraOfGraphics ~/.julia/packages/AlgebraOfGraphics/uTcZk/src/entries.jl:138
 [24] save(filename::String, fg::AlgebraOfGraphics.FigureGrid)
    @ AlgebraOfGraphics ~/.julia/packages/AlgebraOfGraphics/uTcZk/src/entries.jl:138
 [25] top-level scope
    @ In[18]:7
 [26] eval
    @ ./boot.jl:373 [inlined]
 [27] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1196

It works fine if the color parameter of mapping is removed:

draw(data(df) *
     mapping(:x, :y) *
     visual(Scatter, marker='o', markersize=[20, 30]))

It also works if the markersize parameter of visual is removed, or if a scalar is given instead of a vector.

knuesel avatar Jan 25 '22 09:01 knuesel