...
1
2
3
4
5 package plotter_test
6
7 import (
8 "fmt"
9 "math"
10 "testing"
11
12 "gonum.org/v1/gonum/mat"
13 "gonum.org/v1/plot"
14 "gonum.org/v1/plot/cmpimg"
15 "gonum.org/v1/plot/palette"
16 "gonum.org/v1/plot/plotter"
17 "gonum.org/v1/plot/vg/draw"
18 "gonum.org/v1/plot/vg/vgimg"
19 )
20
21 type offsetUnitGrid struct {
22 XOffset, YOffset float64
23
24 Data mat.Matrix
25 }
26
27 func (g offsetUnitGrid) Dims() (c, r int) { r, c = g.Data.Dims(); return c, r }
28 func (g offsetUnitGrid) Z(c, r int) float64 { return g.Data.At(r, c) }
29 func (g offsetUnitGrid) X(c int) float64 {
30 _, n := g.Data.Dims()
31 if c < 0 || c >= n {
32 panic("column index out of range")
33 }
34 return float64(c) + g.XOffset
35 }
36 func (g offsetUnitGrid) Y(r int) float64 {
37 m, _ := g.Data.Dims()
38 if r < 0 || r >= m {
39 panic("row index out of range")
40 }
41 return float64(r) + g.YOffset
42 }
43
44 type integerTicks struct{}
45
46 func (integerTicks) Ticks(min, max float64) []plot.Tick {
47 var t []plot.Tick
48 for i := math.Trunc(min); i <= max; i++ {
49 t = append(t, plot.Tick{Value: i, Label: fmt.Sprint(i)})
50 }
51 return t
52 }
53
54 func TestHeatMap(t *testing.T) {
55 cmpimg.CheckPlot(ExampleHeatMap, t, "heatMap.png")
56 }
57
58 func TestHeatMapDims(t *testing.T) {
59 pal := palette.Heat(12, 1)
60
61 for _, test := range []struct {
62 rows int
63 cols int
64 }{
65 {rows: 1, cols: 2},
66 {rows: 2, cols: 1},
67 {rows: 2, cols: 2},
68 } {
69 func() {
70 defer func() {
71 r := recover()
72 if r != nil {
73 t.Errorf("unexpected panic for rows=%d cols=%d: %v", test.rows, test.cols, r)
74 }
75 }()
76
77 m := offsetUnitGrid{Data: mat.NewDense(test.rows, test.cols, nil)}
78 h := plotter.NewHeatMap(m, pal)
79
80 p := plot.New()
81 p.Add(h)
82
83 img := vgimg.New(250, 175)
84 dc := draw.New(img)
85
86 p.Draw(dc)
87 }()
88 }
89 }
90
91 func TestRasterHeatMap(t *testing.T) {
92 cmpimg.CheckPlot(ExampleHeatMap_rasterized, t, "rasterHeatMap.png")
93 }
94
View as plain text