diff --git a/config.go b/config.go index 7af55a6..bdf34ab 100644 --- a/config.go +++ b/config.go @@ -30,7 +30,7 @@ type Data struct { } func newConfig() (Config, error) { - dataPoints := envOr("DATA_POINTS", `[[1, 1], [2, 2], [2, 2]]`) + dataPoints := envOr("DATA_POINTS", `[[1, 1], [1, 2], [2, 1], [2, 1], [4, 3]]`) dataLabels := envOr("DATA_LABELS", ``) dataWeightFloor := envOr("DATA_WEIGHT_FLOOR", `12`) dataWeightRange := envOr("DATA_WEIGHT_RANGE", `20`) @@ -103,19 +103,12 @@ func envOr(k, v string) string { return v } -func (d Data) AsScatterData() (string, []float64, string, []opts.ScatterData, error) { +func (d Data) AsScatterData() (string, string, []opts.ScatterData, error) { if !(2 <= len(d.Labels) && len(d.Labels) <= 3) { - return "", nil, "", nil, fmt.Errorf("cannot map %d dimensions to [2,3]", len(d.Labels)) + return "", "", nil, fmt.Errorf("cannot map %d dimensions to [2,3]", len(d.Labels)) } d = d.weighXYasZ() - xs := make([]float64, 0) - for i := range d.Points { - xs = append(xs, d.Points[i][0]) - } - slices.Sort(xs) - xs = slices.Compact(xs) - zs := make([]float64, 0) for i := range d.Points { zs = append(zs, d.Points[i][2]) @@ -128,19 +121,17 @@ func (d Data) AsScatterData() (string, []float64, string, []opts.ScatterData, er } log.Printf("d=%+v zmin=%v zmax=%v zrange=%v", d.Points, zmin, zmax, zrange) - ys := make([]opts.ScatterData, 0) - for i := range xs { - for j := range d.Points { - x := d.Points[j][0] - if x == xs[i] { - ys = append(ys, opts.ScatterData{ - Value: d.Points[j][1], - SymbolSize: d.Weight.Floor + int((float64(d.Weight.Range)*(d.Points[j][2]-zmin))/zrange), - }) - } - } + result := make([]opts.ScatterData, 0) + for i := range d.Points { + x := d.Points[i][0] + y := d.Points[i][1] + z := d.Points[i][2] + result = append(result, opts.ScatterData{ + Value: []float64{x, y}, + SymbolSize: d.Weight.Floor + int((float64(d.Weight.Range)*(z-zmin))/zrange), + }) } - return d.Labels[0], xs, d.Labels[1], ys, nil + return d.Labels[0], d.Labels[1], result, nil } func (d Data) weighXYasZ() Data { diff --git a/main.go b/main.go index 8c4e097..d6f2c61 100644 --- a/main.go +++ b/main.go @@ -27,12 +27,11 @@ func run(ctx context.Context) error { } log.Printf("%+v", config) - x, xs, y, ys, err := config.Data.AsScatterData() + x, y, data, err := config.Data.AsScatterData() if err != nil { return err } - log.Printf("%s: %v", x, xs) - log.Printf("%s: %v", y, ys) + log.Printf("(%s, %s) = %v", x, y, data) scatter := charts.NewScatter() scatter.SetGlobalOptions(charts.WithTitleOpts(opts.Title{ @@ -50,8 +49,7 @@ func run(ctx context.Context) error { NameLocation: "middle", NameGap: config.Data.Weight.Floor + config.Data.Weight.Range, })) - scatter.SetXAxis(xs). - AddSeries(y, ys) + scatter.AddSeries(y, data) buff := bytes.NewBuffer(nil) if err := scatter.Render(buff); err != nil {