From 124d2d6aa31536636362d1e0ae962e28c9571064 Mon Sep 17 00:00:00 2001 From: t-bltg Date: Sun, 4 Jul 2021 15:48:16 +0200 Subject: [PATCH] issue warning only once - apply to other backends --- src/backends/gr.jl | 10 +++++----- src/backends/pgfplotsx.jl | 2 +- src/backends/plotly.jl | 2 +- src/backends/pyplot.jl | 2 +- src/utils.jl | 21 +++++++++++---------- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/backends/gr.jl b/src/backends/gr.jl index ca31f3d3..d287d88e 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -355,9 +355,9 @@ end # draw ONE symbol marker function gr_draw_marker(series, xi, yi, clims, i, msize, strokewidth, shape::Symbol) - GR.setborderwidth(strokewidth); - gr_set_bordercolor(get_markerstrokecolor(series, i)); - gr_set_markercolor(get_markercolor(series, clims, i)); + GR.setborderwidth(strokewidth) + gr_set_bordercolor(get_markerstrokecolor(series, i)) + gr_set_markercolor(get_markercolor(series, clims, i)) gr_set_transparency(get_markeralpha(series, i)) GR.setmarkertype(gr_markertype(shape)) GR.setmarkersize(0.3msize / gr_nominal_size(series)) @@ -1717,7 +1717,7 @@ end function gr_draw_segments(series, x, y, fillrange, clims) st = series[:seriestype] if x !== nothing && length(x) > 1 - segments = series_segments(series, st) + segments = series_segments(series, st; check=true) # do area fill if fillrange !== nothing GR.setfillintstyle(GR.INTSTYLE_SOLID) @@ -1754,7 +1754,7 @@ end function gr_draw_segments_3d(series, x, y, z, clims) if series[:seriestype] === :path3d && length(x) > 1 lz = series[:line_z] - segments = series_segments(series, :path3d) + segments = series_segments(series, :path3d; check=true) for segment in segments i, rng = segment.attr_index, segment.range lc = get_linecolor(series, clims, i) diff --git a/src/backends/pgfplotsx.jl b/src/backends/pgfplotsx.jl index 438c007e..504f96e0 100644 --- a/src/backends/pgfplotsx.jl +++ b/src/backends/pgfplotsx.jl @@ -327,7 +327,7 @@ end function pgfx_add_series!(::Val{:path}, axis, series_opt, series, series_func, opt) # treat segments - segments = collect(series_segments(series, series[:seriestype])) + segments = collect(series_segments(series, series[:seriestype]; check=true)) sf = opt[:fillrange] for (k, segment) in enumerate(segments) i, rng = segment.attr_index, segment.range diff --git a/src/backends/plotly.jl b/src/backends/plotly.jl index 457db10b..edc9ced9 100644 --- a/src/backends/plotly.jl +++ b/src/backends/plotly.jl @@ -663,7 +663,7 @@ function plotly_series(plt::Plot, series::Series) end function plotly_series_shapes(plt::Plot, series::Series, clims) - segments = series_segments(series) + segments = series_segments(series; check=true) plotattributes_outs = Vector{KW}(undef, length(segments)) # TODO: create a plotattributes_out for each polygon diff --git a/src/backends/pyplot.jl b/src/backends/pyplot.jl index 5e9da1e4..f46de620 100644 --- a/src/backends/pyplot.jl +++ b/src/backends/pyplot.jl @@ -442,7 +442,7 @@ function py_add_series(plt::Plot{PyPlotBackend}, series::Series) # end # push!(handles, handle) # else - for (k, segment) in enumerate(series_segments(series, st)) + for (k, segment) in enumerate(series_segments(series, st; check=true)) i, rng = segment.attr_index, segment.range handle = ax."plot"((arg[rng] for arg in xyargs)...; label = k == 1 ? series[:label] : "", diff --git a/src/utils.jl b/src/utils.jl index ffbe5468..e8daeada 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -75,22 +75,23 @@ function iter_segments(args...) NaNSegmentsIterator(tup, n1, n2) end -function series_segments(series::Series, seriestype::Symbol = :path) +function series_segments(series::Series, seriestype::Symbol=:path; check=false) x, y, z = series[:x], series[:y], series[:z] (x === nothing || isempty(x)) && return UnitRange{Int}[] args = RecipesPipeline.is3d(series) ? (x, y, z) : (x, y) nan_segments = collect(iter_segments(args...)) - scales = :xscale, :yscale, :zscale - for (n, s) ∈ enumerate(args) - scale = get(series, scales[n], :identity) - if scale ∈ _logScales - for (i, v) ∈ enumerate(s) - if v <= 0 - msg = "Invalid negative or zero value $v found at serie index $i for $(scale) based $(scales[n])" - @warn msg - @debug msg exception=(DomainError(v), stacktrace()) + if check + scales = :xscale, :yscale, :zscale + for (n, s) ∈ enumerate(args) + scale = get(series, scales[n], :identity) + if scale ∈ _logScales + for (i, v) ∈ enumerate(s) + if v <= 0 + @warn "Invalid negative or zero value $v found at series index $i for $(scale) based $(scales[n])" + @debug "" exception=(DomainError(v), stacktrace()) + end end end end