Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ext/ColorfyDistributionsExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ Colorfy.nominal(values::AbstractVector{<:ContinuousUnivariateDistribution}) = Co

Colorfy.nominal(values::AbstractVector{<:DiscreteUnivariateDistribution}) = Colorfy.nominal(map(mode, values))

Colorfy.levels(values::AbstractVector{<:ContinuousUnivariateDistribution}) = Int[]
Colorfy.levels(values::AbstractVector{<:ContinuousUnivariateDistribution}) = []

Colorfy.levels(values::AbstractVector{<:Dirac}) = 1:1

Expand Down
4 changes: 2 additions & 2 deletions ext/ColorfyUnitfulExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
module ColorfyUnitfulExt

using Unitful: Quantity
using Unitful: ustrip
using Unitful: ustrip, unit

import Colorfy

Expand All @@ -14,6 +14,6 @@ Colorfy.repr(values::AbstractVector{<:Quantity}, colorscheme, colorrange) =

Colorfy.nominal(values::AbstractVector{<:Quantity}) = Colorfy.nominal(map(ustrip, values))

Colorfy.levels(values::AbstractVector{<:Quantity}) = Int[]
Colorfy.levels(values::AbstractVector{<:Quantity}) = Colorfy.levels(Colorfy.nominal(values)) .* unit(first(values))

end
14 changes: 11 additions & 3 deletions src/levels.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,19 @@ function levels(values)
end
end

levels(values::AbstractVector{<:Number}) = Int[]
levels(values::AbstractVector{<:AbstractFloat}) = []

levels(values::AbstractVector{<:Date}) = Int[]
levels(values::AbstractVector{<:Integer}) = sort(unique(values))

levels(values::AbstractVector{<:DateTime}) = Int[]
levels(values::AbstractVector{<:AbstractChar}) = sort(unique(values))

levels(values::AbstractVector{<:Date}) = []

levels(values::AbstractVector{<:DateTime}) = []

levels(values::AbstractVector{<:Symbol}) = sort(unique(values))

levels(values::AbstractVector{<:AbstractString}) = sort(unique(values))

"""
nlevels(values)
Expand Down
6 changes: 5 additions & 1 deletion src/nominal.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function nominal(values)
end
end

function nominal(values::AbstractVector{<:Number})
function nominal(values::AbstractVector{<:AbstractFloat})
isna(v) = isnan(v) || isinf(v)
if any(isna, values)
iinds = findall(isna, values)
Expand All @@ -41,6 +41,10 @@ function nominal(values::AbstractVector{<:Number})
end
end

nominal(values::AbstractVector{<:Integer}) = values

nominal(values::AbstractVector{<:AbstractChar}) = map(Int, values)

nominal(values::AbstractVector{<:Date}) = nominal(map(DateTime, values))

nominal(values::AbstractVector{<:DateTime}) = map(datetime2unix, values)
18 changes: 13 additions & 5 deletions src/repr.jl
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ function repr(values, colorscheme, colorrange)
end
end

function repr(values::AbstractVector{<:Number}, colorscheme, colorrange)
function repr(values::AbstractVector{<:AbstractFloat}, colorscheme, colorrange)
isna(v) = isnan(v) || isinf(v)
if any(isna, values)
iinds = findall(isna, values)
Expand All @@ -39,12 +39,20 @@ function repr(values::AbstractVector{<:Number}, colorscheme, colorrange)
end
end

repr(values::AbstractVector{<:Colorant}, colorscheme, colorrange) = values

repr(values::AbstractVector{<:Symbol}, colorscheme, colorrange) = repr(map(string, values), colorscheme, colorrange)
repr(values::AbstractVector{<:Integer}, colorscheme, colorrange) = get(colorscheme, float(values), colorrange)

repr(values::AbstractVector{<:AbstractString}, colorscheme, colorrange) = map(v -> parse(Colorant, v), values)
repr(values::AbstractVector{<:Char}, colorscheme, colorrange) = repr(nominal(values), colorscheme, colorrange)

repr(values::AbstractVector{<:Date}, colorscheme, colorrange) = repr(nominal(values), colorscheme, colorrange)

repr(values::AbstractVector{<:DateTime}, colorscheme, colorrange) = repr(nominal(values), colorscheme, colorrange)

# ---------------------
# COLOR SPECIFICATIONS
# ---------------------

repr(values::AbstractVector{<:Colorant}, colorscheme, colorrange) = values

repr(values::AbstractVector{<:Symbol}, colorscheme, colorrange) = repr(map(string, values), colorscheme, colorrange)

repr(values::AbstractVector{<:AbstractString}, colorscheme, colorrange) = map(v -> parse(Colorant, v), values)
26 changes: 25 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -90,15 +90,31 @@ using Test
@test colors == coloralpha.(result, 1)
@test isempty(Colorfy.levels(values))

values = rand(Int, 10)
colors = colorfy(values)
result = get(colorschemes[:viridis], float(values), :extrema)
@test colors == coloralpha.(result, 1)
@test Colorfy.nominal(values) == values
@test Colorfy.levels(values) == sort(unique(values))

values = rand(Char, 10)
colors = colorfy(values)
result = get(colorschemes[:viridis], float(map(Int, values)), :extrema)
@test colors == coloralpha.(result, 1)
@test Colorfy.nominal(values) == map(Int, values)
@test Colorfy.levels(values) == sort(unique(values))

values = ["red", "green", "blue", "white", "black"]
colors = colorfy(values)
result = [colorant"red", colorant"green", colorant"blue", colorant"white", colorant"black"]
@test colors == coloralpha.(result, 1)
@test Colorfy.levels(values) == sort(unique(values))

values = [:red, :green, :blue, :white, :black]
colors1 = colorfy(values)
colors2 = colorfy(values, alpha=0.5)
@test colors2 == coloralpha.(colors1, 0.5)
@test Colorfy.levels(values) == sort(unique(values))

values = [:red, :green, :blue, :white, :black]
alphas = rand(5)
Expand Down Expand Up @@ -135,7 +151,7 @@ using Test
values = Union{Missing,Int}[1, 2, 3, 4, 5]
@test colorfy(values) == colorfy([1, 2, 3, 4, 5])
@test Colorfy.nominal(values) == [1, 2, 3, 4, 5]
@test isempty(Colorfy.levels(values))
@test Colorfy.levels(values) == [1, 2, 3, 4, 5]

# Vector{<:AbstractFloat} with NaN and Inf values
values = [0.1, 0.2, 0.3, NaN, Inf, -Inf]
Expand Down Expand Up @@ -278,6 +294,14 @@ using Test
@test colorfy(values, colorrange=(0.25u"m", 0.75u"m")) == colorfy(ustrip.(values), colorrange=(0.25, 0.75))
@test Colorfy.nominal(values) == ustrip.(values)
@test isempty(Colorfy.levels(values))

values = rand(Int, 10) * u"m"
@test colorfy(values) == colorfy(ustrip.(values))
@test colorfy(values, alpha=0.5) == colorfy(ustrip.(values), alpha=0.5)
@test colorfy(values, colorrange=(0.25, 0.75)) == colorfy(ustrip.(values), colorrange=(0.25, 0.75))
@test colorfy(values, colorrange=(0.25u"m", 0.75u"m")) == colorfy(ustrip.(values), colorrange=(0.25, 0.75))
@test Colorfy.nominal(values) == ustrip.(values)
@test Colorfy.levels(values) == sort(unique(values))
end

@testset "CoDa" begin
Expand Down