func (self *LineChart) drawSeries(x, y, w, h float64, ctx vg.Context) { // Boundries baseline := y + h _, max, count := self.Model.Limits() horIncr := w / (count - 1) vratio := (h - 1) / max for _, s := range self.Model.Series() { c1 := CloneColor(s.Color) c1.A = 150 ctx.StrokeColor(c1) ctx.StrokeWidth(s.StrokeWidth) ctx.BeginPath() for i, f := range s.Data { if i == 0 { ctx.MoveTo(x+float64(i)*horIncr, baseline-(f*vratio)) } else { ctx.LineTo(x+float64(i)*horIncr, baseline-(f*vratio)) } } ctx.Stroke() if self.Fill { ctx.BeginPath() // ctx.MoveTo(x, baseline) c2 := CloneColor(s.Color) c2.A = 200 ctx.FillColor(c2) for i, f := range s.Data { if i == 0 { ctx.MoveTo(x+float64(i)*horIncr, baseline-(f*vratio)) } ctx.LineTo(x+float64(i)*horIncr, baseline-(f*vratio)) if i == len(s.Data)-1 { ctx.LineTo(x+float64(i)*horIncr, baseline) ctx.LineTo(x, baseline) ctx.MoveTo(x, baseline-(s.Data[0]*vratio)) break } } ctx.Fill() } } }