pltdemo.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package main
  2. import (
  3. "image/color"
  4. "log"
  5. "math"
  6. "math/rand"
  7. "gonum.org/v1/plot"
  8. "gonum.org/v1/plot/plotter"
  9. "gonum.org/v1/plot/vg"
  10. "gonum.org/v1/plot/vg/draw"
  11. )
  12. func main() {
  13. rand.Seed(103)
  14. randsinpts := func(n int, maxt float64) plotter.XYs {
  15. pts := make(plotter.XYs, n)
  16. for idx := range pts {
  17. t := rand.Float64() * maxt
  18. pts[idx].X = t
  19. pts[idx].Y = math.Sin(t)
  20. }
  21. return pts
  22. }
  23. sinn := func(n int) plotter.XYs {
  24. pts := make(plotter.XYs, n)
  25. for idx := range pts {
  26. t := float64(idx) * 0.001
  27. pts[idx].X = t
  28. pts[idx].Y = math.Sin(t)
  29. }
  30. return pts
  31. }
  32. n := 10000
  33. data := sinn(n)
  34. p, err := plot.New()
  35. if err != nil {
  36. log.Panic(err)
  37. }
  38. p.Title.Text = "Sine stuff"
  39. p.X.Label.Text = "time (s)"
  40. p.X.Max = 10
  41. p.X.Min = 0
  42. p.Y.Label.Text = "w/e"
  43. p.Y.Max = 1
  44. p.Y.Min = -1
  45. p.Add(plotter.NewGrid())
  46. line, err := plotter.NewLine(data)
  47. if err != nil {
  48. log.Panic(err)
  49. }
  50. line.Color = color.RGBA{B: 255, A: 255}
  51. line.Width = vg.Millimeter / 2
  52. randpts := randsinpts(3, data[len(data)-1].X)
  53. points, err := plotter.NewScatter(randpts)
  54. if err != nil {
  55. log.Panic(err)
  56. }
  57. points.Shape = draw.CircleGlyph{}
  58. points.Color = color.RGBA{R: 255, A: 255}
  59. p.Add(line, points)
  60. err = p.Save(10*vg.Centimeter, 5*vg.Centimeter, "plot.png")
  61. if err != nil {
  62. log.Panic(err)
  63. }
  64. }