はじめに
GO言語で開発したプログラムから、ちょっとしたチャート(グラフ)を出力する時にgo-echartsというパッケージが便利です。
しかし、サンプルプログラムが少ないのでグラフを出力するためのデータ構造がわかりにくいです。そこで、誰かのためになればと思って解説の記事を書いてみました。
go-echartsについて
go-echartsは、JavaScriptのチャートライブラリApache ECharts
を使ったインターラクティブなチャートを含むHTMLファイルをGO言語から出力するものです。このライブラリのサンプル
にあるようなチャートの一部を出力できます。チャートを出力するための設定やデータは、JavaScript版と同じように考えればよいと思います。
go-echartsのサンプルは、
にありますが、自分でビルドして起動しないと表示が見られませんし、解説もありません。
時系列チャートの出力
時系列チャートは、
package main
import (
"math/rand"
"os"
"time"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
)
// 時系列のランダムデータ作成
func generateTimeLineItems() []opts.LineData {
items := []opts.LineData{}
t := time.Now().UnixMilli()
for i := 0; i < 100; i++ {
items = append(items, opts.LineData{Value: []interface{}{t + int64(i*1000), rand.Float64()}})
}
return items
}
func main() {
line := charts.NewLine()
line.SetGlobalOptions(
charts.WithXAxisOpts(opts.XAxis{Name: "time", Type: "time"}, 0),
charts.WithTitleOpts(opts.Title{Title: "Time line example", Subtitle: "This is the subtitle."}),
)
line.SetXAxis(nil).AddSeries("Time Chart", generateTimeLineItems())
f, _ := os.Create("time_line.html")
line.Render(f)
}
のプログラムで出力できます。結果は、
のようになります。
時系列チャートを出力する時のポイントは、3つです。
X軸を種別を"time"にする
charts.WithXAxisOpts(opts.XAxis{Name: "time", Type: "time"}, 0),
X軸のデータをnilにする
line.SetXAxis(nil)
シリーズのデータを2次元のスライスにする
[mSecのUNIXタイム,Y軸の値]....
t := time.Now().UnixMilli()
for i := 0; i < 100; i++ {
items = append(items, opts.LineData{Value: []interface{}{t + int64(i*1000), rand.Float64()}})
}
ということです。
Lineだけでなく他の種類のチャート(グラフ)にも応用できます。
この解説を書いた理由
この記事は、
を開発している時に調べたことを元にしています。