用图形和图表将数据可视化使其更容易被理解,在不同编程语言中,我们可以使用数据可视化库来轻松生成干净漂亮的图表。
go-echarts
在GitHub上,它有超过4k颗星,使其成为Go中生成图表的最受欢迎的库之一。
我们将学习如何设置和安装这个包,然后逐步介绍如何创建不同的图表,包括条形图、折线图、饼图和文字云。
go-echartsgo-echarts
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
柱状图
首先,让我们介绍一下如何创建柱状图,这是最常见和最广泛使用的图表类型之一。
当你想显示各组之间的分布或比较时,条形图是理想的选择。
我将使用随机数据制作柱状图,并探索不同的选项来定制它。
首先,写一个函数来为我们的条形图创建随机样本数据:
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
}
现在,开始创建我们的柱状图。
为此,将初始化一个新的柱状图并设置全局选项,如标题和图例。
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
在浏览器中打开它,你应该看到你的第一个柱状图,你可以随意添加你喜欢的自定义样式。

折线图
数据科学家经常使用折线图来跟踪一段时间内的变化。
在我们的例子中,我们将用随机数据创建一个折线图,比较两个随机类别。
首先,让我们为图表生成我们的随机数据:
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-echarts
除此之外,你也可以考虑使用以下库来构建Go中的图表:
go chartGlotgnuplotPTerm
希望你在本教程中能学到一些新东西。
大家好,我是Jackpop!我花费了半个月的时间把这几年来收集的各种技术干货整理到一起,其中内容包括但不限于Python、机器学习、深度学习、计算机视觉、推荐系统、Linux、工程化、Java,内容多达5T+,获取方式:技术干货_免费高速下载|百度网盘-分享无限制(提取码:0000)