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"
)
func BarChartRender(opt ChartOption) (*Draw, error) {
result, err := chartBasicRender(&opt)
if err != nil {
return nil, err
}
func barChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error) {
d := result.d
bd, err := NewDraw(DrawOption{

View file

@ -30,6 +30,12 @@ import (
"github.com/wcharczuk/go-chart/v2/drawing"
)
const (
ChartTypeLine = "line"
ChartTypeBar = "bar"
ChartTypePie = "pie"
)
type SeriesData struct {
Value float64
Style chart.Style
@ -158,6 +164,42 @@ type basicRenderResult struct {
yRange *Range
d *Draw
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) {

View file

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