go-echarts基础使用方法

你是否曾为在Go项目中创建可视化图表而烦恼?是否羡慕Python中Matplotlib的便捷,却苦于Go生态中图表库的匮乏?今天为大家介绍一个强大的Go图表库:go-echarts,让你在Go中也能轻松创建交互式、美观的图表!

什么是go-echarts?

go-echarts是基于Apache ECharts(百度开源的数据可视化库)的Go语言实现。它通过Go代码生成ECharts配置,让你能够用纯Go的方式创建各种复杂的图表,并在Web页面中展示。

为什么选择go-echarts?

  • 完全Go原生:无需JS知识即可创建图表

  • 丰富的图表类型:支持折线图、柱状图、饼图、散点图等30+种图表

  • 高度可定制:可以精细调整图表的每个细节

  • 交互式体验:生成的图表支持缩放、拖拽、提示框等交互

  • 轻量级:依赖简单,易于集成

安装go-echarts

复制代码
go get -u github.com/go-echarts/go-echarts/v2/...

创建第一个图表

让我们从一个简单的柱状图开始:

画出上面柱状图非常简单,如果你使用过baidu开源的echarts,那就更easy了,上面图表主要包含几块:

  • 标题+副标题

  • X轴数据

  • Y轴数据

只要在代码中将以上三类数据设置完成,曲线就能渲染出来,代码如下:

Go 复制代码
package main
import (
    "math/rand"
    "os"
    "time"
    "github.com/go-echarts/go-echarts/v2/charts"
    "github.com/go-echarts/go-echarts/v2/opts"
)
func generateBarItems() []opts.BarData {
    items := make([]opts.BarData, 0)
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
    for i := 0; i < 7; i++ {
        items = append(items, opts.BarData{Value: r.Intn(100)})
    }
    return items
}
func barBasic() *charts.Bar {
    bar := charts.NewBar()
    weeks := []string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
    bar.SetGlobalOptions(
        charts.WithTitleOpts(opts.Title{Title: "每周销量统计", Subtitle: "苹果 vs 香蕉."}),
    )
    bar.SetXAxis(weeks).
        AddSeries("苹果", generateBarItems()).
        AddSeries("香蕉", generateBarItems())
    return bar
}
func CreateBar() {
    bar := barBasic()
    f, _ := os.Create("bar.html")
    defer f.Close()
    bar.Render(f)
}
func main() {
    CreateBar()
}

折线图

代码如下:

Go 复制代码
func generateLineData() []opts.LineData {
    items := make([]opts.LineData, 0)
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
    for i := 0; i < 6; i++ {
        items = append(items, opts.LineData{Value: r.Intn(10000)})
    }
    return items
}
func CreateLineChart() {
    line := charts.NewLine()
    line.SetGlobalOptions(
        charts.WithTitleOpts(opts.Title{
            Title: "小度眼镜 vs 小度智能音箱",
        }),
        charts.WithTooltipOpts(opts.Tooltip{Show: opts.Bool(true)}),
    )
    line.SetXAxis([]string{"1月", "2月", "3月", "4月", "5月", "6月"}).
        AddSeries("小度眼镜", generateLineData()).
        AddSeries("小度智能音箱", generateLineData()).
        SetSeriesOptions(charts.WithLineChartOpts(opts.LineChart{Smooth: opts.Bool(true)}))
    f, _ := os.Create("line.html")
    line.Render(f)
}

饼图

代码如下:

Go 复制代码
func CreatePieChart() {
    pie := charts.NewPie()
    pie.SetGlobalOptions(
        charts.WithTitleOpts(opts.Title{
            Title: "用户设备分布",
        }),
    )
    pie.AddSeries("设备", []opts.PieData{
        {Name: "手机", Value: 1230},
        {Name: "平板", Value: 456},
        {Name: "电脑", Value: 789},
        {Name: "其他", Value: 123},
    })
    f, _ := os.Create("pie.html")
    pie.Render(f)
}

综上三个图表可以看出,go-echarts在生成图表的代码上,主要包含以下四个部分:

  • 创建echarts对象:a := charts.NewXxxx()。

  • 设定全局配置:a.SetGlobalOptions()。

  • 设定图表数据:a.SetXAxis()、a.AddSeries()。

  • 渲染、画图:a.Render()。

各个图表的生成,流程都如此,不同的就是进行各种配置,让图标的样式更加丰富,更加美观,比如有的同学喜欢使用暗黑主题,这样图表显得更加高大上一些,那么只需要加个全局配置即可:

代码:

Go 复制代码
line.SetGlobalOptions(
        charts.WithTitleOpts(opts.Title{
            Title: "小度眼镜 vs 小度智能音箱",
        }),
        charts.WithTooltipOpts(opts.Tooltip{Show: opts.Bool(true)}),
        charts.WithInitializationOpts(opts.Initialization{
            Theme: "dark", // 使用暗黑主题
        }),
    )

预告

大家应该注意到了,上面的图表都是生成在本地了,也就是说是在本地创建了一个个的html,那如何能在线生成这些图表,通过http api的方式就能看到呢,下一期介绍下go-echarts与gin框架的结合,我们通过http的api就可以生成、查看自己生成的图表。

