Correctly typed vector for all number/missing or all string/missing input
This commit is contained in:
parent
03d57e690c
commit
3ea4c8d9ca
@ -7,7 +7,9 @@
|
|||||||
# note: returns meta information... mainly for use with automatic labeling from DataFrames for now
|
# note: returns meta information... mainly for use with automatic labeling from DataFrames for now
|
||||||
|
|
||||||
const FuncOrFuncs{F} = Union{F, Vector{F}, Matrix{F}}
|
const FuncOrFuncs{F} = Union{F, Vector{F}, Matrix{F}}
|
||||||
const DataPoint = Union{Number, AbstractString, Missing}
|
const MaybeNumber = Union{Number, Missing}
|
||||||
|
const MaybeString = Union{AbstractString, Missing}
|
||||||
|
const DataPoint = Union{MaybeNumber, MaybeString}
|
||||||
const SeriesData = Union{AVec{<:DataPoint}, Function, Surface, Volume}
|
const SeriesData = Union{AVec{<:DataPoint}, Function, Surface, Volume}
|
||||||
|
|
||||||
prepareSeriesData(x) = error("Cannot convert $(typeof(x)) to series data for plotting")
|
prepareSeriesData(x) = error("Cannot convert $(typeof(x)) to series data for plotting")
|
||||||
@ -15,8 +17,8 @@ prepareSeriesData(::Nothing) = nothing
|
|||||||
prepareSeriesData(s::SeriesData) = handlemissings(s)
|
prepareSeriesData(s::SeriesData) = handlemissings(s)
|
||||||
|
|
||||||
handlemissings(v) = v
|
handlemissings(v) = v
|
||||||
handlemissings(v::AbstractArray{Union{T,Missing}}) where T <: Number = replace(v, missing => NaN)
|
handlemissings(v::AbstractArray{<:MaybeNumber}) = replace(v, missing => NaN)
|
||||||
handlemissings(v::AbstractArray{Union{T,Missing}}) where T <: AbstractString = replace(v, missing => "")
|
handlemissings(v::AbstractArray{<:MaybeString}) = replace(v, missing => "")
|
||||||
handlemissings(s::Surface) = Surface(handlemissings(s.surf))
|
handlemissings(s::Surface) = Surface(handlemissings(s.surf))
|
||||||
handlemissings(v::Volume) = Volume(handlemissings(v.v), v.x_extents, v.y_extents, v.z_extents)
|
handlemissings(v::Volume) = Volume(handlemissings(v.v), v.x_extents, v.y_extents, v.z_extents)
|
||||||
|
|
||||||
@ -31,8 +33,10 @@ convertToAnyVector(v::AVec{<:DataPoint}, plotattributes) = Any[prepareSeriesData
|
|||||||
|
|
||||||
# list of things (maybe other vectors, functions, or something else)
|
# list of things (maybe other vectors, functions, or something else)
|
||||||
function convertToAnyVector(v::AVec, plotattributes)
|
function convertToAnyVector(v::AVec, plotattributes)
|
||||||
if all(x -> isa(x, Number) || ismissing(x), v) || all(x -> isa(x, AbstractString) || ismissing(x), v)
|
if all(x -> x isa MaybeNumber, v)
|
||||||
convertToAnyVector(convert.(DataPoint, v), plotattributes)
|
convertToAnyVector(Vector{MaybeNumber}(v), plotattributes)
|
||||||
|
elseif all(x -> x isa MaybeString, v)
|
||||||
|
convertToAnyVector(Vector{MaybeString}(v), plotattributes)
|
||||||
else
|
else
|
||||||
vcat((convertToAnyVector(vi, plotattributes) for vi in v)...)
|
vcat((convertToAnyVector(vi, plotattributes) for vi in v)...)
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user