...
1
2
3
4
5 package plotter_test
6
7 import (
8 "log"
9 "math"
10 "testing"
11
12 "golang.org/x/exp/rand"
13
14 "gonum.org/v1/gonum/mat"
15 "gonum.org/v1/plot"
16 "gonum.org/v1/plot/cmpimg"
17 "gonum.org/v1/plot/palette"
18 "gonum.org/v1/plot/plotter"
19 "gonum.org/v1/plot/vg"
20 )
21
22 func ExampleContour() {
23 rnd := rand.New(rand.NewSource(1234))
24
25 const stddev = 2
26 data := make([]float64, 6400)
27 for i := range data {
28 r := float64(i/80) - 40
29 c := float64(i%80) - 40
30
31 data[i] = rnd.NormFloat64()*stddev + math.Hypot(r, c)
32 }
33
34 var (
35 grid = unitGrid{mat.NewDense(80, 80, data)}
36 levels = []float64{-1, 3, 7, 9, 13, 15, 19, 23, 27, 31}
37
38 c = plotter.NewContour(
39 grid,
40 levels,
41 palette.Rainbow(10, palette.Blue, palette.Red, 1, 1, 1),
42 )
43 )
44
45 p := plot.New()
46 p.Title.Text = "Contour"
47 p.X.Padding = 0
48 p.Y.Padding = 0
49 p.X.Max = 79.5
50 p.Y.Max = 79.5
51
52 p.Add(c)
53
54 err := p.Save(10*vg.Centimeter, 10*vg.Centimeter, "testdata/contour.png")
55 if err != nil {
56 log.Fatalf("could not save plot: %+v", err)
57 }
58 }
59
60 type unitGrid struct{ mat.Matrix }
61
62 func (g unitGrid) Dims() (c, r int) { r, c = g.Matrix.Dims(); return c, r }
63 func (g unitGrid) Z(c, r int) float64 { return g.Matrix.At(r, c) }
64 func (g unitGrid) X(c int) float64 {
65 _, n := g.Matrix.Dims()
66 if c < 0 || c >= n {
67 panic("index out of range")
68 }
69 return float64(c)
70 }
71 func (g unitGrid) Y(r int) float64 {
72 m, _ := g.Matrix.Dims()
73 if r < 0 || r >= m {
74 panic("index out of range")
75 }
76 return float64(r)
77 }
78
79 func TestContour(t *testing.T) {
80 cmpimg.CheckPlotApprox(ExampleContour, t, 0.01, "contour.png")
81 }
82
View as plain text