feat: support make point and make line
This commit is contained in:
parent
fd05250305
commit
e558634dda
16 changed files with 308 additions and 51 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue