// Plot implements the plot.Plotter interface. func (b *BarChart) Plot(c draw.Canvas, plt *plot.Plot) { trX, trY := plt.Transforms(&c) for i, ht := range b.Values { x := b.XMin + float64(i) xmin := trX(float64(x)) if !c.ContainsX(xmin) { continue } xmin = xmin - b.Width/2 + b.Offset xmax := xmin + b.Width bottom := b.stackedOn.BarHeight(i) ymin := trY(bottom) ymax := trY(bottom + ht) pts := []draw.Point{ {xmin, ymin}, {xmin, ymax}, {xmax, ymax}, {xmax, ymin}, } poly := c.ClipPolygonY(pts) c.FillPolygon(b.Color, poly) pts = append(pts, draw.Point{xmin, ymin}) outline := c.ClipLinesY(pts) c.StrokeLines(b.LineStyle, outline...) } }
func (b *BarChart) Thumbnail(c *draw.Canvas) { pts := []draw.Point{ {c.Min.X, c.Min.Y}, {c.Min.X, c.Max.Y}, {c.Max.X, c.Max.Y}, {c.Max.X, c.Min.Y}, } poly := c.ClipPolygonY(pts) c.FillPolygon(b.Color, poly) pts = append(pts, draw.Point{c.Min.X, c.Min.Y}) outline := c.ClipLinesY(pts) c.StrokeLines(b.LineStyle, outline...) }
// Thumbnail the thumbnail for the Line, // implementing the plot.Thumbnailer interface. func (pts *Line) Thumbnail(c *draw.Canvas) { if pts.ShadeColor != nil { points := []draw.Point{ {c.Min.X, c.Min.Y}, {c.Min.X, c.Max.Y}, {c.Max.X, c.Max.Y}, {c.Max.X, c.Min.Y}, } poly := c.ClipPolygonY(points) c.FillPolygon(*pts.ShadeColor, poly) points = append(points, draw.Point{c.Min.X, c.Min.Y}) } else { y := c.Center().Y c.StrokeLine2(pts.LineStyle, c.Min.X, y, c.Max.X, y) } }