...
1
2
3
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
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
70 r := l.Rectangle(dc)
71 legendWidth := r.Max.X - r.Min.X
72 l.YOffs = -p.Title.TextStyle.FontExtents().Height
73
74 l.Draw(dc)
75 dc = draw.Crop(dc, 0, -legendWidth-vg.Millimeter, 0, 0)
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