...

Source file src/gonum.org/v1/plot/plotter/contour_example_test.go

Documentation: gonum.org/v1/plot/plotter

     1  // Copyright ©2020 The Gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     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