feat: support mark point for line chart
This commit is contained in:
parent
524eb79a8e
commit
c0bb1654c2
11 changed files with 148 additions and 16 deletions
|
|
@ -23,6 +23,8 @@
|
|||
package charts
|
||||
|
||||
import (
|
||||
"math"
|
||||
|
||||
"github.com/wcharczuk/go-chart/v2"
|
||||
"github.com/wcharczuk/go-chart/v2/drawing"
|
||||
)
|
||||
|
|
@ -47,7 +49,19 @@ func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error)
|
|||
xRange := result.xRange
|
||||
for i, series := range opt.SeriesList {
|
||||
points := make([]Point, 0)
|
||||
minIndex := -1
|
||||
maxIndex := -1
|
||||
minValue := math.MaxFloat64
|
||||
maxValue := -math.MaxFloat64
|
||||
for j, item := range series.Data {
|
||||
if item.Value < minValue {
|
||||
minIndex = j
|
||||
minValue = item.Value
|
||||
}
|
||||
if item.Value > maxValue {
|
||||
maxIndex = j
|
||||
maxValue = item.Value
|
||||
}
|
||||
y := yRange.getRestHeight(item.Value)
|
||||
x := xRange.getWidth(float64(j))
|
||||
points = append(points, Point{
|
||||
|
|
@ -86,6 +100,34 @@ func lineChartRender(opt ChartOption, result *basicRenderResult) (*Draw, error)
|
|||
DotWidth: 2,
|
||||
DotFillColor: dotFillColor,
|
||||
})
|
||||
// draw mark point
|
||||
symbolSize := 30
|
||||
if series.MarkPoint.SymbolSize > 0 {
|
||||
symbolSize = series.MarkPoint.SymbolSize
|
||||
}
|
||||
for _, markPointData := range series.MarkPoint.Data {
|
||||
p := points[minIndex]
|
||||
value := minValue
|
||||
switch markPointData.Type {
|
||||
case SeriesMarkPointDataTypeMax:
|
||||
p = points[maxIndex]
|
||||
value = maxValue
|
||||
}
|
||||
chart.Style{
|
||||
FillColor: seriesColor,
|
||||
}.WriteToRenderer(r)
|
||||
d.pin(p.X, p.Y-symbolSize>>1, symbolSize)
|
||||
|
||||
chart.Style{
|
||||
FontColor: NewTheme(ThemeDark).GetTextColor(),
|
||||
FontSize: 10,
|
||||
StrokeWidth: 1,
|
||||
Font: opt.Font,
|
||||
}.WriteTextOptionsToRenderer(d.Render)
|
||||
text := commafWithDigits(value)
|
||||
textBox := r.MeasureText(text)
|
||||
d.text(text, p.X-textBox.Width()>>1, p.Y-symbolSize>>1-2)
|
||||
}
|
||||
}
|
||||
|
||||
return result.d, nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue