Golang如何在本地机器上实现数据图表可视化

Golang如何在本地机器上实现数据图表可视化 你好,是否可以在本地机器上显示从用户输入收集的数据?

我有3个用户,他们每个人都有销售目标(例如:3000)以及他们的销售额(例如:555)。我能否显示这些数据并比较他们所有人?

4 回复

我需要为ChartJs启动类似xampp的服务器吗?

更多关于Golang如何在本地机器上实现数据图表可视化的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


MantasSilanskas:

xampp server for ChartJs?

ChartJS 是一个 JavaScript 框架。你可以通过其 CDN 在 HTML 页面中引入:https://cdnjs.com/libraries/Chart.js

Go 可以独立运行 Web 服务器。一个不错的入门参考是:https://golang.org/doc/articles/wiki/。Go 服务器功能足够强大,无需依赖 nginx 或 apache 服务器。

注意:

  1. 前提条件:使用 Go 进行 Web 开发

是否可能显示从用户输入收集的数据?

我有3个用户,每人都有销售目标(例如:3000)和他们的销售额(例如:555)。我可以显示这些数据并进行比较吗?

你需要使用外部包。如果终端输出足够满足需求,我推荐:https://github.com/gizak/termui

另一个简单的方法是构建一个使用图表JavaScript框架的Web界面,例如:https://www.chartjs.org/。前提是需要具备使用Go进行Web开发的知识。

如果你希望它是一个本地应用程序:GitHub - therecipe/qt: Qt binding for Go (Golang) with support for Windows / macOS / Linux / FreeBSD / Android / iOS / Sailfish OS / Raspberry Pi / AsteroidOS / Ubuntu Touch / JavaScript / WebAssembly 是一个不错的选择。请注意,如果没有良好的指导,Qt在开始时可能会非常困难。

可以使用Go语言在本地机器上实现数据图表可视化。这里推荐使用gonum/plot库,它是一个强大的绘图库,适合生成静态图表。以下是一个完整的示例,展示如何创建柱状图来比较三个用户的销售目标和实际销售额。

首先,确保安装必要的库:

go get gonum.org/v1/plot
go get gonum.org/v1/plot/plotter
go get gonum.org/v1/plot/vg

然后,运行以下代码。它会生成一个PNG图像文件,显示每个用户的销售目标和实际销售额的柱状图。

package main

import (
	"log"

	"gonum.org/v1/plot"
	"gonum.org/v1/plot/plotter"
	"gonum.org/v1/plot/vg"
)

// User 结构体定义用户数据
type User struct {
	Name        string
	SalesTarget float64
	Sales       float64
}

func main() {
	// 定义用户数据
	users := []User{
		{Name: "User1", SalesTarget: 3000, Sales: 555},
		{Name: "User2", SalesTarget: 3000, Sales: 1200},
		{Name: "User3", SalesTarget: 3000, Sales: 2500},
	}

	// 创建新的图表
	p := plot.New()
	p.Title.Text = "Sales Comparison"
	p.Y.Label.Text = "Amount"
	p.X.Label.Text = "Users"

	// 设置X轴的标签
	p.NominalX("User1", "User2", "User3")

	// 创建销售目标和实际销售额的数据点
	targetPoints := make(plotter.Values, len(users))
	salesPoints := make(plotter.Values, len(users))
	for i, user := range users {
		targetPoints[i] = user.SalesTarget
		salesPoints[i] = user.Sales
	}

	// 创建销售目标的柱状图
	targetBar, err := plotter.NewBarChart(targetPoints, vg.Points(40))
	if err != nil {
		log.Fatal(err)
	}
	targetBar.LineStyle.Width = vg.Length(0)
	targetBar.Color = plotter.DefaultLineStyle.Color
	targetBar.Offset = -vg.Points(20) // 偏移以并排显示

	// 创建实际销售额的柱状图
	salesBar, err := plotter.NewBarChart(salesPoints, vg.Points(40))
	if err != nil {
		log.Fatal(err)
	}
	salesBar.LineStyle.Width = vg.Length(0)
	salesBar.Color = plotter.DefaultLineStyle.Color
	salesBar.Offset = vg.Points(20) // 偏移以并排显示

	// 添加柱状图到图表
	p.Add(targetBar, salesBar)
	p.Legend.Add("Sales Target", targetBar)
	p.Legend.Add("Actual Sales", salesBar)
	p.Legend.Top = true

	// 保存为PNG文件
	if err := p.Save(6*vg.Inch, 4*vg.Inch, "sales_comparison.png"); err != nil {
		log.Fatal(err)
	}
}

这段代码会生成一个名为sales_comparison.png的图像文件,其中包含并排的柱状图,分别显示每个用户的销售目标和实际销售额。图表包括标题、轴标签和图例,便于比较数据。

如果需要交互式图表,可以考虑使用go-echarts库结合Web服务器在浏览器中显示。以下是使用go-echarts的示例:

首先安装库:

go get github.com/go-echarts/go-echarts/v2

然后运行此代码,它会在本地启动一个HTTP服务器,在浏览器中打开http://localhost:8081查看图表。

package main

import (
	"math/rand"
	"net/http"
	"time"

	"github.com/go-echarts/go-echarts/v2/charts"
	"github.com/go-echarts/go-echarts/v2/opts"
)

// generateBarItems 生成柱状图数据
func generateBarItems(values []float64) []opts.BarData {
	items := make([]opts.BarData, 0)
	for _, v := range values {
		items = append(items, opts.BarData{Value: v})
	}
	return items
}

func httpserver(w http.ResponseWriter, _ *http.Request) {
	// 创建柱状图实例
	bar := charts.NewBar()
	bar.SetGlobalOptions(
		charts.WithTitleOpts(opts.Title{Title: "Sales Comparison"}),
		charts.WithTooltipOpts(opts.Tooltip{Show: true}),
		charts.WithLegendOpts(opts.Legend{Show: true}),
	)

	// 定义用户数据
	users := []string{"User1", "User2", "User3"}
	salesTargets := []float64{3000, 3000, 3000}
	actualSales := []float64{555, 1200, 2500}

	// 设置X轴
	bar.SetXAxis(users).
		AddSeries("Sales Target", generateBarItems(salesTargets)).
		AddSeries("Actual Sales", generateBarItems(actualSales))
	bar.Render(w)
}

func main() {
	http.HandleFunc("/", httpserver)
	http.ListenAndServe(":8081", nil)
}

这个示例会生成一个交互式柱状图,允许用户在浏览器中查看和比较数据。图表包括悬停提示、图例和动态渲染。

回到顶部