From a24fb93ab127c77b509d781f1d0772e8472fc17f Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Wed, 12 Jan 2022 15:30:52 +0100 Subject: [PATCH] Move fillrange and ribbon logic from RecipesPipeline and add tests for default function (#4030) * add tests for default function * remove fillrange and ribbon handling from RecipesPipeline * adjust compat --- Project.toml | 2 +- src/consts.jl | 1 + src/pipeline.jl | 17 ++++++++++++++--- test/test_defaults.jl | 8 ++++++++ test/test_pipeline.jl | 11 +++++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 49b453af..23666c0d 100644 --- a/Project.toml +++ b/Project.toml @@ -48,7 +48,7 @@ NaNMath = "0.3" PlotThemes = "2" PlotUtils = "1" RecipesBase = "1.2" -RecipesPipeline = "0.3.5, 0.4" +RecipesPipeline = "0.5" Reexport = "0.2, 1.0" Requires = "1" Scratch = "1" diff --git a/src/consts.jl b/src/consts.jl index c94f7aab..5d0996e4 100644 --- a/src/consts.jl +++ b/src/consts.jl @@ -50,6 +50,7 @@ const _magic_axis_args = [:axis, :tickfont, :guidefont, :grid, :minorgrid] const _magic_subplot_args = [:title_font, :legend_font, :legend_title_font, :plot_title_font, :colorbar_titlefont] const _magic_series_args = [:line, :marker, :fill] +const _all_magic_args = sort(union(_magic_axis_args, _magic_series_args, _magic_subplot_args)) const _all_axis_args = sort(union([_axis_args; _magic_axis_args])) const _all_subplot_args = sort(union([_subplot_args; _magic_subplot_args])) diff --git a/src/pipeline.jl b/src/pipeline.jl index 8c22cdc5..baaef6ab 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -69,7 +69,7 @@ function _preprocess_userrecipe(kw::AKW) _add_markershape(kw) # map marker_z if it's a Function - if isa(get(kw, :marker_z, nothing), Function) + if isa(get(kw, :marker_z, default(:marker_z)), Function) # TODO: should this take y and/or z as arguments? kw[:marker_z] = isa(kw[:z], Nothing) ? map(kw[:marker_z], kw[:x], kw[:y]) : @@ -77,15 +77,24 @@ function _preprocess_userrecipe(kw::AKW) end # map line_z if it's a Function - if isa(get(kw, :line_z, nothing), Function) + if isa(get(kw, :line_z, default(:line_z)), Function) kw[:line_z] = isa(kw[:z], Nothing) ? map(kw[:line_z], kw[:x], kw[:y]) : map(kw[:line_z], kw[:x], kw[:y], kw[:z]) end + rib = get(kw, :ribbon, default(:ribbon)) + fr = get(kw, :fillrange, default(:fillrange)) + # map ribbon if it's a Function + if rib isa Function + kw[:ribbon] = map(rib, kw[:x]) + end # convert a ribbon into a fillrange - if get(kw, :ribbon, nothing) !== nothing + if rib !== nothing make_fillrange_from_ribbon(kw) + # map fillrange if it's a Function + elseif fr !== nothing && fr isa Function + kw[:fillrange] = map(fr, kw[:x]) end return end @@ -154,6 +163,7 @@ function RecipesPipeline.process_sliced_series_attributes!(plt::Plots.Plot, kw_l kw_list[ind - 1] = tmp end end + return nothing end @@ -418,3 +428,4 @@ function _add_the_series(plt, sp, plotattributes) _series_added(plt, series) _update_subplot_colorbars(sp) end + diff --git a/test/test_defaults.jl b/test/test_defaults.jl index 2f1971f5..38cc9c29 100644 --- a/test/test_defaults.jl +++ b/test/test_defaults.jl @@ -12,6 +12,14 @@ end empty!(PLOTS_DEFAULTS) Plots.__init__() +@testset "default" begin + default(fillrange=0) + @test Plots._series_defaults[:fillrange] == 0 + pl = plot(1:5) + @test pl[1][1][:fillrange] == 0 + default() +end + @testset "Legend defaults" begin p = plot() @test p[1][:legend_font_family] == "sans-serif" diff --git a/test/test_pipeline.jl b/test/test_pipeline.jl index ac6876f8..1bf3ae06 100644 --- a/test/test_pipeline.jl +++ b/test/test_pipeline.jl @@ -17,3 +17,14 @@ end @test all(RecipesPipeline.get_axis_limits(p1, :x) .== x) @test all(RecipesPipeline.get_axis_limits(p2, :x) .== x) end + +@testset "Slicing" begin + + @test plot(1:5, fillrange = 0)[1][1][:fillrange] == 0 + data4 = rand(4,4) + for i in axes(data4, 1) + @test plot(data4, fillrange = 0)[1][i][:fillrange] == 0 + @test plot(data4, fillrange = [1, 2])[1][i][:fillrange] == [1.0, 2.0] + @test plot(data4, fillrange = [1 2])[1][i][:fillrange] == (iseven(i) ? 2 : 1) + end +end