Goecharts教程展示了如何使用go-echarts库在Golang中创建图表。
go-echarts是Golang的图表库。go-echarts不是生成图像,而是利用ApacheEChartsJS库在HTML文档中生成图表。
使用go-echarts可以创建交互式图表。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
折线图
折线图是一种基本类型的图表,它将信息显示为由线段连接的一系列数据点。这些线可以是直线或曲线。
package main
import (
"os"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
"github.com/go-echarts/go-echarts/v2/types"
)
func main() {
sals := []opts.LineData{{Value: 567}, {Value: 612}, {Value: 800},
{Value: 980}, {Value: 1410}, {Value: 2350}}
ages := []string{"18", "20", "25", "30", "40", "50"}
line := charts.NewLine()
line.SetGlobalOptions(
charts.WithInitializationOpts(opts.Initialization{Theme: types.ThemeWesteros}),
charts.WithTitleOpts(opts.Title{Title: "Average salary per age",
Subtitle: "Slovakia"}),
)
line.SetXAxis(ages).AddSeries("salaries", sals)
line.SetSeriesOptions(charts.WithLineChartOpts(
opts.LineChart{
Smooth: true,
}))
f, _ := os.Create("scatter.html")
line.Render(f)
}
该示例创建了一个折线图,显示每个年龄段的平均工资。
sals := []opts.LineData{{Value: 567}, {Value: 612}, {Value: 800},
{Value: 980}, {Value: 1410}, {Value: 2350}}
薪水是opt.LineData结构的一部分。这些是y轴的值。
ages := []string{"18", "20", "25", "30", "40", "50"}
这些字符串是x轴的值。
line := charts.NewLine()
折线图由charts.NewLine启动。
line.SetGlobalOptions(
charts.WithInitializationOpts(opts.Initialization{Theme: types.ThemeWesteros}),
charts.WithTitleOpts(opts.Title{Title: "Average salary per age",
Subtitle: "Slovakia"}),
)
我们启动图表选项;我们设置图表主题、标题和副标题。
line.SetXAxis(ages).AddSeries("salaries", sals)
我们设置x轴和y轴的数据。
line.SetSeriesOptions(charts.WithLineChartOpts(
opts.LineChart{
Smooth: true,
}))
我们的线条是平滑的,即我们有曲线而不是直线。
f, _ := os.Create("scatter.html")
我们创建一个HTML文件,其中将写入图表。
line.Render(f)
图表使用Render函数呈现。
散点图
散点图使用点表示两个不同数值变量的值,每个轴上有一个变量,以寻找它们之间的关系。
package main
import (
"os"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
"github.com/go-echarts/go-echarts/v2/types"
)
func main() {
temps := []opts.ScatterData{{Value: -7.3}, {Value: -3.4}, {Value: -5.0},
{Value: -0.9}, {Value: -2.2}, {Value: 4.8}, {Value: 5.1}, {Value: -1.9},
{Value: 0}, {Value: 2.6}}
dates := []string{"Jan 1", "Jan 10", "Jan 12", "Jan 20", "Jan 30", "Feb 1",
"Feb 2", "Feb 5", "Feb 8", "Feb 12"}
scatter := charts.NewScatter()
scatter.SetGlobalOptions(
charts.WithInitializationOpts(opts.Initialization{Theme: types.ThemeWesteros}),
charts.WithTitleOpts(opts.Title{Title: "Temperatures"}),
)
scatter.SetXAxis(dates).AddSeries("temps", temps)
f, _ := os.Create("scatter.html")
scatter.Render(f)
}
图表显示一系列日期的温度。我们使用opts.ScatterData结构来定义y值,并使用charts.NewScatter创建新的散点图。
条形图
条形图使用矩形条显示分组数据,矩形条的长度与其代表的值成比例。我们可以有2D和3D条形图,并且可以垂直或水平绘制条形图。
package main
import (
"os"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
"github.com/go-echarts/go-echarts/v2/types"
)
func main() {
medals := []opts.BarData{{Value: 46},
{Value: 38}, {Value: 29},
{Value: 22}, {Value: 13}, {Value: 11}}
countries := []string{"USA", "China", "UK", "Russia",
"South Korea", "Germany"}
bar := charts.NewBar()
bar.SetGlobalOptions(
charts.WithInitializationOpts(opts.Initialization{Theme: types.ThemeWesteros}),
charts.WithTitleOpts(opts.Title{Title: "Olympic Gold medals in London"}))
bar.SetXAxis(countries)
bar.AddSeries("medals", medals)
f, _ := os.Create("bar.html")
bar.Render(f)
}
代码示例使用条形图显示2012年伦敦奥运会每个国家/地区的奥运金牌数。我们使用opts.BarData结构来定义y值和charts.NewBar创建一个新的条形图。
饼图
饼图是一个圆形图表,它被分成多个切片以说明数字比例。
package main
import (
"os"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
"github.com/go-echarts/go-echarts/v2/types"
)
func main() {
destinations := []opts.PieData{{Name: "Croatia", Value: 22},
{Name: "Bohemia", Value: 34}, {Name: "Bulgaria", Value: 18},
{Name: "Spain", Value: 5}, {Name: "Others", Value: 21}}
pie := charts.NewPie()
pie.SetGlobalOptions(
charts.WithInitializationOpts(opts.Initialization{Theme: types.ThemeChalk}),
charts.WithTitleOpts(opts.Title{Title: "Popular destinations"}),
)
pie.AddSeries("destinations", destinations)
f, _ := os.Create("pie.html")
pie.Render(f)
}
该示例显示热门旅游目的地。我们使用opts.PieData结构来定义y值和charts.NewPie来创建一个新的饼图。
HTTP服务器生成的图表
在下一个示例中,我们将创建一个生成图表的简单HTTP服务器。
package main
import (
"fmt"
"log"
"math/rand"
"net/http"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
"github.com/go-echarts/go-echarts/v2/types"
)
func randomData() []opts.LineData {
data := make([]opts.LineData, 0)
for i := 0; i < 7; i++ {
data = append(data, opts.LineData{Value: rand.Intn(300)})
}
return data
}
func httpserver(w http.ResponseWriter, _ *http.Request) {
line := charts.NewLine()
line.SetGlobalOptions(
charts.WithInitializationOpts(opts.Initialization{Theme: types.ThemeWesteros}),
charts.WithTitleOpts(opts.Title{
Title: "Line charts",
Subtitle: "Rendered by the http server",
}))
line.SetXAxis([]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}).
AddSeries("Category A", randomData()).
AddSeries("Category B", randomData())
line.SetSeriesOptions(charts.WithLineChartOpts(opts.LineChart{Smooth: true}))
line.Render(w)
}
func main() {
http.HandleFunc("/", httpserver)
fmt.Println("Server started at port 8081")
log.Fatal(http.ListenAndServe(":8081", nil))
}
服务器在localhost:8081监听。它生成由两条曲线组成的图表。数据是随机生成的。
在本教程中,我们使用go-echarts在Go中创建了图表。
列出所有Go教程。
