better test too

main
bel 2024-02-14 09:50:56 -07:00
parent 2ef4799a94
commit b084195a6f
2 changed files with 16 additions and 27 deletions

View File

@ -30,7 +30,7 @@ type Data struct {
} }
func newConfig() (Config, error) { 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", ``) dataLabels := envOr("DATA_LABELS", ``)
dataWeightFloor := envOr("DATA_WEIGHT_FLOOR", `12`) dataWeightFloor := envOr("DATA_WEIGHT_FLOOR", `12`)
dataWeightRange := envOr("DATA_WEIGHT_RANGE", `20`) dataWeightRange := envOr("DATA_WEIGHT_RANGE", `20`)
@ -103,19 +103,12 @@ func envOr(k, v string) string {
return v 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) { 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() 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) zs := make([]float64, 0)
for i := range d.Points { for i := range d.Points {
zs = append(zs, d.Points[i][2]) 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) log.Printf("d=%+v zmin=%v zmax=%v zrange=%v", d.Points, zmin, zmax, zrange)
ys := make([]opts.ScatterData, 0) result := make([]opts.ScatterData, 0)
for i := range xs { for i := range d.Points {
for j := range d.Points { x := d.Points[i][0]
x := d.Points[j][0] y := d.Points[i][1]
if x == xs[i] { z := d.Points[i][2]
ys = append(ys, opts.ScatterData{ result = append(result, opts.ScatterData{
Value: d.Points[j][1], Value: []float64{x, y},
SymbolSize: d.Weight.Floor + int((float64(d.Weight.Range)*(d.Points[j][2]-zmin))/zrange), 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 { func (d Data) weighXYasZ() Data {

View File

@ -27,12 +27,11 @@ func run(ctx context.Context) error {
} }
log.Printf("%+v", config) log.Printf("%+v", config)
x, xs, y, ys, err := config.Data.AsScatterData() x, y, data, err := config.Data.AsScatterData()
if err != nil { if err != nil {
return err return err
} }
log.Printf("%s: %v", x, xs) log.Printf("(%s, %s) = %v", x, y, data)
log.Printf("%s: %v", y, ys)
scatter := charts.NewScatter() scatter := charts.NewScatter()
scatter.SetGlobalOptions(charts.WithTitleOpts(opts.Title{ scatter.SetGlobalOptions(charts.WithTitleOpts(opts.Title{
@ -50,8 +49,7 @@ func run(ctx context.Context) error {
NameLocation: "middle", NameLocation: "middle",
NameGap: config.Data.Weight.Floor + config.Data.Weight.Range, NameGap: config.Data.Weight.Floor + config.Data.Weight.Range,
})) }))
scatter.SetXAxis(xs). scatter.AddSeries(y, data)
AddSeries(y, ys)
buff := bytes.NewBuffer(nil) buff := bytes.NewBuffer(nil)
if err := scatter.Render(buff); err != nil { if err := scatter.Render(buff); err != nil {