go-echarts 库使用

简介: go-echarts 库使用

go-echarts


chart 包是一个简单的本地图表库,支持时间序列和连续折线。是数据可视化第三方库。

安装


$ go get -u github.com/go-echarts/go-echarts/...
# 因为 gomod 的特殊的版本管理方式,使用 go get 方式并不能直接使用 v2 go-echarts 🐶
# 不过可以通过以下方法使用新版本...
$ cd $go-echarts-project
$ mkdir v2 && mv charts components datasets opts render templates types v2


go.mod


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


echart 特性

  • 简洁的 API 设计,使用如丝滑般流畅
  • 囊括了 25+ 种常见图表,应有尽有
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快地上手项目
  • 多达 400+ 地图,为地理数据可视化提供强有力的支持

直方图:


package go_chart
import (
 "math/rand"
 "os"
 "testing"
 "github.com/go-echarts/go-echarts/v2/charts"
 "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 < 7; i++ {
  items = append(items, opts.BarData{Value: rand.Intn(300)})
 }
 return items
}
func TestBar(t *testing.T) {
 // create a new bar instance
 bar := charts.NewBar()
 // set some global options like Title/Legend/ToolTip or anything else
 bar.SetGlobalOptions(charts.WithTitleOpts(opts.Title{
  Title:    "My first bar chart generated by go-echarts",
  Subtitle: "It's extremely easy to use, right?",
 }))
 // Put data into instance
 bar.SetXAxis([]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}).
  AddSeries("Category A", generateBarItems()).
  AddSeries("Category B", generateBarItems())
 // Where the magic happens
 f, _ := os.Create("bar.html")
 bar.Render(f)
}

运行结果:

image.png

饼图

package go_chart
import (
 "math/rand"
 "os"
 "testing"
 "github.com/go-echarts/go-echarts/v2/charts"
 "github.com/go-echarts/go-echarts/v2/opts"
)
var (
 itemCntPie = 4
 seasons    = []string{"Spring", "Summer", "Autumn ", "Winter"}
)
func generatePieItems() []opts.PieData {
 items := make([]opts.PieData, 0)
 for i := 0; i < itemCntPie; i++ {
  items = append(items, opts.PieData{Name: seasons[i], Value: rand.Intn(100)})
 }
 return items
}
func pieBase() *charts.Pie {
 pie := charts.NewPie()
 pie.SetGlobalOptions(
  charts.WithTitleOpts(opts.Title{Title: "basic pie example"}),
 )
 pie.AddSeries("pie", generatePieItems())
 return pie
}
func pieShowLabel() *charts.Pie {
 pie := charts.NewPie()
 pie.SetGlobalOptions(
  charts.WithTitleOpts(opts.Title{Title: "label options"}),
 )
 pie.AddSeries("pie", generatePieItems()).
  SetSeriesOptions(charts.WithLabelOpts(
   opts.Label{
    Show:      true,
    Formatter: "{b}: {c}",
   }),
  )
 return pie
}
func pieRadius() *charts.Pie {
 pie := charts.NewPie()
 pie.SetGlobalOptions(
  charts.WithTitleOpts(opts.Title{Title: "Radius style"}),
 )
 pie.AddSeries("pie", generatePieItems()).
  SetSeriesOptions(
   charts.WithLabelOpts(opts.Label{
    Show:      true,
    Formatter: "{b}: {c}",
   }),
   charts.WithPieChartOpts(opts.PieChart{
    Radius: []string{"40%", "75%"},
   }),
  )
 return pie
}
func pieRoseArea() *charts.Pie {
 pie := charts.NewPie()
 pie.SetGlobalOptions(
  charts.WithTitleOpts(opts.Title{
   Title: "Rose(Area)",
  }),
 )
 pie.AddSeries("pie", generatePieItems()).
  SetSeriesOptions(
   charts.WithLabelOpts(opts.Label{
    Show:      true,
    Formatter: "{b}: {c}",
   }),
   charts.WithPieChartOpts(opts.PieChart{
    Radius:   []string{"40%", "75%"},
    RoseType: "area",
   }),
  )
 return pie
}
func pieRoseRadius() *charts.Pie {
 pie := charts.NewPie()
 pie.SetGlobalOptions(
  charts.WithTitleOpts(opts.Title{
   Title: "Rose(Radius)",
  }),
 )
 pie.AddSeries("pie", generatePieItems()).
  SetSeriesOptions(
   charts.WithLabelOpts(opts.Label{
    Show:      true,
    Formatter: "{b}: {c}",
   }),
   charts.WithPieChartOpts(opts.PieChart{
    Radius:   []string{"30%", "75%"},
    RoseType: "radius",
   }),
  )
 return pie
}
func pieRoseAreaRadius() *charts.Pie {
 pie := charts.NewPie()
 pie.SetGlobalOptions(
  charts.WithTitleOpts(opts.Title{
   Title: "Rose(Area/Radius)",
  }),
 )
 pie.AddSeries("area", generatePieItems()).
  SetSeriesOptions(
   charts.WithPieChartOpts(opts.PieChart{
    Radius:   []string{"30%", "75%"},
    RoseType: "area",
    Center:   []string{"25%", "50%"},
   }),
  )
 pie.AddSeries("pie", generatePieItems()).
  SetSeriesOptions(
   charts.WithLabelOpts(opts.Label{
    Show:      true,
    Formatter: "{b}: {c}",
   }),
   charts.WithPieChartOpts(opts.PieChart{
    Radius:   []string{"30%", "75%"},
    RoseType: "radius",
    Center:   []string{"75%", "50%"},
   }),
  )
 return pie
}
func pieInPie() *charts.Pie {
 pie := charts.NewPie()
 pie.SetGlobalOptions(
  charts.WithTitleOpts(opts.Title{
   Title: "pie in pie",
  }),
 )
 pie.AddSeries("area", generatePieItems(),
  charts.WithLabelOpts(opts.Label{
   Show:      true,
   Formatter: "{b}: {c}",
  }),
  charts.WithPieChartOpts(opts.PieChart{
   Radius:   []string{"50%", "55%"},
   RoseType: "area",
  }),
 )
 pie.AddSeries("radius", generatePieItems(),
  charts.WithPieChartOpts(opts.PieChart{
   Radius:   []string{"0%", "45%"},
   RoseType: "radius",
  }),
 )
 return pie
}
type PieExamples struct{}
//func TestPie(t *testing.T) {
// //(PieExamples)
// page := components.NewPage()
// page.AddCharts(
//  pieBase(),
//  pieShowLabel(),
//  pieRadius(),
//  pieRoseArea(),
//  pieRoseRadius(),
//  pieRoseAreaRadius(),
//  pieInPie(),
// )
// f, err := os.Create("examples/html/pie.html")
// if err != nil {
//  panic(err)
// }
// page.Render(io.MultiWriter(f))
//}
func TestPie(t *testing.T) {
 // create a new bar instance
 pie := pieBase()
 // Where the magic happens
 f, _ := os.Create("pie.html")
 pie.Render(f)
}