上面所使用的代码全部在这里,需要的同学可以查阅:

Go 复制代码
https://github.com/liupengh3c/career/tree/main/go-echarts

欢迎小伙伴们点赞、关注,一起写代码、学历史、跑跑步~~~~~~~~~~。

往期推荐

测出这组数据,就可以放心使用RabbitMQ了

golang模板的详细使用方法

自动驾驶数仓-Base时间片与多个交集时间片的多维度合并算法

自动驾驶数仓开发,一定要知道时间片交集的这几种情况。

Golang泛型使用入门

Web开发的身份证:JWT(json web token)令牌使用方法

Web服务压力测试工具hey(golang)学习二:架构设计(源码学习)

Web服务压力测试工具hey学习一:使用方法

云端【多维度限流】技术方案设计,为服务稳定保驾护航

自动驾驶数据仓库:对时间片进行合并的小算法。

一个有线上问题带来的知识点:Python日志打印

一个实际上线的项目:Elastic检索库历史数据清理

Elastic:索引生命周期管理(Index Lifecycle Management)-减轻ES存储压力

Elasticsearch:delete_by_query使用方法

Python Tortoise ORM库的基础操作介绍

RabbitMq:消费侧未限流导致的rabbitmq报错异常,消息不能正常消费。

一个读写excel的简单程序(golang)

一个异步架构设计:批量消费RabbitMQ,批量写入Elasticsearch(golang实现)

一个优秀的rabbitmq消费者(consumer)设计,可直接上线使用。

不告诉你Sanic Blueprints、Middleware是如此的优雅。

Python web框架sanic+tortoise服务框架搭建(MVP版本)

命令行参数的艺术:Python、Golang、C++技术实现

supervisor,你理应知道。

借助tritonserver完成gpt2模型的本地私有化部署

微信小程序文章列表焕新颜:从丑小鸭到白天鹅的华丽蜕变

趴菜就是趴菜,捯饬3天,才搞出小程序头部banner,还是个半成品

小程序实现文章列表点击跳转公众号详情页

前端小趴菜终于把公众号和开发的不能再磕碜的小程序首页关联上了

Elasticsearch高级检索对决:search_after+pit和scroll,谁才是最佳选择?

【续】开发triton客户端,访问clip-vit-large-patch14模型抽取图片特征。

NVIDIA tritonserver实现CLIP-ViT模型工程化:轻松获取图片特征(by grpc or http)

Elasticsearch的pit(point in time)到底是个啥玩意?

一文揭秘:Golang+Elasticsearch轻松搭建AI时代的图片搜索服务

吭哧一天才搞定:elasticsearch向量检索需要的数据集以及768维向量生成

Elasticsearch滚动查询官方推荐方案:search_after检索实现(golang)

protobuf c++开发快速上手指南

轻松搭建Elasticsearch:Mac系统下的安装指南

Kibana for Mac:极简安装教程

项目踩坑记--RabbitMq连接过多导致的内存打满

ElasticSearch向量检索技术方案实现

elasticsearch查询语言DSL构建包使用及实现原理(golang)

Elasticsearch写入、读取、更新、删除以及批量操作(golang)

golang线程池ants-实现架构

golang操作mysql之利器-gorm

tfrecord文件介绍、读取、写入介绍

golang的heap profile是抽风了吗

学到心理学的这3个知识点,让你在辅导孩子作业时不再鸡飞狗跳,一地鸡毛。

人生,当活成他的样子:竹林七贤之首-嵇康

读《崇祯皇帝传》之一:夹缝求生,初登大宝

2025越山向海张家口站:从草原天路到崇礼142.6公里,我们一起跑过。

大同华严寺:受人民爱戴的耿市长还会回来吗?薄伽教藏的合掌漏齿菩萨你知道是谁吗?

云冈石窟:翻开这本距今1565年、与天地同久长的石头史书,感受北魏王朝雕刻艺术的巅峰之作。

我在百度的这10年~~

相关推荐
say_fall1 小时前
C语言编程实战:每日一题:用队列实现栈
c语言·开发语言·redis
董世昌411 小时前
前端跨域问题:原理、8 种解决方案与实战避坑指南
开发语言·前端·javascript
Tony Bai1 小时前
Go 2025云原生与可观测年度报告:底层性能革新与生态固防
开发语言·后端·云原生·golang
铅笔侠_小龙虾1 小时前
Java 模拟实现 Vue
java·开发语言·vue.js
九天轩辕1 小时前
基于 Qt 和 libimobiledevice 的跨平台 iOS 设备管理工具开发实践
开发语言·qt·ios
程序喵大人1 小时前
C++ MCP 服务器实现
开发语言·c++·项目·mcp服务器
小尧嵌入式1 小时前
QT软件开发知识点流程及文本转语音工具
开发语言·c++·qt
雨季6661 小时前
Flutter 智慧金融零售服务平台:跨端协同升级金融便民体验
开发语言·javascript·ecmascript
专业开发者1 小时前
MTK GNSS 可见性控制指南
开发语言·python·物联网