From 0558d6eb30ca9b03656ff324ecace5816293d686 Mon Sep 17 00:00:00 2001 From: Joost Helberg Date: Mon, 24 Jun 2024 09:46:32 +0200 Subject: [PATCH] feature; solving issue #121 There is now a way to allow gaps in charts due to missing measurements. A style setting (StrokeMaxSpanGap) determines whether a gap is stroked or not. An example is included in examples/custom_styles. --- draw.go | 18 ++++++++++++++++-- examples/custom_styles/main.go | 5 +++-- examples/custom_styles/output.png | Bin 23960 -> 23253 bytes style.go | 17 ++++++++++++++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/draw.go b/draw.go index e188079..0fc744c 100644 --- a/draw.go +++ b/draw.go @@ -47,12 +47,26 @@ func (d draw) LineSeries(r Renderer, canvasBox Box, xrange, yrange Range, style if style.ShouldDrawStroke() { style.GetStrokeOptions().WriteDrawingOptionsToRenderer(r) + vxprev := 0.0 + if vs.Len() > 0 { + vxprev, _ = vs.GetValues( 1 ) // make sure vxprev starts at the beginning + } + maxspan := style.GetStrokeMaxSpanGap() r.MoveTo(x0, y0) for i := 1; i < vs.Len(); i++ { vx, vy = vs.GetValues(i) x = cl + xrange.Translate(vx) - y = cb - yrange.Translate(vy) - r.LineTo(x, y) + y = cb - yrange.Translate(vy) + df := vxprev - vx + if df < 0 { + df *= -1 // make it work, regardless of direction ox X-axis + } + if df <= maxspan { // span the gap i.e. connect the two points + r.LineTo(x, y) + } else { // do not span the gap + r.MoveTo(x, y) + } + vxprev = vx } r.Stroke() } diff --git a/examples/custom_styles/main.go b/examples/custom_styles/main.go index 08889ea..93abf51 100644 --- a/examples/custom_styles/main.go +++ b/examples/custom_styles/main.go @@ -25,9 +25,10 @@ func main() { Style: chart.Style{ StrokeColor: drawing.ColorRed, // will supercede defaults FillColor: drawing.ColorRed.WithAlpha(64), // will supercede defaults + StrokeMaxSpanGap: 2, // do not span gaps more than 2.0 wide }, - XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, - YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0, 8.0, 10.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0, 8.0, 10.0}, }, }, } diff --git a/examples/custom_styles/output.png b/examples/custom_styles/output.png index 981745d8d8f0af4adf762c8798628e033fe91cc4..34b6ef316a58afe874e33635472abbf69c9ba2a2 100644 GIT binary patch literal 23253 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 0 { + output = append(output, fmt.Sprintf("\"stroke_maxspangap\": %.02f", s.StrokeMaxSpanGap)) + } else { + output = append(output, "\"stroke_maxspangap\": null") + } + if len(s.StrokeDashArray) > 0 { var elements []string for _, v := range s.StrokeDashArray { @@ -194,6 +201,11 @@ func (s Style) GetStrokeColor(defaults ...drawing.Color) drawing.Color { return s.StrokeColor } +// GetStrokeMaxSpanGap returns the max span gap, smaller or equal gaps are connected, larger ones are not. +func (s Style) GetStrokeMaxSpanGap() float64 { + return s.StrokeMaxSpanGap +} + // GetFillColor returns the fill color. func (s Style) GetFillColor(defaults ...drawing.Color) drawing.Color { if s.FillColor.IsZero() { @@ -388,6 +400,7 @@ func (s Style) InheritFrom(defaults Style) (final Style) { final.StrokeColor = s.GetStrokeColor(defaults.StrokeColor) final.StrokeWidth = s.GetStrokeWidth(defaults.StrokeWidth) final.StrokeDashArray = s.GetStrokeDashArray(defaults.StrokeDashArray) + final.StrokeMaxSpanGap = s.GetStrokeMaxSpanGap() final.DotColor = s.GetDotColor(defaults.DotColor) final.DotWidth = s.GetDotWidth(defaults.DotWidth) @@ -416,6 +429,7 @@ func (s Style) GetStrokeOptions() Style { StrokeDashArray: s.StrokeDashArray, StrokeColor: s.StrokeColor, StrokeWidth: s.StrokeWidth, + StrokeMaxSpanGap:s.StrokeMaxSpanGap, } } @@ -443,7 +457,8 @@ func (s Style) GetFillAndStrokeOptions() Style { return Style{ ClassName: s.ClassName, StrokeDashArray: s.StrokeDashArray, - FillColor: s.FillColor, + StrokeMaxSpanGap:s.StrokeMaxSpanGap, + FillColor: s.FillColor, StrokeColor: s.StrokeColor, StrokeWidth: s.StrokeWidth, }