image.png

相关文章
|
1月前
|
Go API 数据安全/隐私保护
Go语言标准库概览:构建高效、可靠的软件开发基石
【2月更文挑战第8天】Go语言标准库是Go语言生态系统的重要组成部分,它为开发者提供了一系列高效、可靠的工具和函数,帮助开发者构建高质量的软件应用。本文将对Go语言标准库进行概览,介绍其组成特点、设计哲学以及使用场景与优势,帮助读者更好地理解和应用Go语言标准库。
|
1月前
|
测试技术 Go 开发者
go-carbon v2.3.8 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。
36 0
|
1月前
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
使用Go语言和chromedp库下载Instagram图片:简易指南
|
1月前
|
Go 索引
Go 1.22 slices 库的更新:高效拼接、零化处理和越界插入优化
本文详细介绍了 Go 1.22 版本中 slices 库的更新内容,总结起来有三个方面:新增了 Concat 函数、对部分函数新增了零化处理的逻辑和对 Insert 函数进行了越界插入优化
124 1
Go 1.22 slices 库的更新:高效拼接、零化处理和越界插入优化
|
6天前
|
NoSQL Go Redis
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
9 1
|
21天前
|
NoSQL 安全 Go
Go 语言 mongox 库:简化操作、安全、高效、可扩展、BSON 构建
go mongox 是一个基于泛型的库,扩展了 MongoDB 的官方库。通过泛型技术,它实现了结构体与 MongoDB 集合的绑定,旨在提供类型安全和简化的数据操作。 go mongox 还引入链式调用,让文档操作更流畅,并且提供了丰富的 BSON 构建器和内置函数,简化了 BSON 数据的构建。 此外,它还支持插件化编程和内置多种钩子函数,为数据库操作前后的自定义逻辑提供灵活性,增强了应用的可扩展性和可维护性。
54 6
|
29天前
|
Java 测试技术 Go
使用go的内置运行时库调试和优化程序
【5月更文挑战第18天】在本文中,作者探讨了如何为运行时程序添加剖析支持以优化性能。他们面临的问题是一个程序需要找出平方根为整数且逆序平方等于其逆序的数字。他们首先展示了原始代码,然后使用`runtime`库进行优化,将计算和调用功能分离,同时记录CPU和内存使用情况。
36 4
|
26天前
|
JSON Java Go
使用go语言中的内置库调试性能
【5月更文挑战第21天】本文介绍Go 语言提供了内置的 expvar 模块来输出度量数据,帮助定位性能瓶颈。与 pprof 不同,expvar 专注于应用的宏观状态,通过 HTTP 接口 `/debug/vars` 提供标准的 JSON 格式数据,包括自定义度量和内存统计等。通过 expvar,开发者可以轻松监控应用状态,如消息处理速率、内存使用等,而无需像 C++ 或 Java 那样手动实现。
31 0
使用go语言中的内置库调试性能
|
1月前
|
SQL 开发框架 .NET
你确定不学?Go标准库之 text/template
你确定不学?Go标准库之 text/template
23 2
|
1月前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
112 1