内容简介:go-charts go-charts基于go-chart,提供更简单方便的形式生成数据图表,支持svg与png两种方式的输出,支持三种主题light, dark以及grafana。 Apache ECharts在前端开发中得到众多开发者的认可,因此go-charts提供...
go-charts
go-charts基于go-chart,提供更简单方便的形式生成数据图表,支持svg
与png
两种方式的输出,支持三种主题light
, dark
以及grafana
。
Apache ECharts
在前端开发中得到众多开发者的认可,因此go-charts
提供了兼容Apache ECharts
的配置参数,简单快捷的生成相似的图表(svg
或png
),方便插入至Email或分享使用。下面为常用的图表截图(主题为light与grafana):
支持图表类型
暂仅支持三种的图表类型:line
, bar
以及 pie
示例
下面的示例为go-charts
两种方式的参数配置:golang的参数配置、echarts的JSON配置,输出相同的折线图。 更多的示例参考:./examples/
目录
package main
import (
"os"
"path/filepath"
charts "github.com/vicanso/go-charts"
)
func writeFile(file string, buf []byte) error {
tmpPath := "./tmp"
err := os.MkdirAll(tmpPath, 0700)
if err != nil {
return err
}
file = filepath.Join(tmpPath, file)
err = os.WriteFile(file, buf, 0600)
if err != nil {
return err
}
return nil
}
func chartsRender() ([]byte, error) {
d, err := charts.Render(charts.ChartOption{
Type: charts.ChartOutputPNG,
Title: charts.TitleOption{
Text: "Line",
},
XAxis: charts.NewXAxisOption([]string{
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sun",
}),
SeriesList: charts.SeriesList{
charts.NewSeriesFromValues([]float64{
150,
230,
224,
218,
135,
147,
260,
}),
},
})
if err != nil {
return nil, err
}
return d.Bytes()
}
func echartsRender() ([]byte, error) {
return charts.RenderEChartsToPNG(`{
"title": {
"text": "Line"
},
"xAxis": {
"data": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
},
"series": [
{
"data": [150, 230, 224, 218, 135, 147, 260]
}
]
}`)
}
type Render func() ([]byte, error)
func main() {
m := map[string]Render{
"charts-line.png": chartsRender,
"echarts-line.png": echartsRender,
}
for name, fn := range m {
buf, err := fn()
if err != nil {
panic(err)
}
err = writeFile(name, buf)
if err != nil {
panic(err)
}
}
}
ECharts参数说明
名称有[]的参数非echarts的原有参数,为go-charts
的新增参数,可根据实际使用场景添加。
[type]
画布类型,支持svg
与png
,默认为svg
[theme]
颜色主题,支持dark
、light
以及grafana
模式,默认为light
[fontFamily]
字体,全局的字体设置[padding]
图表的内边距,单位px。支持以下几种模式的设置padding: 5
设置内边距为5padding: [5, 10]
设置上下的内边距为 5,左右的内边距为 10padding:[5, 10, 5, 10]
分别设置上右下左
边距
[box]
图表的区域,以{"left": Int, "right": Int, "top": Int, "bottom": Int}的形式配置[width]
画布宽度,默认为600[height]
画布高度,默认为400title
图表标题,包括标题内容、高度、颜色等title.text
标题文本,支持以\\n
的形式换行title.subtext
副标题文本,支持以\\n
的形式换行title.left
标题与容器左侧的距离,可设置为left
,right
,center
,20%
以及20
这样的具体数值title.top
标题与容器顶部的距离,暂仅支持具体数值,如20
title.textStyle.color
标题文字颜色title.textStyle.fontSize
标题文字字体大小title.textStyle.fontFamily
标题文字的字体系列,需要注意此配置是会影响整个图表的字体
xAxis
直角坐标系grid中的x轴,由于go-charts仅支持单一个x轴,因此若参数为数组多个x轴,只使用第一个配置xAxis.boundaryGap
坐标轴两边留白策略,仅支持三种设置方式null
,true
或者false
。null
或true
时则数据点展示在两个刻度中间xAxis.splitNumber
坐标轴的分割段数,需要注意的是这个分割段数只是个预估值,最后实际显示的段数会在这个基础上根据分割后坐标轴刻度显示的易读程度作调整xAxis.data
x轴的展示文案,暂只支持字符串数组,如["Mon", "Tue"],其数量需要与展示点一致
yAxis
直角坐标系grid中的y轴,最多支持两个y轴yAxis.min
坐标轴刻度最小值,若不设置则自动计算yAxis.max
坐标轴刻度最大值,若不设置则自动计算yAxis.axisLabel.formatter
刻度标签的内容格式器,如"formatter": "{value} kg"
yAxis.axisLine.lineStyle.color
坐标轴颜色
legend
图表中不同系列的标记legend.show
图例是否显示,如果不需要展示需要设置为false
legend.data
图例的数据数组,为字符串数组,如["Email", "Video Ads"]legend.align
图例标记和文本的对齐,可设置为left
或者right
,默认为标记靠左left
legend.padding
legend的padding,配置方式与图表的padding
一致legend.left
legend离容器左侧的距离,其值可以为具体的像素值(20)或百分比(20%)、left
或者right
legend.top
legend离容器顶部的距离,暂仅支持数值形式
series
图表的数据项列表series.name
图表的名称,与legend.data
对应,两者只只设置其一series.type
图表的展示类型,暂支持line
,bar
以及pie
,需要注意pie
只能单独使用series.radius
饼图的半径值,如50%
,默认为40%
series.yAxisIndex
该数据项使用的y轴,默认为0,对yAxis的配置对应series.label.show
是否显示文本标签(默认为对应的值)series.label.distance
距离图形元素的距离series.label.color
文本标签的颜色series.itemStyle.color
该数据项展示时使用的颜色series.markPoint
图表的标注配置series.markPoint.symbolSize
标注的大小,默认为30series.markPoint.data
标注类型,仅支持数组形式,其类型只支持max
与min
,如:`[{"type": "max"}, {"type": "min"}]series.markLine
图表的标线配置series.markPoint.data
标线类型,仅支持数组形式,其类型只支持max
、min
以及average
,如:`[{"type": "max"}, {"type": "min"}, {"type": "average"}]series.data
数据项对应的数据数组,支持以下形式的数据:数值
常用形式,数组数据为浮点数组,如[1.1, 2,3, 5.2]结构体
pie图表或bar图表中指定样式使用,如[{"value": 1048, "name": "Search Engine"},{"value": 735,"name": "Direct"}]
[children]
嵌套的子图表参数列表,图表支持嵌套的形式=
性能
简单的图表生成PNG在20ms左右,而SVG的性能则更快,性能上比起使用chrome headless
加载echarts
图表展示页面再截图生成的方式大幅度提升,满足简单的图表生成需求。
BenchmarkMultiChartPNGRender-8 78 15216336 ns/op 2298308 B/op 1148 allocs/op
BenchmarkMultiChartSVGRender-8 367 3356325 ns/op 20597282 B/op 3088 allocs/op
中文字符
默认使用的字符为roboto
为英文字体库,因此如果需要显示中文字符需要增加中文字体库,InstallFont
函数可添加对应的字体库,成功添加之后则指定title.textStyle.fontFamily
即可。 在浏览器中使用svg
时,如果指定的fontFamily
不支持中文字符,展示的中文并不会乱码,但是会导致在计算字符宽度等错误。
以上所述就是小编给大家介绍的《go-charts 1.0 版本发布:支持更多的图表样例及主题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 老牌 JavaScript 图表库 Highcharts 发布 6.0.5 版本
- 经典 JavaScript 图表库 Highcharts 发布 6.1.1 版本
- 在线图表编辑工具 draw.io 9.5.5 版本发布
- 在线图表编辑工具 draw.io 10.1.8 版本发布
- 在线图表编辑工具 draw.io 10.2.1 版本发布
- 在线图表编辑工具 draw.io 10.2.9 版本发布
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。