Last active
September 10, 2020 18:05
-
-
Save santosh/84301dec228038b2846549fccd4370c1 to your computer and use it in GitHub Desktop.
Plotting in Go with gonum/plot.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6.1101,17.592 | |
5.5277,9.1302 | |
8.5186,13.662 | |
7.0032,11.854 | |
5.8598,6.8233 | |
8.3829,11.886 | |
7.4764,4.3483 | |
8.5781,12 | |
6.4862,6.5987 | |
5.0546,3.8166 | |
5.7107,3.2522 | |
14.164,15.505 | |
5.734,3.1551 | |
8.4084,7.2258 | |
5.6407,0.71618 | |
5.3794,3.5129 | |
6.3654,5.3048 | |
5.1301,0.56077 | |
6.4296,3.6518 | |
7.0708,5.3893 | |
6.1891,3.1386 | |
20.27,21.767 | |
5.4901,4.263 | |
6.3261,5.1875 | |
5.5649,3.0825 | |
18.945,22.638 | |
12.828,13.501 | |
10.957,7.0467 | |
13.176,14.692 | |
22.203,24.147 | |
5.2524,-1.22 | |
6.5894,5.9966 | |
9.2482,12.134 | |
5.8918,1.8495 | |
8.2111,6.5426 | |
7.9334,4.5623 | |
8.0959,4.1164 | |
5.6063,3.3928 | |
12.836,10.117 | |
6.3534,5.4974 | |
5.4069,0.55657 | |
6.8825,3.9115 | |
11.708,5.3854 | |
5.7737,2.4406 | |
7.8247,6.7318 | |
7.0931,1.0463 | |
5.0702,5.1337 | |
5.8014,1.844 | |
11.7,8.0043 | |
5.5416,1.0179 | |
7.5402,6.7504 | |
5.3077,1.8396 | |
7.4239,4.2885 | |
7.6031,4.9981 | |
6.3328,1.4233 | |
6.3589,-1.4211 | |
6.2742,2.4756 | |
5.6397,4.6042 | |
9.3102,3.9624 | |
9.4536,5.4141 | |
8.8254,5.1694 | |
5.1793,-0.74279 | |
21.279,17.929 | |
14.908,12.054 | |
18.959,17.054 | |
7.2182,4.8852 | |
8.2951,5.7442 | |
10.236,7.7754 | |
5.4994,1.0173 | |
20.341,20.992 | |
10.136,6.6799 | |
7.3345,4.0259 | |
6.0062,1.2784 | |
7.2259,3.3411 | |
5.0269,-2.6807 | |
6.5479,0.29678 | |
7.5386,3.8845 | |
5.0365,5.7014 | |
10.274,6.7526 | |
5.1077,2.0576 | |
5.7292,0.47953 | |
5.1884,0.20421 | |
6.3557,0.67861 | |
9.7687,7.5435 | |
6.5159,5.3436 | |
8.5172,4.2415 | |
9.1802,6.7981 | |
6.002,0.92695 | |
5.5204,0.152 | |
5.0594,2.8214 | |
5.7077,1.8451 | |
7.6366,4.2959 | |
5.8707,7.2029 | |
5.3054,1.9869 | |
8.2934,0.14454 | |
13.394,9.0551 | |
5.4369,0.61705 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"bufio" | |
"fmt" | |
"image/color" | |
"log" | |
"os" | |
"gonum.org/v1/plot" | |
"gonum.org/v1/plot/plotter" | |
"gonum.org/v1/plot/vg/draw" | |
) | |
func main() { | |
xys, err := readData("data.txt") | |
if err != nil { | |
log.Fatalf("cound not read data.txt: %v", err) | |
} | |
err = plotData("out.png", xys) | |
if err != nil { | |
log.Fatalf("could not plot data: %v", err) | |
} | |
} | |
// xy | |
type xy struct{ x, y float64 } | |
func readData(path string) (plotter.XYs, error) { | |
f, err := os.Open(path) | |
if err != nil { | |
return nil, err | |
} | |
defer f.Close() | |
var xys plotter.XYs | |
s := bufio.NewScanner(f) | |
// for every line in file... | |
for s.Scan() { | |
var x, y float64 | |
_, err := fmt.Sscanf(s.Text(), "%f,%f", &x, &y) | |
if err != nil { | |
log.Printf("descarding bad data point %q: %v", s.Text(), err) | |
} | |
// ...append the data to plotter.XYs | |
xys = append(xys, struct{ X, Y float64 }{x, y}) | |
} | |
if err := s.Err(); err != nil { | |
return nil, fmt.Errorf("could not scan: %v", err) | |
} | |
return xys, nil | |
} | |
func plotData(path string, xys plotter.XYs) error { | |
// create file to write image to | |
f, err := os.Create(path) | |
if err != nil { | |
log.Fatalf("could not create %s: %v", path, err) | |
} | |
// initilize the canvas | |
p, err := plot.New() | |
if err != nil { | |
log.Fatalf("could not create a plot: %v", err) | |
} | |
// create scatter with all data points | |
s, err := plotter.NewScatter(xys) | |
if err != nil { | |
return fmt.Errorf("could not create scatter: %v", err) | |
} | |
// styling can be changed after scatter has been initialized | |
s.GlyphStyle.Shape = draw.CrossGlyph{} | |
s.Color = color.RGBA{R: 255, A: 255} | |
p.Add(s) // add the scatter to the plot | |
wt, err := p.WriterTo(256, 256, "png") | |
if err != nil { | |
log.Fatalf("could not create writer: %v", err) | |
} | |
f, err = os.Create("out.png") | |
if err != nil { | |
log.Fatalf("could not craete out.png: %v", err) | |
} | |
defer f.Close() | |
_, err = wt.WriteTo(f) | |
if err != nil { | |
log.Fatalf("could not write to out.png: %v", err) | |
} | |
return err | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment