import ( "log" "image/color" "go-hep.org/x/hep/hbook" "golang.org/x/exp/rand" "gonum.org/v1/gonum/stat/distuv" ) npoints := 10000 // Create a normal distribution. dist := distuv.Normal{ Mu: 0, Sigma: 1, Src: rand.New(rand.NewSource(0)), } // Draw some random values from the standard // normal distribution. hist := hbook.NewH1D(100, -4, +4) for i := 0; i < npoints; i++ { v := dist.Rand() hist.Fill(v, 1) } // normalize histogram area := 0.0 for _, bin := range hist.Binning().Bins() { area += bin.SumW() * bin.XWidth() } hist.Scale(1 / area) printf("entries: %v\n", hist.Entries()) printf("x-mean: %v\n", hist.XMean()) printf("x-stddev: %v\n", hist.XStdDev()) import ( "go-hep.org/x/hep/hplot" "gonum.org/v1/plot/vg" ) // Make a plot and set its title. p := hplot.New() p.Title.Text = "Histogram" p.X.Label.Text = "X" p.Y.Label.Text = "Y" // Create a histogram of our values drawn // from the standard normal. h := hplot.NewH1D(hist) h.Infos.Style = hplot.HInfoSummary p.Add(h) // The normal distribution function norm := hplot.NewFunction(dist.Prob) norm.Color = color.RGBA{R: 0xff, A: 255} norm.Width = vg.Length(2) p.Add(norm) // draw a grid p.Add(hplot.NewGrid()) hplot.Show(p, 640, -1, "png") // Draw some random values from a shifted standard normal // normal distribution. h1 := hbook.NewH1D(100, -5, +5) h2 := hbook.NewH1D(100, -5, +5) for i := 0; i < npoints; i++ { h1.Fill(rand.NormFloat64()-1, 1.0) h2.Fill(rand.NormFloat64()+1, 1.3) } p = hplot.New() p.Title.Text = "Histos + color blending" p.X.Label.Text = "x" hh1 := hplot.NewH1D(h1) hh1.FillColor = color.NRGBA{R:0xff, A:128} hh1.Color = color.Black hh2 := hplot.NewH1D(h2) hh2.FillColor = color.NRGBA{B:0xff, A:128} hh2.Color = color.Black p.Add(hh1, hh2, hplot.NewGrid()) hplot.Show(p, 640, -1, "png")