vegagoja
renders Vega and Vega-Lite visualizations
as SVGs using the goja
JavaScript runtime. Developed for use by
usql
for rendering charts.
Install in the usual Go fashion:
$ go get github.com/xo/vegagoja@latest
Then use like the following:
package vegagoja_test
import (
"context"
"fmt"
"log"
"os"
"github.com/xo/vegagoja"
)
func Example() {
vega := vegagoja.New(
vegagoja.WithDemoData(),
)
data, err := vega.Render(context.Background(), candlestickSpec)
if err != nil {
log.Fatal(err)
}
if err := os.WriteFile("candestick.svg", []byte(data), 0o644); err != nil {
log.Fatal(err)
}
// Output:
}
const candlestickSpec = `{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 400,
"description": "A candlestick chart inspired by an example in Protovis (http://mbostock.github.io/protovis/ex/candlestick.html)",
"data": {"url": "data/ohlc.json"},
"encoding": {
"x": {
"field": "date",
"type": "temporal",
"title": "Date in 2009",
"axis": {
"format": "%m/%d",
"labelAngle": -45,
"title": "Date in 2009"
}
},
"y": {
"type": "quantitative",
"scale": {"zero": false},
"axis": {"title": "Price"}
},
"color": {
"condition": {
"test": "datum.open < datum.close",
"value": "#06982d"
},
"value": "#ae1325"
}
},
"layer": [
{
"mark": "rule",
"encoding": {
"y": {"field": "low"},
"y2": {"field": "high"}
}
},
{
"mark": "bar",
"encoding": {
"y": {"field": "open"},
"y2": {"field": "close"}
}
}
]
}`
- Rewrite as native Go
- Add Kerry Kolosko's templates as tests
vegagoja
was written primarily to support these projects:
- usql - a universal command-line interface for SQL databases
Users of this package may find the github.com/xo/resvg
package
helpful in rendering generated SVGs.