...

Source file src/gonum.org/v1/plot/palette/moreland/example_test.go

Documentation: gonum.org/v1/plot/palette/moreland

     1  // Copyright ©2016 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 moreland_test
     6  
     7  import (
     8  	"log"
     9  	"math"
    10  	"os"
    11  	"testing"
    12  
    13  	"gonum.org/v1/gonum/mat"
    14  	"gonum.org/v1/plot"
    15  	"gonum.org/v1/plot/cmpimg"
    16  	"gonum.org/v1/plot/palette"
    17  	"gonum.org/v1/plot/palette/moreland"
    18  	"gonum.org/v1/plot/plotter"
    19  	"gonum.org/v1/plot/vg"
    20  	"gonum.org/v1/plot/vg/draw"
    21  	"gonum.org/v1/plot/vg/vgimg"
    22  )
    23  
    24  type offsetUnitGrid struct {
    25  	XOffset, YOffset float64
    26  
    27  	Data *mat.Dense
    28  }
    29  
    30  func (g offsetUnitGrid) Dims() (c, r int)   { r, c = g.Data.Dims(); return c, r }
    31  func (g offsetUnitGrid) Z(c, r int) float64 { return g.Data.At(r, c) }
    32  func (g offsetUnitGrid) X(c int) float64 {
    33  	_, n := g.Data.Dims()
    34  	if c < 0 || n <= c {
    35  		panic("index out of range")
    36  	}
    37  	return float64(c) + g.XOffset
    38  }
    39  func (g offsetUnitGrid) Y(r int) float64 {
    40  	m, _ := g.Data.Dims()
    41  	if r < 0 || m <= r {
    42  		panic("index out of range")
    43  	}
    44  	return float64(r) + g.YOffset
    45  }
    46  
    47  // This Example gives examples of plots using the palettes in this package.
    48  // The output can be found at
    49  // https://github.com/gonum/plot/blob/master/palette/moreland/testdata/moreland_golden.png.
    50  func Example() {
    51  	m := offsetUnitGrid{
    52  		XOffset: -50,
    53  		YOffset: -50,
    54  		Data:    mat.NewDense(100, 100, nil),
    55  	}
    56  	for i := 0; i < 100; i++ {
    57  		for j := 0; j < 100; j++ {
    58  			x := float64(i-50) / 10
    59  			y := float64(j-50) / 10
    60  			v := math.Sin(x*x+y*y) / (x*x + y*y)
    61  			m.Data.Set(i, j, v)
    62  		}
    63  	}
    64  
    65  	const (
    66  		rows = 3
    67  		cols = 3
    68  	)
    69  	c := vgimg.New(vg.Points(800), vg.Points(800))
    70  	dc := draw.New(c)
    71  	tiles := draw.Tiles{
    72  		Rows: rows,
    73  		Cols: cols,
    74  	}
    75  	type paletteHolder struct {
    76  		name string
    77  		cmap palette.Palette
    78  	}
    79  	palettes := []paletteHolder{
    80  		{
    81  			name: "SmoothBlueRed",
    82  			cmap: moreland.SmoothBlueRed().Palette(255),
    83  		},
    84  		{
    85  			name: "SmoothBlueTan",
    86  			cmap: moreland.SmoothBlueTan().Palette(255),
    87  		},
    88  		{
    89  			name: "SmoothGreenPurple",
    90  			cmap: moreland.SmoothGreenPurple().Palette(255),
    91  		},
    92  		{
    93  			name: "SmoothGreenRed",
    94  			cmap: moreland.SmoothGreenRed().Palette(255),
    95  		},
    96  		{
    97  			name: "SmoothPurpleOrange",
    98  			cmap: moreland.SmoothPurpleOrange().Palette(255),
    99  		},
   100  		{
   101  			name: "BlackBody",
   102  			cmap: moreland.BlackBody().Palette(255),
   103  		},
   104  		{
   105  			name: "ExtendedBlackBody",
   106  			cmap: moreland.ExtendedBlackBody().Palette(255),
   107  		},
   108  		{
   109  			name: "Kindlmann",
   110  			cmap: moreland.Kindlmann().Palette(255),
   111  		},
   112  		{
   113  			name: "ExtendedKindlmann",
   114  			cmap: moreland.ExtendedKindlmann().Palette(255),
   115  		},
   116  	}
   117  
   118  	for i, plte := range palettes {
   119  
   120  		h := plotter.NewHeatMap(m, plte.cmap)
   121  
   122  		p := plot.New()
   123  		p.Title.Text = plte.name
   124  
   125  		p.Add(h)
   126  
   127  		p.X.Padding = 0
   128  		p.Y.Padding = 0
   129  		p.Draw(tiles.At(dc, i%cols, i/cols))
   130  	}
   131  
   132  	pngimg := vgimg.PngCanvas{Canvas: c}
   133  	f, err := os.Create("testdata/moreland.png")
   134  	if err != nil {
   135  		log.Panic(err)
   136  	}
   137  	if _, err = pngimg.WriteTo(f); err != nil {
   138  		log.Panic(err)
   139  	}
   140  }
   141  
   142  func TestHeatMap(t *testing.T) {
   143  	cmpimg.CheckPlot(Example, t, "moreland.png")
   144  }
   145  

View as plain text