Skip to content

Commit 1922f10

Browse files
authored
Merge pull request #382 from noahrhodes:tooltip_array
Add support for multi-data tooltips
2 parents 1df7e4a + 5e6ad7c commit 1922f10

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

docs/src/examples/examples_table_based_plots.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ using VegaLite, VegaDatasets
1717
dataset("seattle-temps") |>
1818
@vlplot(
1919
title="2010 Daily Max Temperature (F) in Seattle, WA",
20-
:rect,
20+
:rect,
2121
x={
2222
"date:o",
2323
timeUnit=:date,
@@ -160,7 +160,7 @@ dataset("stocks") |>
160160
color={
161161
"price:q",
162162
aggregate="sum",
163-
title="Price"
163+
title="Price"
164164
}
165165
)
166166
```
@@ -226,7 +226,6 @@ dataset("cars") |>
226226
{calculate="datum.x2 + (datum.rank_Origin - 1) * 0.01",as="nx2"},
227227
{calculate="(datum.nx+datum.nx2)/2",as="xc"},
228228
{calculate="(datum.ny+datum.ny2)/2",as="yc"},
229-
{calculate="'Origin: '+datum.Origin+', '+'Cylinders: '+datum.Cylinders",as="tt"}, #How to add a line break?
230229
]
231230
) +
232231
[
@@ -258,8 +257,7 @@ dataset("cars") |>
258257
y2=:ny2,
259258
color={"Origin:n",legend=nothing},
260259
opacity={field="Cylinders",type="quantitative",legend=nothing},
261-
#tooltip=[{field="Origin",type="nominal"},{field="Cylinders",type="quantitative"}] #array not supported
262-
tooltip={"tt:n"} #see calculate above
260+
tooltip=[{field="Origin",type="nominal"},{field="Cylinders",type="quantitative"}]
263261
) +
264262
@vlplot(
265263
mark={:text,baseline="middle"},

src/vlspec.jl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,38 @@ end
1717
function augment_encoding_type(x::AbstractDict, data::Vega.DataValuesNode)
1818
if !haskey(x, "type") && !haskey(x, "aggregate") && haskey(x, "field") && haskey(data.columns, Symbol(x["field"]))
1919
new_x = copy(x)
20-
20+
2121
jl_type = eltype(data.columns[Symbol(x["field"])])
22-
22+
2323
if jl_type <: DataValues.DataValue
2424
jl_type = eltype(jl_type)
2525
end
26-
26+
2727
if jl_type <: Number
2828
new_x["type"] = "quantitative"
2929
elseif jl_type <: AbstractString
3030
new_x["type"] = "nominal"
3131
elseif jl_type <: Dates.AbstractTime
3232
new_x["type"] = "temporal"
3333
end
34-
34+
3535
return new_x
3636
else
3737
return x
38+
end
3839
end
40+
41+
function augment_encoding_type(x::AbstractArray, data::Vega.DataValuesNode)
42+
x = [augment_encoding_type(k,data) for k in x]
43+
return x
3944
end
4045

4146
function add_encoding_types(specdict, parentdata=nothing)
42-
if (haskey(specdict, "data") && haskey(specdict["data"], "values") && specdict["data"]["values"] isa Vega.DataValuesNode) || parentdata !== nothing
47+
if (haskey(specdict, "data") && haskey(specdict["data"], "values") && specdict["data"]["values"] isa Vega.DataValuesNode) || parentdata !== nothing
4348
data = (haskey(specdict, "data") && haskey(specdict["data"], "values") && specdict["data"]["values"] isa Vega.DataValuesNode) ? specdict["data"]["values"] : parentdata
4449

4550
newspec = OrderedDict{String,Any}(
46-
(k == "encoding" && v isa AbstractDict) ? k => OrderedDict{String,Any}(kk => augment_encoding_type(vv, data) for (kk, vv) in v) :
51+
(k == "encoding" && v isa AbstractDict) ? k => OrderedDict{String,Any}(kk => augment_encoding_type(vv, data) for (kk, vv) in v) :
4752
k == "spec" ? k => add_encoding_types(v, data) :
4853
k in ("layer", "concat", "vconcat", "hconcat") ? k => [add_encoding_types(i, data) for i in v] : k => v for (k, v) in specdict
4954
)
@@ -59,8 +64,8 @@ function our_json_print(io, spec::VLSpec)
5964
end
6065

6166
function (p::VLSpec)(data)
62-
TableTraits.isiterabletable(data) || throw(ArgumentError("'data' is not a table."))
63-
67+
TableTraits.isiterabletable(data) || throw(ArgumentError("'data' is not a table."))
68+
6469
it = IteratorInterfaceExtensions.getiterator(data)
6570

6671
datavaluesnode = Vega.DataValuesNode(it)

test/test_spec.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,10 @@
8484

8585
@test haskey(Vega.getparams(p5)["data"], "url")
8686
end
87+
88+
@testitem "Array tooltip data" begin
89+
using VegaDatasets
90+
91+
p10 = dataset("cars")|> @vlplot(:point,x=:Horsepower,y=:Miles_per_Gallon,tooltip=[:Horsepower,"Miles_per_Gallon:q"])
92+
@test isa(p10.encoding.tooltip, Vector)
93+
end

0 commit comments

Comments
 (0)