annotate src/fx/fx.go @ 59:48e46bfe97fa

kaigo: pre-release eraline.
author pyon@macmini
date Wed, 12 Aug 2020 19:57:58 +0900
parents 90659c7171ed
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
1 /*
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
2 fx.go: make MA/RSI/BB-Band graph
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
3 */
31
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
4 package main
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
5
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
6 import (
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
7 "bytes"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
8 "encoding/csv"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
9 "fmt"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
10 "io"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
11 "io/ioutil"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
12 "log"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
13 "math"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
14 "strconv"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
15 "strings"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
16 )
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
17
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
18 const debug = false
33
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
19 const ratefile = "./fx_result.csv"
31
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
20
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
21 func main() {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
22 n, m := 20, 14
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
23 var x, xl, xh []float64
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
24 var date []string
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
25
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
26 // Read Exchange-data
33
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
27 content, err := ioutil.ReadFile(ratefile)
31
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
28 if err != nil {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
29 log.Fatal(err)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
30 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
31
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
32 r := csv.NewReader(bytes.NewReader(content))
33
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
33 r.Comment = '#'
31
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
34 for {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
35 record, err := r.Read()
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
36 if err == io.EOF {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
37 break
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
38 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
39 if err != nil {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
40 log.Fatal(err)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
41 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
42
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
43 f, err := strconv.ParseFloat(record[4], 64)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
44 if err != nil {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
45 continue
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
46 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
47 x = append(x, f)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
48
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
49 f, err = strconv.ParseFloat(record[3], 64)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
50 xl = append(xl, f)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
51
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
52 f, err = strconv.ParseFloat(record[2], 64)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
53 xh = append(xh, f)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
54
33
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
55 date = append(date, record[0])
31
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
56 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
57
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
58 // Calc Moving-Average
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
59 xa := make([]float64, len(x))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
60 for i := n; i < len(x); i++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
61 for j := 0; j < n; j++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
62 xa[i] += x[i-j]
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
63 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
64 xa[i] /= float64(n)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
65 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
66
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
67 // Calc Variance & SD
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
68 v := make([]float64, len(x))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
69 sd := make([]float64, len(x))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
70 for i := n; i < len(x); i++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
71 // variance
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
72 for j := 0; j < n; j++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
73 v[i] += (x[i-j] - xa[i-j]) * (x[i-j] - xa[i-j])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
74 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
75 v[i] /= float64(n)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
76
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
77 // standard deviation
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
78 sd[i] = math.Sqrt(v[i])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
79 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
80
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
81 // Calc Bollinger-Bands
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
82 bb1 := make([]float64, len(x))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
83 bb2 := make([]float64, len(x))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
84 for i := n * 2; i < len(x); i++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
85 bb1[i], bb2[i] = x[i] - sd[i], x[i] + sd[i]
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
86 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
87
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
88 // Calc RSI
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
89 rsi := make([]float64, len(x))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
90 for i := m; i < len(x); i++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
91 var ru, rd float64
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
92 for j := 0; j < m; j++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
93 z := x[i-j-1] - x[i-j]
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
94 if z > 0 {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
95 ru += z
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
96 } else {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
97 rd += -z
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
98 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
99 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
100 rsi[i] = rd / (rd + ru) * 100
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
101 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
102
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
103 // Make Graph
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
104 // [chart.svg]
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
105 w, h := 800, 600
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
106
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
107 term := 200
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
108 min, max := 200.0, 1.0
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
109 for i := len(x) - term; i < len(x); i++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
110 min = math.Min(min, x[i])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
111 max = math.Max(max, x[i])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
112 min = math.Min(min, bb1[i])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
113 max = math.Max(max, bb2[i])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
114 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
115 sx := float64(w) / float64(term)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
116 sy := float64(h) / (max - min)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
117
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
118 svg := fmt.Sprintf("<svg xmlns='http://www.w3.org/2000/svg' width='%d' height='%d'>\n", w, h)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
119 for y := int(min); y < int(max) + 1; y++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
120 svg += make_line(h, 0, float64(y), w, float64(y), min, 1.0, sy, "gray", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
121 svg += make_label(h, 10, y, min, 1.0, sy, fmt.Sprintf("%d", y))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
122 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
123 for i, j, lm := len(x) - term, 0, ""; i < len(x); i, j = i + 1, j + 1 {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
124 if !strings.EqualFold(lm, date[i][5:7]) {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
125 svg += make_line(h, j, 0.0, j, float64(h), 0, sx, 1.0, "gray", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
126 svg += make_label(h, j, 20, 0, sx, 1.0, date[i][0:7])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
127 lm = date[i][5:7]
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
128 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
129 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
130
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
131 for i, j := len(x) - term, 1; i < len(x); i, j = i + 1, j + 1 {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
132 svg += make_line(h, j-1, x[i-1], j, x[i], min, sx, sy, "black", 1.5)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
133 svg += make_line(h, j-1, xa[i-1], j, xa[i], min, sx, sy, "green", 0.7)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
134 svg += make_line(h, j-1, bb1[i-1], j, bb1[i], min, sx, sy, "red", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
135 svg += make_line(h, j-1, bb2[i-1], j, bb2[i], min, sx, sy, "blue", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
136 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
137 svg += fmt.Sprint("</svg>\n")
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
138 if err := ioutil.WriteFile("chart.svg", []byte(svg), 0644); err != nil {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
139 log.Fatal(err)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
140 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
141
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
142 // [rsi.svg]
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
143 w, h = w, 150
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
144 sy = float64(h) / 100
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
145 svg = fmt.Sprintf("<svg xmlns='http://www.w3.org/2000/svg' width='%d' height='%d'>\n", w, h)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
146 svg += make_line(h, 0, 30.0, w, 30.0, 0, 1.0, sy, "gray", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
147 svg += make_label(h, 10, 30, 0, 1.0, sy, fmt.Sprintf("30%%"))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
148 svg += make_line(h, 0, 50.0, w, 50.0, 0, 1.0, sy, "gray", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
149 svg += make_label(h, 10, 50, 0, 1.0, sy, fmt.Sprintf("50%%"))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
150 svg += make_line(h, 0, 70.0, w, 70.0, 0, 1.0, sy, "gray", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
151 svg += make_label(h, 10, 70, 0, 1.0, sy, fmt.Sprintf("70%%"))
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
152
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
153 for i, j, lm := len(x) - term, 0, ""; i < len(x); i, j = i + 1, j + 1 {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
154 if !strings.EqualFold(lm, date[i][5:7]) {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
155 svg += make_line(h, j, 0.0, j, float64(h), 0, sx, 1.0, "gray", 0.2)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
156 svg += make_label(h, j, 20, 0, sx, 1.0, date[i][0:7])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
157 lm = date[i][5:7]
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
158 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
159 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
160
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
161 for i, j := len(x) - term, 1; i < len(x); i, j = i + 1, j + 1 {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
162 svg += make_line(h, j-1, rsi[i-1], j, rsi[i], 0, sx, sy, "black", 1.5)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
163 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
164 svg += fmt.Sprint("</svg>\n")
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
165 if err := ioutil.WriteFile("rsi.svg", []byte(svg), 0644); err != nil {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
166 log.Fatal(err)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
167 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
168
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
169 // Make Html
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
170 html := "<html><body>"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
171 html += "<h2>Daily Chart</h2>"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
172 html += "<img src='chart.svg' />"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
173 html += "<h2>RSI</h2>"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
174 html += "<img src='rsi.svg' />"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
175 html += "</body><html>"
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
176 if err := ioutil.WriteFile("fx.html", []byte(html), 0644); err != nil {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
177 log.Fatal(err)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
178 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
179
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
180 // Print Data
33
90659c7171ed add magicpacket.go
pyon@macmini
parents: 31
diff changeset
181 if debug {
31
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
182 fmt.Println("[j] n x bb1 bb2 rsi | n x bb1 bb2")
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
183 fmt.Println("---")
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
184 for i, j := len(x) - term, 0; i < len(x); i++ {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
185 fmt.Printf("[%04d] %04d %5.2f %5.2f %5.2f %3.1f | ", j, i, x[i], bb1[i], bb2[i], rsi[i])
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
186 fmt.Printf("%04.0f %5.2f %5.2f %5.2f ", float64(i) * sx, (x[i] - min) * sy, (bb1[i] - min) * sy, (bb2[i] - min) * sy)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
187 fmt.Println()
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
188 j++
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
189 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
190 fmt.Println("---")
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
191 fmt.Printf("min=%5.2f max=%5.2f\n", min, max)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
192 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
193 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
194
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
195 func make_line(h, x1 int, y1 float64, x2 int, y2 float64, os, sx, sy float64, c string, sw float64) string {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
196 x1, y1 = int(float64(x1) * sx), (y1 - os) * sy
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
197 x2, y2 = int(float64(x2) * sx), (y2 - os) * sy
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
198 y1, y2 = float64(h) - y1, float64(h) - y2
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
199 return fmt.Sprintf("<line x1='%d' y1='%d' x2='%d' y2='%d' stroke='%s' stroke-width='%0.1f' />\n", x1, int(y1), x2, int(y2), c, sw)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
200 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
201
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
202 func make_label(h, x, y int, os, sx, sy float64, label string) string {
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
203 x = int(float64(x) * sx)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
204 y = int((float64(y) - os) * sy)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
205 y = h - y
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
206 return fmt.Sprintf("<text x='%d' y='%d'>%s</text>", x, y, label)
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
207 }
a55c5a0cbd04 add fx.
pyon@macmini
parents:
diff changeset
208