diff options
-rw-r--r-- | bookpipeline/graph.go | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/bookpipeline/graph.go b/bookpipeline/graph.go index 4386218..67deb33 100644 --- a/bookpipeline/graph.go +++ b/bookpipeline/graph.go @@ -9,10 +9,13 @@ import ( "strings" "github.com/wcharczuk/go-chart" + "github.com/wcharczuk/go-chart/drawing" ) const maxticks = 20 -const cutoff = 70 +const goodCutoff = 70 +const mediumCutoff = 65 +const badCutoff = 60 type Conf struct { Path, Code string @@ -23,6 +26,22 @@ type GraphConf struct { Pgnum, Conf float64 } +func createLine(xvalues []float64, y float64, c drawing.Color) chart.ContinuousSeries { + var yvalues []float64 + for _ = range xvalues { + yvalues = append(yvalues, y) + } + return chart.ContinuousSeries{ + XValues: xvalues, + YValues: yvalues, + Style: chart.Style{ + Show: true, + StrokeColor: c, + StrokeDashArray: []float64{10.0, 5.0}, + }, + } +} + func Graph(confs map[string]*Conf, bookname string, w io.Writer) error { // Organise confs to sort them by page var graphconf []GraphConf @@ -54,7 +73,7 @@ func Graph(confs map[string]*Conf, bookname string, w io.Writer) error { i = i + 1 xvalues = append(xvalues, c.Pgnum) yvalues = append(yvalues, c.Conf) - if c.Conf < cutoff { + if c.Conf < goodCutoff { annotations = append(annotations, chart.Value2{Label: fmt.Sprintf("%.0f", c.Pgnum), XValue: c.Pgnum, YValue: c.Conf}) } if tickevery % i == 0 { @@ -66,20 +85,10 @@ func Graph(confs map[string]*Conf, bookname string, w io.Writer) error { YValues: yvalues, } - // Create 70% line - yvalues = []float64{} - for _ = range xvalues { - yvalues = append(yvalues, cutoff) - } - cutoffSeries := chart.ContinuousSeries{ - XValues: xvalues, - YValues: yvalues, - Style: chart.Style{ - Show: true, - StrokeColor: chart.ColorAlternateGreen, - StrokeDashArray: []float64{10.0, 5.0}, - }, - } + // Create lines + goodCutoffSeries := createLine(xvalues, goodCutoff, chart.ColorAlternateGreen) + mediumCutoffSeries := createLine(xvalues, mediumCutoff, chart.ColorOrange) + badCutoffSeries := createLine(xvalues, badCutoff, chart.ColorRed) // Create lines marking top and bottom 10% confidence sort.Slice(graphconf, func(i, j int) bool { return graphconf[i].Conf < graphconf[j].Conf }) @@ -139,7 +148,9 @@ func Graph(confs map[string]*Conf, bookname string, w io.Writer) error { mainSeries, minSeries, maxSeries, - cutoffSeries, + goodCutoffSeries, + mediumCutoffSeries, + badCutoffSeries, chart.AnnotationSeries{ Annotations: annotations, }, |