程序员宝藏库:https://github.com/Jackpopc/CS-Books-Store
用图形和图表将数据可视化使其更容易被理解,在不同编程语言中,我们可以使用数据可视化库来轻松生成干净漂亮的图表。
在本教程中,我们将学习如何使用go-echarts
库在 Golang 中绘制数据。
在 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
文件,让我们开始吧!
柱状图
首先,让我们介绍一下如何创建柱状图,这是最常见和最广泛使用的图表类型之一。
当你想显示各组之间的分布或比较时,条形图是理想的选择。
我将使用随机数据制作柱状图,并探索不同的选项来定制它。
首先,写一个函数来为我们的条形图创建随机样本数据:
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 可视化数据的方法。
go-echarts
提供了更多类型的图表,如热图、散点图和箱形图,按照我们上面的方法,这些图表很容易建立和填充。
除此之外,你也可以考虑使用以下库来构建 Go 中的图表:
go chart
: Go 的基本图表库 (3k stars)
Glot
:建立在gnuplot
之上的绘图库(350 starts)
PTerm
:用于在控制台中绘制图表的 Go 模块(2k stars)
希望你在本教程中能学到一些新东西。
大家好,我是 Jackpop!我花费了半个月的时间把这几年来收集的各种技术干货整理到一起,其中内容包括但不限于 Python、机器学习、深度学习、计算机视觉、推荐系统、Linux、工程化、Java,内容多达 5T+,获取方式:https://pan.baidu.com/s/1eks7CUyjbWQ3A7O9cmYljA(提取码:0000)
评论