From 28a950621c0c1524aadcbd3b6a49b6d89e117132 Mon Sep 17 00:00:00 2001 From: Noah Rhodes Date: Wed, 7 Apr 2021 19:19:48 -0500 Subject: [PATCH 1/6] add augment_econding_type for array Take arrays and run augment_encoding_type on the internal components --- src/vlspec.jl | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/vlspec.jl b/src/vlspec.jl index 5ac76b26..a8d6a15c 100644 --- a/src/vlspec.jl +++ b/src/vlspec.jl @@ -17,13 +17,13 @@ end function augment_encoding_type(x::AbstractDict, data::Vega.DataValuesNode) if !haskey(x, "type") && !haskey(x, "aggregate") && haskey(x, "field") && haskey(data.columns, Symbol(x["field"])) new_x = copy(x) - + jl_type = eltype(data.columns[Symbol(x["field"])]) - + if jl_type <: DataValues.DataValue jl_type = eltype(jl_type) end - + if jl_type <: Number new_x["type"] = "quantitative" elseif jl_type <: AbstractString @@ -31,19 +31,26 @@ function augment_encoding_type(x::AbstractDict, data::Vega.DataValuesNode) elseif jl_type <: Dates.AbstractTime new_x["type"] = "temporal" end - + return new_x else return x + end end + +function augment_encoding_type(x::Array, data::Vega.DataValuesNode) + println(x) + x = [augment_encoding_type(k,data) for k in x] + println(x) + return x end function add_encoding_types(specdict, parentdata=nothing) - if (haskey(specdict, "data") && haskey(specdict["data"], "values") && specdict["data"]["values"] isa Vega.DataValuesNode) || parentdata !== nothing + if (haskey(specdict, "data") && haskey(specdict["data"], "values") && specdict["data"]["values"] isa Vega.DataValuesNode) || parentdata !== nothing data = (haskey(specdict, "data") && haskey(specdict["data"], "values") && specdict["data"]["values"] isa Vega.DataValuesNode) ? specdict["data"]["values"] : parentdata newspec = OrderedDict{String,Any}( - (k == "encoding" && v isa AbstractDict) ? k => OrderedDict{String,Any}(kk => augment_encoding_type(vv, data) for (kk, vv) in v) : + (k == "encoding" && v isa AbstractDict) ? k => OrderedDict{String,Any}(kk => augment_encoding_type(vv, data) for (kk, vv) in v) : k == "spec" ? k => add_encoding_types(v, data) : k in ("layer", "concat", "vconcat", "hconcat") ? k => [add_encoding_types(i, data) for i in v] : k => v for (k, v) in specdict ) @@ -59,8 +66,8 @@ function our_json_print(io, spec::VLSpec) end function (p::VLSpec)(data) - TableTraits.isiterabletable(data) || throw(ArgumentError("'data' is not a table.")) - + TableTraits.isiterabletable(data) || throw(ArgumentError("'data' is not a table.")) + it = IteratorInterfaceExtensions.getiterator(data) datavaluesnode = Vega.DataValuesNode(it) From c9e66e5bf1486c6c08a618c5867f8dae62ad0688 Mon Sep 17 00:00:00 2001 From: Noah Rhodes Date: Sun, 20 Jun 2021 16:54:03 -0500 Subject: [PATCH 2/6] remove println, change `array` to `abstractarray` --- src/vlspec.jl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/vlspec.jl b/src/vlspec.jl index a8d6a15c..f9a9b259 100644 --- a/src/vlspec.jl +++ b/src/vlspec.jl @@ -38,10 +38,8 @@ function augment_encoding_type(x::AbstractDict, data::Vega.DataValuesNode) end end -function augment_encoding_type(x::Array, data::Vega.DataValuesNode) - println(x) +function augment_encoding_type(x::AbstractArray, data::Vega.DataValuesNode) x = [augment_encoding_type(k,data) for k in x] - println(x) return x end From 5b919f68aa22512c2d3ff1449dde3e08dc394026 Mon Sep 17 00:00:00 2001 From: Noah Rhodes Date: Sun, 20 Jun 2021 17:26:37 -0500 Subject: [PATCH 3/6] Add test for hover tooltip array --- test/test_spec.jl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/test_spec.jl b/test/test_spec.jl index e8fd7448..adad7fe0 100644 --- a/test/test_spec.jl +++ b/test/test_spec.jl @@ -86,3 +86,8 @@ p5 = dataset("cars").path |> @vlplot(:point, x = :Miles_per_Gallon, y = :Acceler @test haskey(Vega.getparams(p5)["data"], "url") end + +@testset "Array tooltip data" begin + p10 = @vlplot(:point,x=:Horsepower,y=:Miles_per_Gallon,tooltip=[:Horsepower,"Miles_per_Gallon:q"]) + @test isa(p10, VegaLite.VLSpec) +end From 7b38fdd366cef656e03b0fbe3cbfc809b835f297 Mon Sep 17 00:00:00 2001 From: Noah Rhodes Date: Sun, 20 Jun 2021 17:50:19 -0500 Subject: [PATCH 4/6] Update documentation for array tooltip --- docs/src/examples/examples_table_based_plots.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/src/examples/examples_table_based_plots.md b/docs/src/examples/examples_table_based_plots.md index ef6bb27e..d2e3746e 100644 --- a/docs/src/examples/examples_table_based_plots.md +++ b/docs/src/examples/examples_table_based_plots.md @@ -17,7 +17,7 @@ using VegaLite, VegaDatasets dataset("seattle-temps") |> @vlplot( title="2010 Daily Max Temperature (F) in Seattle, WA", - :rect, + :rect, x={ "date:o", timeUnit=:date, @@ -160,7 +160,7 @@ dataset("stocks") |> color={ "price:q", aggregate="sum", - title="Price" + title="Price" } ) ``` @@ -226,7 +226,6 @@ dataset("cars") |> {calculate="datum.x2 + (datum.rank_Origin - 1) * 0.01",as="nx2"}, {calculate="(datum.nx+datum.nx2)/2",as="xc"}, {calculate="(datum.ny+datum.ny2)/2",as="yc"}, - {calculate="'Origin: '+datum.Origin+', '+'Cylinders: '+datum.Cylinders",as="tt"}, #How to add a line break? ] ) + [ @@ -258,8 +257,7 @@ dataset("cars") |> y2=:ny2, color={"Origin:n",legend=nothing}, opacity={field="Cylinders",type="quantitative",legend=nothing}, - #tooltip=[{field="Origin",type="nominal"},{field="Cylinders",type="quantitative"}] #array not supported - tooltip={"tt:n"} #see calculate above + tooltip=[{field="Origin",type="nominal"},{field="Cylinders",type="quantitative"}] ) + @vlplot( mark={:text,baseline="middle"}, From da0f1253ad5b49654369b126236e735aec390288 Mon Sep 17 00:00:00 2001 From: Noah Rhodes Date: Sun, 20 Jun 2021 18:05:22 -0500 Subject: [PATCH 5/6] Change tooltip test to check for vector --- test/test_spec.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_spec.jl b/test/test_spec.jl index adad7fe0..df7bef97 100644 --- a/test/test_spec.jl +++ b/test/test_spec.jl @@ -88,6 +88,6 @@ p5 = dataset("cars").path |> @vlplot(:point, x = :Miles_per_Gallon, y = :Acceler end @testset "Array tooltip data" begin - p10 = @vlplot(:point,x=:Horsepower,y=:Miles_per_Gallon,tooltip=[:Horsepower,"Miles_per_Gallon:q"]) - @test isa(p10, VegaLite.VLSpec) + p10 = dataset("cars")|> @vlplot(:point,x=:Horsepower,y=:Miles_per_Gallon,tooltip=[:Horsepower,"Miles_per_Gallon:q"]) + @test isa(p10.encoding.tooltip, Vector) end From 5e6ad7cf32721cbf01e3d0c9948b1eca6534b7e8 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Sat, 29 Jul 2023 16:12:06 +0200 Subject: [PATCH 6/6] Move a test to test item framework --- test/test_spec.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/test_spec.jl b/test/test_spec.jl index 2166c9ad..135835ee 100644 --- a/test/test_spec.jl +++ b/test/test_spec.jl @@ -85,7 +85,9 @@ @test haskey(Vega.getparams(p5)["data"], "url") end -@testset "Array tooltip data" begin +@testitem "Array tooltip data" begin + using VegaDatasets + p10 = dataset("cars")|> @vlplot(:point,x=:Horsepower,y=:Miles_per_Gallon,tooltip=[:Horsepower,"Miles_per_Gallon:q"]) @test isa(p10.encoding.tooltip, Vector) end