1
2
3
4
5 package plotter_test
6
7 import (
8 "image/color"
9 "testing"
10
11 "gonum.org/v1/plot"
12 "gonum.org/v1/plot/cmpimg"
13 "gonum.org/v1/plot/plotter"
14 "gonum.org/v1/plot/vg"
15 "gonum.org/v1/plot/vg/draw"
16 )
17
18 func TestLabels(t *testing.T) {
19 cmpimg.CheckPlot(ExampleLabels, t, "labels.png")
20 cmpimg.CheckPlot(ExampleLabels_inCanvasCoordinates, t, "labels_cnv_coords.png")
21 }
22
23
24
25
26 func TestLabelsWithGlyphBoxes(t *testing.T) {
27 cmpimg.CheckPlot(
28 func() {
29 const fontSize = 24
30
31 p := plot.New()
32 p.Title.Text = "Labels"
33 p.X.Min = -1
34 p.X.Max = +1
35 p.Y.Min = -1
36 p.Y.Max = +1
37
38 const (
39 left = 0.00
40 middle = 0.02
41 right = 0.04
42 )
43
44 labels, err := plotter.NewLabels(plotter.XYLabels{
45 XYs: []plotter.XY{
46 {X: -0.8 + left, Y: -0.5},
47 {X: -0.6 + middle, Y: -0.5},
48 {X: -0.4 + right, Y: -0.5},
49
50 {X: -0.8 + left, Y: +0.5},
51 {X: -0.6 + middle, Y: +0.5},
52 {X: -0.4 + right, Y: +0.5},
53
54 {X: +0.0 + left, Y: +0},
55 {X: +0.2 + middle, Y: +0},
56 {X: +0.4 + right, Y: +0},
57 },
58 Labels: []string{
59 "Aq", "Aq", "Aq",
60 "Aq\nAq", "Aq\nAq", "Aq\nAq",
61
62 "Bg\nBg\nBg",
63 "Bg\nBg\nBg",
64 "Bg\nBg\nBg",
65 },
66 })
67 if err != nil {
68 t.Fatalf("could not creates labels plotter: %+v", err)
69 }
70 for i := range labels.TextStyle {
71 sty := &labels.TextStyle[i]
72 sty.Font.Size = vg.Length(fontSize)
73 }
74 labels.TextStyle[0].YAlign = draw.YBottom
75 labels.TextStyle[1].YAlign = draw.YCenter
76 labels.TextStyle[2].YAlign = draw.YTop
77
78 labels.TextStyle[3].YAlign = draw.YBottom
79 labels.TextStyle[4].YAlign = draw.YCenter
80 labels.TextStyle[5].YAlign = draw.YTop
81
82 labels.TextStyle[6].YAlign = draw.YBottom
83 labels.TextStyle[7].YAlign = draw.YCenter
84 labels.TextStyle[8].YAlign = draw.YTop
85
86 lred, err := plotter.NewLabels(plotter.XYLabels{
87 XYs: []plotter.XY{
88 {X: -0.8 + left, Y: +0.5},
89 {X: +0.0 + left, Y: +0},
90 },
91 Labels: []string{
92 "Aq", "Bg",
93 },
94 })
95 if err != nil {
96 t.Fatalf("could not creates labels plotter: %+v", err)
97 }
98 for i := range lred.TextStyle {
99 sty := &lred.TextStyle[i]
100 sty.Font.Size = vg.Length(fontSize)
101 sty.Color = color.RGBA{R: 255, A: 255}
102 sty.YAlign = draw.YBottom
103 }
104
105
106 loffp, err := plotter.NewLabels(plotter.XYLabels{
107 XYs: []plotter.XY{{X: left}},
108 Labels: []string{"Bg"},
109 })
110 if err != nil {
111 t.Fatalf("could not creates labels plotter: %+v", err)
112 }
113 for i := range loffp.TextStyle {
114 sty := &loffp.TextStyle[i]
115 sty.Font.Size = vg.Length(fontSize)
116 sty.Color = color.RGBA{G: 255, A: 255}
117 }
118 loffp.Offset = vg.Point{X: 75, Y: 75}
119
120
121 loffm, err := plotter.NewLabels(plotter.XYLabels{
122 XYs: []plotter.XY{{X: left}},
123 Labels: []string{"Bg"},
124 })
125 if err != nil {
126 t.Fatalf("could not creates labels plotter: %+v", err)
127 }
128 for i := range loffm.TextStyle {
129 sty := &loffm.TextStyle[i]
130 sty.Font.Size = vg.Length(fontSize)
131 sty.Color = color.RGBA{B: 255, A: 255}
132 }
133 loffm.Offset = vg.Point{X: -40, Y: -40}
134
135 m5 := plotter.NewFunction(func(float64) float64 { return -0.5 })
136 m5.LineStyle.Color = color.RGBA{R: 255, A: 255}
137
138 l0 := plotter.NewFunction(func(float64) float64 { return 0 })
139 l0.LineStyle.Color = color.RGBA{G: 255, A: 255}
140
141 p5 := plotter.NewFunction(func(float64) float64 { return +0.5 })
142 p5.LineStyle.Color = color.RGBA{B: 255, A: 255}
143
144 p.Add(labels, lred, m5, l0, p5, loffp, loffm)
145 p.Add(plotter.NewGrid())
146 p.Add(plotter.NewGlyphBoxes())
147
148 err = p.Save(10*vg.Centimeter, 10*vg.Centimeter, "testdata/labels_glyphboxes.png")
149 if err != nil {
150 t.Fatalf("could save plot: %+v", err)
151 }
152 },
153 t, "labels_glyphboxes.png",
154 )
155 }
156
View as plain text