From 72428000ccc30cb4ca4419fb0bc33007b989e2f2 Mon Sep 17 00:00:00 2001 From: Nicholas Bauer Date: Tue, 26 Oct 2021 03:09:23 -0400 Subject: [PATCH] Moved clims into plot/series attributes (#3897) * Moved limits into plot/series attributes * Moved const to args --- src/args.jl | 2 ++ src/colorbars.jl | 19 +++++++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/args.jl b/src/args.jl index 89b8b858..389cbb68 100644 --- a/src/args.jl +++ b/src/args.jl @@ -89,6 +89,8 @@ const _allTypes = vcat( _3dTypes, ) +const _z_colored_series = [:contour, :contour3d, :heatmap, :histogram2d, :surface, :hexbin] + const _typeAliases = Dict{Symbol,Symbol}( :n => :none, :no => :none, diff --git a/src/colorbars.jl b/src/colorbars.jl index 14f79239..5131e269 100644 --- a/src/colorbars.jl +++ b/src/colorbars.jl @@ -5,27 +5,24 @@ process_clims(s::Union{Symbol,Nothing,Missing}) = ignorenan_extrema # don't specialize on ::Function otherwise python functions won't work process_clims(f) = f -const sp_clims = IdDict{Subplot,Tuple{Float64,Float64}}() -const series_clims = IdDict{Series,Tuple{Float64,Float64}}() - get_clims(sp::Subplot)::Tuple{Float64,Float64} = - haskey(sp_clims, sp) ? sp_clims[sp] : update_clims(sp) + haskey(sp.attr, :clims_calculated) ? sp[:clims_calculated] : update_clims(sp) get_clims(series::Series)::Tuple{Float64,Float64} = - haskey(series_clims, series) ? series_clims[series] : update_clims(series) - + haskey(series.plotattributes, :clims_calculated) ? + series[:clims_calculated]::Tuple{Float64,Float64} : update_clims(series) get_clims(sp::Subplot, series::Series)::Tuple{Float64,Float64} = series[:colorbar_entry] ? get_clims(sp) : get_clims(series) function update_clims(sp::Subplot, op = process_clims(sp[:clims]))::Tuple{Float64,Float64} zmin, zmax = Inf, -Inf for series in series_list(sp) - if series[:colorbar_entry] + if series[:colorbar_entry]::Bool zmin, zmax = _update_clims(zmin, zmax, update_clims(series, op)...) else update_clims(series, op) end end - return sp_clims[sp] = zmin <= zmax ? (zmin, zmax) : (NaN, NaN) + return sp[:clims_calculated] = zmin <= zmax ? (zmin, zmax) : (NaN, NaN) end """ @@ -36,10 +33,9 @@ values of the input. The value is stored as a series property, which is retrieve """ function update_clims(series::Series, op = ignorenan_extrema)::Tuple{Float64,Float64} zmin, zmax = Inf, -Inf - z_colored_series = (:contour, :contour3d, :heatmap, :histogram2d, :surface, :hexbin) # keeping this unrolled has higher performance - if series[:seriestype] ∈ z_colored_series && series[:z] !== nothing + if series[:seriestype] ∈ _z_colored_series && series[:z] !== nothing zmin, zmax = update_clims(zmin, zmax, series[:z], op) end if series[:line_z] !== nothing @@ -51,8 +47,7 @@ function update_clims(series::Series, op = ignorenan_extrema)::Tuple{Float64,Flo if series[:fill_z] !== nothing zmin, zmax = update_clims(zmin, zmax, series[:fill_z], op) end - - return series_clims[series] = zmin <= zmax ? (zmin, zmax) : (NaN, NaN) + return series[:clims_calculated] = zmin <= zmax ? (zmin, zmax) : (NaN, NaN) end update_clims(zmin, zmax, vals::AbstractSurface, op)::Tuple{Float64,Float64} =