feat: support make point and make line

This commit is contained in:
vicanso 2022-02-10 23:24:30 +08:00
parent fd05250305
commit e558634dda
16 changed files with 308 additions and 51 deletions

View file

@ -27,7 +27,7 @@ import (
"github.com/wcharczuk/go-chart/v2/drawing"
)
func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error) {
func lineChartRender(opt ChartOption, result *basicRenderResult) ([]*markPointRenderOption, error) {
theme := NewTheme(opt.Theme)
@ -44,9 +44,29 @@ func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error)
r := d.Render
xRange := result.xRange
for i, series := range opt.SeriesList {
markPointRenderOptions := make([]*markPointRenderOption, 0)
for i, s := range opt.SeriesList {
// 由于series是for range为同一个数据因此需要clone
// 后续需要使用如mark point
series := s
index := series.index
if index == 0 {
index = i
}
seriesColor := theme.GetSeriesColor(index)
yRange := result.getYRange(series.YAxisIndex)
points := make([]Point, len(series.Data))
// mark line
markLineRender(&markLineRenderOption{
Draw: d,
FillColor: seriesColor,
FontColor: theme.GetTextColor(),
StrokeColor: seriesColor,
Font: opt.Font,
Series: &series,
Range: yRange,
})
for j, item := range series.Data {
y := yRange.getRestHeight(item.Value)
@ -71,11 +91,7 @@ func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error)
textBox := r.MeasureText(text)
d.text(text, x-textBox.Width()>>1, y-5)
}
index := series.index
if index == 0 {
index = i
}
seriesColor := theme.GetSeriesColor(index)
dotFillColor := drawing.ColorWhite
if theme.IsDark() {
dotFillColor = seriesColor
@ -88,7 +104,8 @@ func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error)
DotFillColor: dotFillColor,
})
// draw mark point
markPointRender(d, markPointRenderOption{
markPointRenderOptions = append(markPointRenderOptions, &markPointRenderOption{
Draw: d,
FillColor: seriesColor,
Font: opt.Font,
Points: points,
@ -96,5 +113,5 @@ func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error)
})
}
return result.d, nil
return markPointRenderOptions, nil
}