用图形和图表将数据可视化使其更容易被理解。我们可以使用数据可视化库来轻松生成干净漂亮的图表。
在本教程中,我们将学习如何在Golang中使用 [go-echarts](https://github.com/go-echarts/go-echarts)库。在GitHub上,它有超过4k颗星,使其成为Go中生成图表的最受欢迎的库之一。我们将学习如何设置和安装这个包,然后逐步介绍如何创建不同的图表,包括条形图、折线图、饼图和文字云。
go-echarts 包括各种各样的定制选项,如多个UI主题,你可以用它来进一步改善你的数据可视化的外观和感觉。go-echarts 有适当的文档,并提供一个干净和全面的API。
本机上,Go不提供创建可定制的可视化的能力,但go-echarts 提供对多种数据输入格式和移动优化的支持。
为了设置我们的项目并安装go-echarts ,运行下面的代码。
mkdir learn_charts
cd learn_charts
go mod init learn_charts
go get -u github.com/go-echarts/go-echarts/...
touch main.go
现在,在你喜欢的编辑器中打开main.go 文件,让我们开始吧!
在Golang中创建一个条形图
首先,我们来介绍一下如何创建条形图,这是最常见和最广泛使用的图表类型之一。当你想显示一个分布或跨组的比较时,条形图是理想的。我们将使用随机数据制作条形图,并探索不同的选项来定制它。
首先,让我们写一个函数来为我们的条形图创建随机样本数据。
package main
import (
"math/rand"
"os"
"github.com/go-echarts/go-echarts/v2/opts"
)
// generate random data for bar chart
func generateBarItems() []opts.BarData {
items := make([]opts.BarData, 0)
for i := 0; i < 6; i++ {
items = append(items, opts.BarData{Value: rand.Intn(500)})
}
return items
}
现在,我们已经准备好创建我们的柱状图了。为此,我们将初始化一个新的柱状图并设置全局选项,如title 和legend 。然后,我们将使用AddSeries() 方法和我们的generateBarItems() 函数将数据填充到我们的实例中。最后,我们将把我们的图表渲染成一个HTML文件。另外,你也可以使用HTTP服务器渲染你的图表。
func createBarChart() {
// create a new bar instance
bar := charts.NewBar()
// Set global options
bar.SetGlobalOptions(charts.WithTitleOpts(opts.Title{
Title: "Bar chart in Go",
Subtitle: "This is fun to use!",
}))
// Put data into instance
bar.SetXAxis([]string{"Jan", "Feb", "Mar", "Apr", "May", "Jun"}).
AddSeries("Category A", generateBarItems()).
AddSeries("Category B", generateBarItems())
f, _ := os.Create("bar.html")
_ = bar.Render(f)
}
通过上面的命令,一个叫做bar.html 的文件应该被创建。在浏览器中打开它,你应该可以看到你的第一个条形图和Go。你可以随意添加你喜欢的自定义样式。

创建折线图
数据科学家经常使用折线图来跟踪一段时间内的变化。在我们的例子中,我们将用随机数据创建一个折线图,并比较两个随机类别。
首先,让我们为图表生成我们的随机数据。
package main
import (
"math/rand"
"os"
"github.com/go-echarts/go-echarts/v2/opts"
)
// generate random data for line chart
func generateLineItems() []opts.LineData {
items := make([]opts.LineData, 0)
for i := 0; i < 7; i++ {
items = append(items, opts.LineData{Value: rand.Intn(500)})
}
return items
}
现在,我们准备创建一个折线图。为此,我们将为我们的折线图初始化一个新的实例,就像我们为柱状图做的那样。然后,我们将把数据填充到我们的实例中,并将我们的图表渲染成一个HTML文件。
func createLineChart() {
// create a new line instance
line := charts.NewLine()
// set some global options like Title/Legend/ToolTip or anything else
line.SetGlobalOptions(
charts.WithInitializationOpts(opts.Initialization{
Theme: types.ThemeInfographic
}),
charts.WithTitleOpts(opts.Title{
Title: "Line chart in Go",
Subtitle: "This is fun to use!",
})
)
// Put data into instance
line.SetXAxis([]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}).
AddSeries("Category A", generateLineItems()).
AddSeries("Category B", generateLineItems()).
SetSeriesOptions(charts.WithLineChartOpts(opts.LineChart{Smooth: true}))
f, _ := os.Create("line.html")
_ = line.Render(f)
}
在你的浏览器中打开line.html ,你会看到下面这样的图表。

创建饼图
当你要比较一个整体的各个部分时,饼图可以说是最好的选择。在我们的例子中,我们将用随机数据创建一个饼图,显示一个学生的销售分数分布。
让我们写一个小函数来为我们的饼图创建随机数据样本。
package main
import (
"math/rand"
"os"
"github.com/go-echarts/go-echarts/v2/opts"
)
// generate random data for pie chart
func generatePieItems() []opts.PieData {
subjects := []string{"Maths", "English", "Science", "Computers", "History", "Geography"}
items := make([]opts.PieData, 0)
for i := 0; i < 6; i++ {
items = append(items, opts.PieData{
Name: subjects[i],
Value: rand.Intn(500)})
}
return items
}
现在,我们需要创建一个实例并添加自定义。我们将添加额外的标签选项,并为我们的饼图设置一个半径。请自由地改变和玩弄这些选项。
func createPieChart() {
// create a new pie instance
pie := charts.NewPie()
pie.SetGlobalOptions(
charts.WithTitleOpts(
opts.Title{
Title: "Pie chart in Go",
Subtitle: "This is fun to use!",
},
),
)
pie.SetSeriesOptions()
pie.AddSeries("Monthly revenue",
generatePieItems()).
SetSeriesOptions(
charts.WithPieChartOpts(
opts.PieChart{
Radius: 200,
},
),
charts.WithLabelOpts(
opts.Label{
Show: true,
Formatter: "{b}: {c}",
},
),
)
f, _ := os.Create("pie.html")
_ = pie.Render(f)
}
在你的浏览器中打开pie.html ,可以看到像下面这样的饼图。

创建词云
词语云通过用较大的字体突出显示数据集中最常用的词语。在我们的例子中,我们将用关于加密货币流行度的随机数据创建一个词云。
让我们写一个函数来为我们的词云创建随机数据样本。
package main
import (
"math/rand"
"os"
"github.com/go-echarts/go-echarts/v2/opts"
)
var wordCloudData = map[string]interface{}{
"Bitcoin": 10000,
"Ethereum": 8000,
"Cardano": 5000,
"Polygon": 4000,
"Polkadot": 3000,
"Chainlink": 2500,
"Solana": 2000,
"Ripple": 1500,
"Decentraland": 1000,
"Tron": 800,
"Sandbox": 500,
"Litecoin": 200,
}
// generate random data for word cloud
func generateWordCloudData(data map[string]interface{}) (items []opts.WordCloudData) {
items = make([]opts.WordCloudData, 0)
for k, v := range data {
items = append(items, opts.WordCloudData{Name: k, Value: v})
}
return
}
现在,我们需要创建一个实例并添加自定义选项。首先,我们使用charts.WithTitleOpts() ,定义标题和副标题,然后向我们的词云图表实例添加数据。请自由地改变和玩弄这些选项。
func createWordCloud() {
wc := charts.NewWordCloud()
wc.SetGlobalOptions(
charts.WithTitleOpts(opts.Title{
Title: "Popular Cryptocurrencies",
Subtitle: "Spot your favourite coins",
}))
wc.AddSeries("wordcloud", generateWordCloudData(wordCloudData)).
SetSeriesOptions(
charts.WithWorldCloudChartOpts(
opts.WordCloudChart{
SizeRange: []float32{40, 80},
Shape: "cardioid",
}),
)
f, _ := os.Create("word_cloud.html")
_ = wc.Render(f)
}
在你的浏览器中打开word_cloud.html ,可以看到像下面这样的词云。

在上面的词云中,最频繁命名的加密货币以最大的字体出现。在我们的案例中,我们可以推断出这些货币包括比特币和以太坊。
总结
在这篇文章中,我们练习了使用go-echarts 库在Go中可视化数据的更好方法。go-echarts 提供了更多类型的图表,如热图、散点图和箱形图,按照我们上面使用的方法很容易建立和填充这些图表。
另外,你也可以考虑使用以下库来构建Go中的图表。
我希望你在本教程中能学到一些新东西。现在,你可以在你自己的Go网络应用中使用图表了。编码愉快!
The postVisualizing data in Golang with go-echartsappeared first onLogRocket Blog.