...

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

Documentation: gonum.org/v1/plot/plotter

     1  // Copyright ©2015 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  	"fmt"
     9  	"log"
    10  	"os"
    11  
    12  	"gonum.org/v1/gonum/mat"
    13  	"gonum.org/v1/plot"
    14  	"gonum.org/v1/plot/palette"
    15  	"gonum.org/v1/plot/plotter"
    16  	"gonum.org/v1/plot/vg"
    17  	"gonum.org/v1/plot/vg/draw"
    18  	"gonum.org/v1/plot/vg/vgimg"
    19  )
    20  
    21  func ExampleHeatMap() {
    22  	m := offsetUnitGrid{
    23  		XOffset: -2,
    24  		YOffset: -1,
    25  		Data: mat.NewDense(3, 4, []float64{
    26  			1, 2, 3, 4,
    27  			5, 6, 7, 8,
    28  			9, 10, 11, 12,
    29  		})}
    30  	pal := palette.Heat(12, 1)
    31  	h := plotter.NewHeatMap(m, pal)
    32  
    33  	p := plot.New()
    34  	p.Title.Text = "Heat map"
    35  
    36  	p.X.Tick.Marker = integerTicks{}
    37  	p.Y.Tick.Marker = integerTicks{}
    38  
    39  	p.Add(h)
    40  
    41  	// Create a legend.
    42  	l := plot.NewLegend()
    43  	thumbs := plotter.PaletteThumbnailers(pal)
    44  	for i := len(thumbs) - 1; i >= 0; i-- {
    45  		t := thumbs[i]
    46  		if i != 0 && i != len(thumbs)-1 {
    47  			l.Add("", t)
    48  			continue
    49  		}
    50  		var val float64
    51  		switch i {
    52  		case 0:
    53  			val = h.Min
    54  		case len(thumbs) - 1:
    55  			val = h.Max
    56  		}
    57  		l.Add(fmt.Sprintf("%.2g", val), t)
    58  	}
    59  
    60  	p.X.Padding = 0
    61  	p.Y.Padding = 0
    62  	p.X.Max = 1.5
    63  	p.Y.Max = 1.5
    64  
    65  	img := vgimg.New(250, 175)
    66  	dc := draw.New(img)
    67  
    68  	l.Top = true
    69  	// Calculate the width of the legend.
    70  	r := l.Rectangle(dc)
    71  	legendWidth := r.Max.X - r.Min.X
    72  	l.YOffs = -p.Title.TextStyle.FontExtents().Height // Adjust the legend down a little.
    73  
    74  	l.Draw(dc)
    75  	dc = draw.Crop(dc, 0, -legendWidth-vg.Millimeter, 0, 0) // Make space for the legend.
    76  	p.Draw(dc)
    77  	w, err := os.Create("testdata/heatMap.png")
    78  	if err != nil {
    79  		log.Panic(err)
    80  	}
    81  	png := vgimg.PngCanvas{Canvas: img}
    82  	if _, err = png.WriteTo(w); err != nil {
    83  		log.Panic(err)
    84  	}
    85  }
    86  

View as plain text