go-chart/histogram_series.go

68 lines
1.7 KiB
Go
Raw Normal View History

2016-07-17 04:42:31 -04:00
package chart
2017-02-03 14:26:53 -05:00
import "fmt"
2016-07-17 04:42:31 -04:00
// HistogramSeries is a special type of series that draws as a histogram.
// Some peculiarities; it will always be lower bounded at 0 (at the very least).
// This may alter ranges a bit and generally you want to put a histogram series on it's own y-axis.
type HistogramSeries struct {
Name string
Style Style
2016-07-31 19:54:09 -04:00
YAxis YAxisType
2016-07-17 04:42:31 -04:00
InnerSeries ValueProvider
}
// GetName implements Series.GetName.
func (hs HistogramSeries) GetName() string {
return hs.Name
}
// GetStyle implements Series.GetStyle.
func (hs HistogramSeries) GetStyle() Style {
return hs.Style
}
// GetYAxis returns which yaxis the series is mapped to.
2016-07-31 19:54:09 -04:00
func (hs HistogramSeries) GetYAxis() YAxisType {
2016-07-17 04:42:31 -04:00
return hs.YAxis
}
// Len implements BoundedValueProvider.Len.
func (hs HistogramSeries) Len() int {
return hs.InnerSeries.Len()
}
// GetValue implements ValueProvider.GetValue.
func (hs HistogramSeries) GetValue(index int) (x, y float64) {
return hs.InnerSeries.GetValue(index)
}
// GetBoundedValue implements BoundedValueProvider.GetBoundedValue
func (hs HistogramSeries) GetBoundedValue(index int) (x, y1, y2 float64) {
vx, vy := hs.InnerSeries.GetValue(index)
x = vx
if vy > 0 {
y1 = vy
return
}
y2 = vy
return
}
// Render implements Series.Render.
func (hs HistogramSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) {
style := hs.Style.InheritFrom(defaults)
2016-07-29 19:36:29 -04:00
Draw.HistogramSeries(r, canvasBox, xrange, yrange, style, hs)
2016-07-17 04:42:31 -04:00
}
2017-02-03 14:26:53 -05:00
// Validate validates the series.
func (hs HistogramSeries) Validate() error {
if hs.InnerSeries == nil {
return fmt.Errorf("histogram series requires InnerSeries to be set")
}
return nil
}