better test too
parent
2ef4799a94
commit
b084195a6f
33
config.go
33
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 {
|
||||
|
|
|
|||
8
main.go
8
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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue