用图形和图表将数据可视化使其更容易被理解,在不同编程语言中,我们可以使用数据可视化库来轻松生成干净漂亮的图表。
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)