feat: pie chart render function

This commit is contained in:
vicanso 2022-02-03 21:00:01 +08:00
parent 445a781b04
commit eb45c6479e
7 changed files with 164 additions and 24 deletions

View file

@ -23,6 +23,7 @@
package charts
import (
"errors"
"math"
"github.com/dustin/go-humanize"
@ -168,21 +169,37 @@ type basicRenderResult struct {
}
func ChartRender(opt ChartOption) (*Draw, error) {
result, err := chartBasicRender(&opt)
if err != nil {
return nil, err
if len(opt.SeriesList) == 0 {
return nil, errors.New("series can not be nil")
}
lineSeries := make([]Series, 0)
barSeries := make([]Series, 0)
isPieChart := false
for index, item := range opt.SeriesList {
item.index = index
switch item.Type {
case ChartTypePie:
isPieChart = true
case ChartTypeBar:
barSeries = append(barSeries, item)
default:
lineSeries = append(lineSeries, item)
}
}
// 如果指定了pie则以pie的形式处理不支持多类型图表
// pie不需要axis
if isPieChart {
opt.XAxis.Hidden = true
opt.YAxis.Hidden = true
}
result, err := chartBasicRender(&opt)
if err != nil {
return nil, err
}
if isPieChart {
return pieChartRender(opt, result)
}
if len(barSeries) != 0 {
o := opt
o.SeriesList = barSeries
@ -231,18 +248,26 @@ func chartBasicRender(opt *ChartOption) (*basicRenderResult, error) {
return nil, err
}
// xAxis
xAxisHeight, xRange, err := drawXAxis(d, &opt.XAxis)
if err != nil {
return nil, err
xAxisHeight := 0
var xRange *Range
if !opt.XAxis.Hidden {
// xAxis
xAxisHeight, xRange, err = drawXAxis(d, &opt.XAxis)
if err != nil {
return nil, err
}
}
// 暂时仅支持单一yaxis
yRange, err := drawYAxis(d, opt, xAxisHeight, chart.Box{
Top: titleBox.Height(),
})
if err != nil {
return nil, err
var yRange *Range
if !opt.YAxis.Hidden {
yRange, err = drawYAxis(d, opt, xAxisHeight, chart.Box{
Top: titleBox.Height(),
})
if err != nil {
return nil, err
}
}
return &basicRenderResult{
xRange: xRange,