Chart Types
dedav is a shim to Vega. Anything vega can plot, it can plot. Learning vega is a fun journey that this library does not attempt to insulate you from. Rather it encourages it. Vega is battle tested, has great resources an internet full of examples and is super bot-friendly.
Here's a chart written as a NamedTuple.
import viz.Macros.Implicits.given_Writer_T
import viz.vegaFlavour
val spec = (
`$schema` = "https://vega.github.io/schema/vega-lite/v6.json",
width = "container",
height = "container",
data = (url = "https://raw.githubusercontent.com/vega/vega/refs/heads/main/docs/data/cars.json"),
mark = "bar",
encoding = (
x = (`field` = "Origin"),
y = (
aggregate = "count",
title = "Number of Cars"
)
)
)
val specJson = upickle.default.writeJs(spec)
viz.doc.JsDocs.fromUjson(specJson, node, 25)
Relies on JSON serialisation of NamedTupleds. YMMV.
To get started, find an existing chart, and evolve it to what you want... this library hooks directly into vegas repository of example charts.
Example Charts
Vega
https://vega.github.io/vega/examples/
import viz.vega.plots.SpecUrl
import viz.{vegaFlavour, *}
viz.doc.JsDocs.fromUjson(SpecUrl.BarChart.jsonSpec.mod(List(viz.Utils.fillDiv)), node, 50)
viz.doc.JsDocs.fromUjson(SpecUrl.LineChart.jsonSpec.mod(List(viz.Utils.fillDiv)), node, 50)
viz.doc.JsDocs.fromUjson(SpecUrl.PieChart.jsonSpec.mod(List(viz.Utils.fillDiv)), node, 50)
viz.doc.JsDocs.fromUjson(SpecUrl.ScatterPlot.jsonSpec.mod(List(viz.Utils.fillDiv, viz.Utils.fixDefaultDataUrl)), node, 50)
Vega-Lite
https://vega.github.io/vega-lite/examples/
import viz.vega.plots.SpecUrl
import viz.{vegaFlavour, *}
viz.doc.JsDocs.fromUjson(SpecUrl.SimpleBarChartLite.jsonSpec.mod(List(viz.Utils.fillDiv)), node, 50)
viz.doc.JsDocs.fromUjson(SpecUrl.HistogramLite.jsonSpec.mod(List(viz.Utils.fillDiv, viz.Utils.fixDefaultDataUrl)), node, 50)
viz.doc.JsDocs.fromUjson(SpecUrl.ScatterplotLite.jsonSpec.mod(List(viz.Utils.fillDiv, viz.Utils.fixDefaultDataUrl)), node, 50)
viz.doc.JsDocs.fromUjson(
SpecUrl.InteractiveScatterplotMatrixLite.jsonSpec.mod(
List( spec => spec("spec")("data")("url") = "https://raw.githubusercontent.com/vega/vega/main/docs/data/cars.json" )
),
node,
50
)