From 0db321aeccb953f152a97da9936e104db59c8a75 Mon Sep 17 00:00:00 2001 From: yha Date: Mon, 20 Jul 2020 00:12:47 +0300 Subject: [PATCH] Support offset vectors as fillrange and ribbon --- src/examples.jl | 1 + src/utils.jl | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/examples.jl b/src/examples.jl index f0884b20..814083c2 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -885,6 +885,7 @@ const _examples = PlotExample[ sv = SVector{10}(rand(10)) ov = OffsetVector(rand(10), -2) plot([sv, ov], label = ["StaticArray" "OffsetArray"]) + plot!(3ov, ribbon=ov, label="OffsetArray ribbon") end end, ], diff --git a/src/utils.jl b/src/utils.jl index 701b13e0..0fd11167 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -126,8 +126,8 @@ isnothing(x) = false _cycle(wrapper::InputWrapper, idx::Int) = wrapper.obj _cycle(wrapper::InputWrapper, idx::AVec{Int}) = wrapper.obj -_cycle(v::AVec, idx::Int) = v[mod1(idx, length(v))] -_cycle(v::AMat, idx::Int) = size(v,1) == 1 ? v[1, mod1(idx, size(v,2))] : v[:, mod1(idx, size(v,2))] +_cycle(v::AVec, idx::Int) = v[mod(idx, axes(v,1))] +_cycle(v::AMat, idx::Int) = size(v,1) == 1 ? v[end, mod(idx, axes(v,2))] : v[:, mod(idx, axes(v,2))] _cycle(v, idx::Int) = v _cycle(v::AVec, indices::AVec{Int}) = map(i -> _cycle(v,i), indices) @@ -362,10 +362,10 @@ end ok(tup::Tuple) = ok(tup...) # compute one side of a fill range from a ribbon -function make_fillrange_side(y, rib) - frs = zeros(length(y)) - for (i, (yi, ri)) in enumerate(zip(y, Base.Iterators.cycle(rib))) - frs[i] = yi + ri +function make_fillrange_side(y::AVec, rib) + frs = zeros(axes(y)) + for (i, yi) in pairs(y) + frs[i] = yi + _cycle(rib,i) end frs end