func (pt *Dots) Plot(da plot.DrawArea, plt *plot.Plot) { trX, trY := plt.Transforms(&da) da.SetColor(pt.Color) for i := range pt.Y { // Transform the data x, y coordinate of this bubble // to the corresponding drawing coordinate. x := trX(pt.X[i]) y := trY(pt.Y[i]) // Get the radius of this bubble. The radius // is specified in drawing units (i.e., its size // is given as the final size at which it will // be drawn) so it does not need to be transformed. rad := vg.Length(2) // Fill a circle centered at x,y on the draw area. var p vg.Path p.Move(x+rad, y) p.Arc(x, y, rad, 0, 2*math.Pi) p.Close() da.Fill(p) } }
// Plot implements the Plot method of the plot.Plotter interface. func (bs *Bubbles) Plot(da plot.DrawArea, plt *plot.Plot) { trX, trY := plt.Transforms(&da) da.SetColor(bs.Color) for _, d := range bs.XYZs { x := trX(d.X) y := trY(d.Y) if !da.Contains(plot.Point{x, y}) { continue } rad := bs.radius(d.Z) // draw a circle centered at x, y var p vg.Path p.Move(x+rad, y) p.Arc(x, y, rad, 0, 2*math.Pi) p.Close() da.Fill(p) } }
// Plot draws the Line, implementing the plot.Plotter // interface. func (pts *Line) Plot(da plot.DrawArea, plt *plot.Plot) { trX, trY := plt.Transforms(&da) ps := make([]plot.Point, len(pts.XYs)) for i, p := range pts.XYs { ps[i].X = trX(p.X) ps[i].Y = trY(p.Y) } if pts.ShadeColor != nil && len(ps) > 0 { da.SetColor(*pts.ShadeColor) minY := trY(plt.Y.Min) var pa vg.Path pa.Move(ps[0].X, minY) for i := range pts.XYs { pa.Line(ps[i].X, ps[i].Y) } pa.Line(ps[len(pts.XYs)-1].X, minY) pa.Close() da.Fill(pa) } da.StrokeLines(pts.LineStyle, da.ClipLinesXY(ps)...) }