refactor: adjust chart render function

This commit is contained in:
vicanso 2022-02-02 08:02:32 +08:00
parent 6ae7e1d1b3
commit 5ccc497ad3
3 changed files with 49 additions and 15 deletions

View file

@ -26,11 +26,7 @@ import (
"github.com/wcharczuk/go-chart/v2" "github.com/wcharczuk/go-chart/v2"
) )
func BarChartRender(opt ChartOption) (*Draw, error) { func barChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error) {
result, err := chartBasicRender(&opt)
if err != nil {
return nil, err
}
d := result.d d := result.d
bd, err := NewDraw(DrawOption{ bd, err := NewDraw(DrawOption{

View file

@ -30,6 +30,12 @@ import (
"github.com/wcharczuk/go-chart/v2/drawing" "github.com/wcharczuk/go-chart/v2/drawing"
) )
const (
ChartTypeLine = "line"
ChartTypeBar = "bar"
ChartTypePie = "pie"
)
type SeriesData struct { type SeriesData struct {
Value float64 Value float64
Style chart.Style Style chart.Style
@ -154,10 +160,46 @@ func (r Range) Values() []string {
} }
type basicRenderResult struct { type basicRenderResult struct {
xRange *Range xRange *Range
yRange *Range yRange *Range
d *Draw d *Draw
titleBox chart.Box titleBox chart.Box
seriesOffset int
}
func ChartRender(opt ChartOption) (*Draw, error) {
result, err := chartBasicRender(&opt)
if err != nil {
return nil, err
}
lineSeries := make([]Series, 0)
barSeries := make([]Series, 0)
for _, item := range opt.SeriesList {
switch item.Type {
case ChartTypeBar:
barSeries = append(barSeries, item)
default:
lineSeries = append(lineSeries, item)
}
}
if len(barSeries) != 0 {
o := opt
o.SeriesList = barSeries
_, err = barChartRender(o, result)
if err != nil {
return nil, err
}
}
if len(lineSeries) != 0 {
o := opt
o.SeriesList = lineSeries
result.seriesOffset = len(barSeries)
_, err = lineChartRender(o, result)
if err != nil {
return nil, err
}
}
return result.d, nil
} }
func chartBasicRender(opt *ChartOption) (*basicRenderResult, error) { func chartBasicRender(opt *ChartOption) (*basicRenderResult, error) {

View file

@ -27,11 +27,7 @@ import (
"github.com/wcharczuk/go-chart/v2/drawing" "github.com/wcharczuk/go-chart/v2/drawing"
) )
func LineChartRender(opt ChartOption) (*Draw, error) { func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error) {
result, err := chartBasicRender(&opt)
if err != nil {
return nil, err
}
d := result.d d := result.d
theme := NewTheme(opt.Theme) theme := NewTheme(opt.Theme)
@ -55,7 +51,7 @@ func LineChartRender(opt ChartOption) (*Draw, error) {
Y: y, Y: y,
X: xRange.getWidth(float64(j)), X: xRange.getWidth(float64(j)),
}) })
seriesColor := theme.GetSeriesColor(i) seriesColor := theme.GetSeriesColor(i + result.seriesOffset)
dotFillColor := drawing.ColorWhite dotFillColor := drawing.ColorWhite
if theme.IsDark() { if theme.IsDark() {
dotFillColor = seriesColor dotFillColor = seriesColor