From 7c257a09f63c2b73e80eced4e77d15c3f40f688a Mon Sep 17 00:00:00 2001 From: Pietro Vertechi Date: Tue, 13 Mar 2018 09:18:32 -0600 Subject: [PATCH] Partially address #1409: group with named tuples (#1429) * group with named tuples * comma --- src/args.jl | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/args.jl b/src/args.jl index 0a06b64a..534210ad 100644 --- a/src/args.jl +++ b/src/args.jl @@ -1012,15 +1012,28 @@ function extractGroupArgs(v::AVec, args...; legendEntry = string) GroupBy(map(legendEntry, groupLabels), groupIds) end -legendEntryFromTuple(ns::Tuple) = string(("$n " for n in ns)...) +legendEntryFromTuple(ns::Tuple) = join(ns, ' ') # this is when given a tuple of vectors of values to group by function extractGroupArgs(vs::Tuple, args...) - (vs == ()) && return GroupBy([""], [1:size(args[1],1)]) - v = collect(zip(vs...)) + isempty(vs) && return GroupBy([""], [1:size(args[1],1)]) + v = map(tuple, vs...) extractGroupArgs(v, args...; legendEntry = legendEntryFromTuple) end +# allow passing NamedTuples for a named legend entry +@require NamedTuples begin + legendEntryFromTuple(ns::NamedTuples.NamedTuple) = + join(["$k = $v" for (k, v) in zip(keys(ns), values(ns))], ", ") + + function extractGroupArgs(vs::NamedTuples.NamedTuple, args...) + isempty(vs) && return GroupBy([""], [1:size(args[1],1)]) + NT = eval(:(NamedTuples.@NT($(keys(vs)...)))){map(eltype, vs)...} + v = map(NT, vs...) + extractGroupArgs(v, args...; legendEntry = legendEntryFromTuple) + end +end + # expecting a mapping of "group label" to "group indices" function extractGroupArgs(idxmap::Dict{T,V}, args...) where {T, V<:AVec{Int}} groupLabels = sortedkeys(idxmap)