refactor: adjust chart render function
This commit is contained in:
parent
6ae7e1d1b3
commit
5ccc497ad3
3 changed files with 49 additions and 15 deletions
|
|
@ -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{
|
||||||
|
|
|
||||||
50
chart.go
50
chart.go
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue