Skip to content

Commit 0faba1d

Browse files
authored
Add support for color range with units (#27)
1 parent ca2d0b0 commit 0faba1d

File tree

3 files changed

+47
-13
lines changed

3 files changed

+47
-13
lines changed

ext/ColorfyUnitfulExt.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ function Colorfy.getcolors(colorfier::Colorfier{<:Values{Quantity}})
1414
Colorfy.getcolors(ucolorfier)
1515
end
1616

17+
Colorfy.ascolorrange(colorrange::NTuple{2,Quantity}) = Colorfy.ascolorrange(ustrip.(colorrange))
18+
1719
end

src/Colorfy.jl

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Colorfier(
3737
alphas=defaultalphas(values),
3838
colorscheme=defaultcolorscheme(values),
3939
colorrange=defaultcolorrange(values)
40-
) = Colorfier(values, asalphas(alphas, values), ascolorscheme(colorscheme), colorrange)
40+
) = Colorfier(values, asalphas(alphas, values), ascolorscheme(colorscheme), ascolorrange(colorrange))
4141

4242
"""
4343
colorfy(values; kwargs...)
@@ -131,6 +131,37 @@ Default color range for `values`.
131131
"""
132132
defaultcolorrange(_) = :extrema
133133

134+
"""
135+
Colorfy.asalphas(alphas, values)
136+
137+
Valid color alphas for a given `alphas` and `values`.
138+
"""
139+
asalphas(alpha, values) = fill(alpha, length(values))
140+
function asalphas(alphas::AbstractVector, values)
141+
if length(alphas) length(values)
142+
throw(ArgumentError("the number of alphas must be equal to the number of values"))
143+
end
144+
alphas
145+
end
146+
147+
"""
148+
Colorfy.ascolorscheme(colorscheme)
149+
150+
Valid `ColorScheme` object for a given `colorscheme`.
151+
"""
152+
ascolorscheme(colorscheme::Symbol) = colorschemes[colorscheme]
153+
ascolorscheme(colorscheme::AbstractString) = ascolorscheme(Symbol(colorscheme))
154+
ascolorscheme(colorscheme::ColorScheme) = colorscheme
155+
156+
"""
157+
Colorfy.ascolorrange(colorrange)
158+
159+
Valid color range, accepted by the `ColorSchemes.get` function, for a given `colorrange`.
160+
"""
161+
ascolorrange(colorrange::Symbol) = colorrange
162+
ascolorrange(colorrange::NTuple{2,T}) where {T<:Real} = colorrange
163+
ascolorrange(colorrange::NTuple{2,Real}) = promote(colorrange...)
164+
134165
"""
135166
Colorfy.colors(colorfier)
136167
@@ -197,18 +228,6 @@ end
197228
# HELPER FUNCTIONS
198229
# -----------------
199230

200-
ascolorscheme(name::Symbol) = colorschemes[name]
201-
ascolorscheme(name::AbstractString) = ascolorscheme(Symbol(name))
202-
ascolorscheme(scheme::ColorScheme) = scheme
203-
204-
asalphas(alpha, values) = fill(alpha, length(values))
205-
function asalphas(alphas::AbstractVector, values)
206-
if length(alphas) length(values)
207-
throw(ArgumentError("the number of alphas must be equal to the number of values"))
208-
end
209-
alphas
210-
end
211-
212231
nonmissingvec(x::AbstractVector{T}) where {T} = convert(AbstractVector{nonmissingtype(T)}, x)
213232

214233
function genvec(vecinds, vec, valinds, val, len)

test/runtests.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ using Test
3434
@test Colorfy.colorscheme(colorfier) == colorschemes[:grays]
3535
@test Colorfy.colorrange(colorfier) == :extrema
3636

37+
colorfier = Colorfier(values, colorrange=(0.25, 0.75))
38+
@test Colorfy.values(colorfier) == values
39+
@test Colorfy.alphas(colorfier) == fill(1, 10)
40+
@test Colorfy.colorscheme(colorfier) == colorschemes[:viridis]
41+
@test Colorfy.colorrange(colorfier) == (0.25, 0.75)
42+
43+
colorfier = Colorfier(values, colorrange=(0, 0.5))
44+
@test Colorfy.values(colorfier) == values
45+
@test Colorfy.alphas(colorfier) == fill(1, 10)
46+
@test Colorfy.colorscheme(colorfier) == colorschemes[:viridis]
47+
@test Colorfy.colorrange(colorfier) == (0.0, 0.5)
48+
3749
alphas = rand(10)
3850
colorfier = Colorfier(values; alphas, colorscheme=colorschemes[:grays], colorrange=(0.25, 0.75))
3951
@test Colorfy.values(colorfier) == values
@@ -163,5 +175,6 @@ using Test
163175
@test colorfy(values) == colorfy(ustrip.(values))
164176
@test colorfy(values, alphas=0.5) == colorfy(ustrip.(values), alphas=0.5)
165177
@test colorfy(values, colorrange=(0.25, 0.75)) == colorfy(ustrip.(values), colorrange=(0.25, 0.75))
178+
@test colorfy(values, colorrange=(0.25u"m", 0.75u"m")) == colorfy(ustrip.(values), colorrange=(0.25, 0.75))
166179
end
167180
end

0 commit comments

Comments
 (0)