chart

package module
v1.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 14, 2021 License: MIT Imports: 18 Imported by: 0

README

go-chart

Build StatusGo Report Card

Package chart is a very simple golang native charting library that supports timeseries and continuous line charts.

The v1.0 release has been tagged so things should be more or less stable, if something changes please log an issue.

Master should now be on the v2.x codebase, which brings a couple new features and better handling of basics like axes labeling etc. Per usual, see _examples for more information.

Installation

To install chart run the following:

> go get -u github.com/screeningeagledreamlab/go-chart

Most of the components are interchangeable so feel free to crib whatever you want.

Output Examples

Spark Lines:

Single axis:

Two axis:

Other Chart Types

Pie Chart:

The code for this chart can be found in _examples/pie_chart/main.go.

Stacked Bar:

The code for this chart can be found in _examples/stacked_bar/main.go.

Code Examples

Actual chart configurations and examples can be found in the ./_examples/ directory. They are web servers, so start them with go run main.go then access http://localhost:8080 to see the output.

Usage

Everything starts with the chart.Chart object. The bare minimum to draw a chart would be the following:


import (
    ...
    "bytes"
    ...
    "github.com/screeningeagledreamlab/go-chart" //exposes "chart"
)

graph := chart.Chart{
    Series: []chart.Series{
        chart.ContinuousSeries{
            XValues: []float64{1.0, 2.0, 3.0, 4.0},
            YValues: []float64{1.0, 2.0, 3.0, 4.0},
        },
    },
}

buffer := bytes.NewBuffer([]byte{})
err := graph.Render(chart.PNG, buffer)

Explanation of the above: A chart can have many Series, a Series is a collection of things that need to be drawn according to the X range and the Y range(s).

Here, we have a single series with x range values as float64s, rendered to a PNG. Note; we can pass any type of io.Writer into Render(...), meaning that we can render the chart to a file or a resonse or anything else that implements io.Writer.

API Overview

Everything on the chart.Chart object has defaults that can be overriden. Whenever a developer sets a property on the chart object, it is to be assumed that value will be used instead of the default. One complication here is any object's root chart.Style object (i.e named Style) and the Show property specifically, if any other property is set and the Show property is unset, it is assumed to be it's default value of False.

The best way to see the api in action is to look at the examples in the ./_examples/ directory.

Design Philosophy

I wanted to make a charting library that used only native golang, that could be stood up on a server (i.e. it had built in fonts).

The goal with the API itself is to have the "zero value be useful", and to require the user to not code more than they absolutely needed.

Contributions

This library is super early but contributions are welcome.

Documentation

Index

Constants

View Source
const (
	// DefaultChartHeight is the default chart height.
	DefaultChartHeight = 400
	// DefaultChartWidth is the default chart width.
	DefaultChartWidth = 1024
	// DefaultStrokeWidth is the default chart stroke width.
	DefaultStrokeWidth = 0.0
	// DefaultDotWidth is the default chart dot width.
	DefaultDotWidth = 0.0
	// DefaultSeriesLineWidth is the default line width.
	DefaultSeriesLineWidth = 1.0
	// DefaultAxisLineWidth is the line width of the axis lines.
	DefaultAxisLineWidth = 1.0
	//DefaultDPI is the default dots per inch for the chart.
	DefaultDPI = 92.0
	// DefaultMinimumFontSize is the default minimum font size.
	DefaultMinimumFontSize = 8.0
	// DefaultFontSize is the default font size.
	DefaultFontSize = 10.0
	// DefaultTitleFontSize is the default title font size.
	DefaultTitleFontSize = 18.0
	// DefaultAnnotationDeltaWidth is the width of the left triangle out of annotations.
	DefaultAnnotationDeltaWidth = 10
	// DefaultAnnotationFontSize is the font size of annotations.
	DefaultAnnotationFontSize = 10.0
	// DefaultAxisFontSize is the font size of the axis labels.
	DefaultAxisFontSize = 10.0
	// DefaultTitleTop is the default distance from the top of the chart to put the title.
	DefaultTitleTop = 10

	// DefaultBackgroundStrokeWidth is the default stroke on the chart background.
	DefaultBackgroundStrokeWidth = 0.0
	// DefaultCanvasStrokeWidth is the default stroke on the chart canvas.
	DefaultCanvasStrokeWidth = 0.0

	// DefaultLineSpacing is the default vertical distance between lines of text.
	DefaultLineSpacing = 5

	// DefaultYAxisMargin is the default distance from the right of the canvas to the y axis labels.
	DefaultYAxisMargin = 10
	// DefaultXAxisMargin is the default distance from bottom of the canvas to the x axis labels.
	DefaultXAxisMargin = 10

	//DefaultVerticalTickHeight is half the margin.
	DefaultVerticalTickHeight = DefaultXAxisMargin >> 1
	//DefaultHorizontalTickWidth is half the margin.
	DefaultHorizontalTickWidth = DefaultYAxisMargin >> 1

	// DefaultTickCount is the default number of ticks to show
	DefaultTickCount = 10
	// DefaultTickCountSanityCheck is a hard limit on number of ticks to prevent infinite loops.
	DefaultTickCountSanityCheck = 1 << 10 //1024

	// DefaultMinimumTickHorizontalSpacing is the minimum distance between horizontal ticks.
	DefaultMinimumTickHorizontalSpacing = 20
	// DefaultMinimumTickVerticalSpacing is the minimum distance between vertical ticks.
	DefaultMinimumTickVerticalSpacing = 20

	// DefaultDateFormat is the default date format.
	DefaultDateFormat = "2006-01-02"
	// DefaultDateHourFormat is the date format for hour timestamp formats.
	DefaultDateHourFormat = "01-02 3PM"
	// DefaultDateMinuteFormat is the date format for minute range timestamp formats.
	DefaultDateMinuteFormat = "01-02 3:04PM"
	// DefaultFloatFormat is the default float format.
	DefaultFloatFormat = "%.2f"
	// DefaultPercentValueFormat is the default percent format.
	DefaultPercentValueFormat = "%0.2f%%"

	// DefaultBarSpacing is the default pixel spacing between bars.
	DefaultBarSpacing = 100
	// DefaultBarWidth is the default pixel width of bars in a bar chart.
	DefaultBarWidth = 50
)
View Source
const (
	// ContentTypePNG is the png mime type.
	ContentTypePNG = "image/png"

	// ContentTypeSVG is the svg mime type.
	ContentTypeSVG = "image/svg+xml"
)
View Source
const (
	// DefaultMACDPeriodPrimary is the long window.
	DefaultMACDPeriodPrimary = 26
	// DefaultMACDPeriodSecondary is the short window.
	DefaultMACDPeriodSecondary = 12
	// DefaultMACDSignalPeriod is the signal period to compute for the MACD.
	DefaultMACDSignalPeriod = 9
)
View Source
const (
	// DefaultEMAPeriod is the default EMA period used in the sigma calculation.
	DefaultEMAPeriod = 12
)
View Source
const (
	// DefaultSimpleMovingAveragePeriod is the default number of values to average.
	DefaultSimpleMovingAveragePeriod = 16
)
View Source
const (
	// Disabled indicates if the value should be interpreted as set intentionally to zero.
	// this is because golang optionals aren't here yet.
	Disabled = -1
)

Variables

View Source
var (
	// ColorWhite is white.
	ColorWhite = drawing.Color{R: 255, G: 255, B: 255, A: 255}
	// ColorBlue is the basic theme blue color.
	ColorBlue = drawing.Color{R: 0, G: 116, B: 217, A: 255}
	// ColorCyan is the basic theme cyan color.
	ColorCyan = drawing.Color{R: 0, G: 217, B: 210, A: 255}
	// ColorGreen is the basic theme green color.
	ColorGreen = drawing.Color{R: 0, G: 217, B: 101, A: 255}
	// ColorRed is the basic theme red color.
	ColorRed = drawing.Color{R: 217, G: 0, B: 116, A: 255}
	// ColorOrange is the basic theme orange color.
	ColorOrange = drawing.Color{R: 217, G: 101, B: 0, A: 255}
	// ColorYellow is the basic theme yellow color.
	ColorYellow = drawing.Color{R: 217, G: 210, B: 0, A: 255}
	// ColorBlack is the basic theme black color.
	ColorBlack = drawing.Color{R: 51, G: 51, B: 51, A: 255}
	// ColorLightGray is the basic theme light gray color.
	ColorLightGray = drawing.Color{R: 239, G: 239, B: 239, A: 255}

	// ColorAlternateBlue is a alternate theme color.
	ColorAlternateBlue = drawing.Color{R: 106, G: 195, B: 203, A: 255}
	// ColorAlternateGreen is a alternate theme color.
	ColorAlternateGreen = drawing.Color{R: 42, G: 190, B: 137, A: 255}
	// ColorAlternateGray is a alternate theme color.
	ColorAlternateGray = drawing.Color{R: 110, G: 128, B: 139, A: 255}
	// ColorAlternateYellow is a alternate theme color.
	ColorAlternateYellow = drawing.Color{R: 240, G: 174, B: 90, A: 255}
	// ColorAlternateLightGray is a alternate theme color.
	ColorAlternateLightGray = drawing.Color{R: 187, G: 190, B: 191, A: 255}

	// ColorTransparent is a transparent (alpha zero) color.
	ColorTransparent = drawing.Color{R: 1, G: 1, B: 1, A: 0}
)
View Source
var (
	// DefaultBackgroundColor is the default chart background color.
	// It is equivalent to css color:white.
	DefaultBackgroundColor = ColorWhite
	// DefaultBackgroundStrokeColor is the default chart border color.
	// It is equivalent to color:white.
	DefaultBackgroundStrokeColor = ColorWhite
	// DefaultCanvasColor is the default chart canvas color.
	// It is equivalent to css color:white.
	DefaultCanvasColor = ColorWhite
	// DefaultCanvasStrokeColor is the default chart canvas stroke color.
	// It is equivalent to css color:white.
	DefaultCanvasStrokeColor = ColorWhite
	// DefaultTextColor is the default chart text color.
	// It is equivalent to #333333.
	DefaultTextColor = ColorBlack
	// DefaultAxisColor is the default chart axis line color.
	// It is equivalent to #333333.
	DefaultAxisColor = ColorBlack
	// DefaultStrokeColor is the default chart border color.
	// It is equivalent to #efefef.
	DefaultStrokeColor = ColorLightGray
	// DefaultFillColor is the default fill color.
	// It is equivalent to #0074d9.
	DefaultFillColor = ColorBlue
	// DefaultAnnotationFillColor is the default annotation background color.
	DefaultAnnotationFillColor = ColorWhite
	// DefaultGridLineColor is the default grid line color.
	DefaultGridLineColor = ColorLightGray
)
View Source
var (
	// DefaultColors are a couple default series colors.
	DefaultColors = []drawing.Color{
		ColorBlue,
		ColorGreen,
		ColorRed,
		ColorCyan,
		ColorOrange,
	}

	// DefaultAlternateColors are a couple alternate colors.
	DefaultAlternateColors = []drawing.Color{
		ColorAlternateBlue,
		ColorAlternateGreen,
		ColorAlternateGray,
		ColorAlternateYellow,
		ColorBlue,
		ColorGreen,
		ColorRed,
		ColorCyan,
		ColorOrange,
	}
)
View Source
var (
	// DashArrayDots is a dash array that represents '....' style stroke dashes.
	DashArrayDots = []int{1, 1}
	// DashArrayDashesSmall is a dash array that represents '- - -' style stroke dashes.
	DashArrayDashesSmall = []int{3, 3}
	// DashArrayDashesMedium is a dash array that represents '-- -- --' style stroke dashes.
	DashArrayDashesMedium = []int{5, 5}
	// DashArrayDashesLarge is a dash array that represents '----- ----- -----' style stroke dashes.
	DashArrayDashesLarge = []int{10, 10}
)
View Source
var (
	// DefaultAnnotationPadding is the padding around an annotation.
	DefaultAnnotationPadding = Box{Top: 5, Left: 5, Right: 5, Bottom: 5}

	// DefaultBackgroundPadding is the default canvas padding config.
	DefaultBackgroundPadding = Box{Top: 5, Left: 5, Right: 5, Bottom: 5}
)
View Source
var AlternateColorPalette alternateColorPalette

AlternateColorPalette represents the default palatte.

View Source
var (
	// BoxZero is a preset box that represents an intentional zero value.
	BoxZero = Box{IsSet: true}
)
View Source
var DefaultColorPalette defaultColorPalette

DefaultColorPalette represents the default palatte.

View Source
var (
	// Draw contains helpers for drawing common objects.
	Draw = &draw{}
)
View Source
var (
	// Text contains utilities for text.
	Text = &text{}
)

Functions

func FloatValueFormatter

func FloatValueFormatter(v interface{}) string

FloatValueFormatter is a ValueFormatter for float64.

func FloatValueFormatterWithFormat

func FloatValueFormatterWithFormat(v interface{}, floatFormat string) string

FloatValueFormatterWithFormat is a ValueFormatter for float64 with a given format.

func GetAlternateColor

func GetAlternateColor(index int) drawing.Color

GetAlternateColor returns a color from the default list by index. NOTE: the index will wrap around (using a modulo).

func GetDefaultColor

func GetDefaultColor(index int) drawing.Color

GetDefaultColor returns a color from the default list by index. NOTE: the index will wrap around (using a modulo).

func GetDefaultFont

func GetDefaultFont() (*truetype.Font, error)

GetDefaultFont returns the default font (Roboto-Medium).

func Jet

func Jet(v, vmin, vmax float64) drawing.Color

Jet is a color map provider based on matlab's jet color map.

func PercentValueFormatter

func PercentValueFormatter(v interface{}) string

PercentValueFormatter is a formatter for percent values. NOTE: it normalizes the values, i.e. multiplies by 100.0.

func TimeDateValueFormatter

func TimeDateValueFormatter(v interface{}) string

TimeDateValueFormatter is a ValueFormatter for timestamps.

func TimeHourValueFormatter

func TimeHourValueFormatter(v interface{}) string

TimeHourValueFormatter is a ValueFormatter for timestamps.

func TimeMinuteValueFormatter

func TimeMinuteValueFormatter(v interface{}) string

TimeMinuteValueFormatter is a ValueFormatter for timestamps.

func TimeValueFormatter

func TimeValueFormatter(v interface{}) string

TimeValueFormatter is a ValueFormatter for timestamps.

func Viridis

func Viridis(v, vmin, vmax float64) drawing.Color

Viridis creates a color map provider.

Types

type AnnotationSeries

type AnnotationSeries struct {
	Name        string
	Style       Style
	YAxis       YAxisType
	Annotations []Value2
}

AnnotationSeries is a series of labels on the chart.

func LastValueAnnotation

func LastValueAnnotation(innerSeries ValuesProvider, vfs ...ValueFormatter) AnnotationSeries

LastValueAnnotation returns an annotation series of just the last value of a value provider.

func (AnnotationSeries) GetName

func (as AnnotationSeries) GetName() string

GetName returns the name of the time series.

func (AnnotationSeries) GetStyle

func (as AnnotationSeries) GetStyle() Style

GetStyle returns the line style.

func (AnnotationSeries) GetYAxis

func (as AnnotationSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (AnnotationSeries) Measure

func (as AnnotationSeries) Measure(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) Box

Measure returns a bounds box of the series.

func (AnnotationSeries) Render

func (as AnnotationSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render draws the series.

func (AnnotationSeries) Validate

func (as AnnotationSeries) Validate() error

Validate validates the series.

type Axis

type Axis interface {
	GetName() string
	SetName(name string)

	GetStyle() Style
	SetStyle(style Style)

	GetTicks() []Tick
	GenerateTicks(r Renderer, ra Range, vf ValueFormatter) []Tick

	// GenerateGridLines returns the gridlines for the axis.
	GetGridLines(ticks []Tick) []GridLine

	// Measure should return an absolute box for the axis.
	// This is used when auto-fitting the canvas to the background.
	Measure(r Renderer, canvasBox Box, ra Range, style Style, ticks []Tick) Box

	// Render renders the axis.
	Render(r Renderer, canvasBox Box, ra Range, style Style, ticks []Tick)
}

Axis is a chart feature detailing what values happen where.

type BarChart

type BarChart struct {
	Title      string
	TitleStyle Style

	ColorPalette ColorPalette
	Min          float64
	Max          float64
	Width        int
	Height       int
	DPI          float64

	BarWidth int

	Background Style
	Canvas     Style

	XAxis Style
	YAxis YAxis

	BarSpacing int

	Font *truetype.Font

	Bars     []Value
	Series   []Series
	Elements []Renderable
	// contains filtered or unexported fields
}

BarChart is a chart that draws bars on a range.

func (BarChart) GetBarSpacing

func (bc BarChart) GetBarSpacing() int

GetBarSpacing returns the spacing between bars.

func (BarChart) GetBarWidth

func (bc BarChart) GetBarWidth() int

GetBarWidth returns the default bar width.

func (BarChart) GetColorPalette

func (bc BarChart) GetColorPalette() ColorPalette

GetColorPalette returns the color palette for the chart.

func (BarChart) GetDPI

func (bc BarChart) GetDPI() float64

GetDPI returns the dpi for the chart.

func (BarChart) GetFont

func (bc BarChart) GetFont() *truetype.Font

GetFont returns the text font.

func (BarChart) GetHeight

func (bc BarChart) GetHeight() int

GetHeight returns the chart height or the default value.

func (BarChart) GetWidth

func (bc BarChart) GetWidth() int

GetWidth returns the chart width or the default value.

func (BarChart) Render

func (bc BarChart) Render(rp RendererProvider, w io.Writer) error

Render renders the chart with the given renderer to the given io.Writer.

type BollingerBandsSeries

type BollingerBandsSeries struct {
	Name  string
	Style Style
	YAxis YAxisType

	Period      int
	K           float64
	InnerSeries ValuesProvider
	// contains filtered or unexported fields
}

BollingerBandsSeries draws bollinger bands for an inner series. Bollinger bands are defined by two lines, one at SMA+k*stddev, one at SMA-k*stdev.

func (*BollingerBandsSeries) GetBoundedLastValues

func (bbs *BollingerBandsSeries) GetBoundedLastValues() (x, y1, y2 float64)

GetBoundedLastValues returns the last bounded value for the series.

func (*BollingerBandsSeries) GetBoundedValues

func (bbs *BollingerBandsSeries) GetBoundedValues(index int) (x, y1, y2 float64)

GetBoundedValues gets the bounded value for the series.

func (BollingerBandsSeries) GetK

func (bbs BollingerBandsSeries) GetK(defaults ...float64) float64

GetK returns the K value, or the number of standard deviations above and below to band the simple moving average with. Typical K value is 2.0.

func (BollingerBandsSeries) GetName

func (bbs BollingerBandsSeries) GetName() string

GetName returns the name of the time series.

func (BollingerBandsSeries) GetPeriod

func (bbs BollingerBandsSeries) GetPeriod() int

GetPeriod returns the window size.

func (BollingerBandsSeries) GetStyle

func (bbs BollingerBandsSeries) GetStyle() Style

GetStyle returns the line style.

func (BollingerBandsSeries) GetYAxis

func (bbs BollingerBandsSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (BollingerBandsSeries) Len

func (bbs BollingerBandsSeries) Len() int

Len returns the number of elements in the series.

func (*BollingerBandsSeries) Render

func (bbs *BollingerBandsSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (BollingerBandsSeries) Validate

func (bbs BollingerBandsSeries) Validate() error

Validate validates the series.

type BoundedLastValuesProvider

type BoundedLastValuesProvider interface {
	GetBoundedLastValues() (x, y1, y2 float64)
}

BoundedLastValuesProvider is a special type of value provider that can return it's (potentially computed) bounded last value.

type BoundedValuesProvider

type BoundedValuesProvider interface {
	Len() int
	GetBoundedValues(index int) (x, y1, y2 float64)
}

BoundedValuesProvider allows series to return a range.

type Box

type Box struct {
	Top    int
	Left   int
	Right  int
	Bottom int
	IsSet  bool
}

Box represents the main 4 dimensions of a box.

func NewBox

func NewBox(top, left, right, bottom int) Box

NewBox returns a new (set) box.

func (Box) Aspect

func (b Box) Aspect() float64

Aspect returns the aspect ratio of the box.

func (Box) Center

func (b Box) Center() (x, y int)

Center returns the center of the box

func (Box) Clone

func (b Box) Clone() Box

Clone returns a new copy of the box.

func (Box) Constrain

func (b Box) Constrain(other Box) Box

Constrain is similar to `Fit` except that it will work more literally like the opposite of grow.

func (Box) Corners

func (b Box) Corners() BoxCorners

Corners returns the box as a set of corners.

func (Box) Equals

func (b Box) Equals(other Box) bool

Equals returns if the box equals another box.

func (Box) Fit

func (b Box) Fit(other Box) Box

Fit is functionally the inverse of grow. Fit maintains the original aspect ratio of the `other` box, but constrains it to the bounds of the target box.

func (Box) GetBottom

func (b Box) GetBottom(defaults ...int) int

GetBottom returns a coalesced value with a default.

func (Box) GetLeft

func (b Box) GetLeft(defaults ...int) int

GetLeft returns a coalesced value with a default.

func (Box) GetRight

func (b Box) GetRight(defaults ...int) int

GetRight returns a coalesced value with a default.

func (Box) GetTop

func (b Box) GetTop(defaults ...int) int

GetTop returns a coalesced value with a default.

func (Box) Grow

func (b Box) Grow(other Box) Box

Grow grows a box based on another box.

func (Box) Height

func (b Box) Height() int

Height returns the height

func (Box) IsBiggerThan

func (b Box) IsBiggerThan(other Box) bool

IsBiggerThan returns if a box is bigger than another box.

func (Box) IsSmallerThan

func (b Box) IsSmallerThan(other Box) bool

IsSmallerThan returns if a box is smaller than another box.

func (Box) IsZero

func (b Box) IsZero() bool

IsZero returns if the box is set or not.

func (Box) OuterConstrain

func (b Box) OuterConstrain(bounds, other Box) Box

OuterConstrain is similar to `Constraint` with the difference that it applies corrections

func (Box) Shift

func (b Box) Shift(x, y int) Box

Shift pushes a box by x,y.

func (Box) String

func (b Box) String() string

String returns a string representation of the box.

func (Box) Width

func (b Box) Width() int

Width returns the width

type BoxCorners

type BoxCorners struct {
	TopLeft, TopRight, BottomRight, BottomLeft Point
}

BoxCorners is a box with independent corners.

func (BoxCorners) Box

func (bc BoxCorners) Box() Box

Box return the BoxCorners as a regular box.

func (BoxCorners) Center

func (bc BoxCorners) Center() (x, y int)

Center returns the center of the box

func (BoxCorners) Equals

func (bc BoxCorners) Equals(other BoxCorners) bool

Equals returns if the box equals another box.

func (BoxCorners) Height

func (bc BoxCorners) Height() int

Height returns the height

func (BoxCorners) Rotate

func (bc BoxCorners) Rotate(thetaDegrees float64) BoxCorners

Rotate rotates the box.

func (BoxCorners) String

func (bc BoxCorners) String() string

func (BoxCorners) Width

func (bc BoxCorners) Width() int

Width returns the width

type Chart

type Chart struct {
	Title      string
	TitleStyle Style

	ColorPalette ColorPalette

	Width  int
	Height int
	DPI    float64

	Background Style
	Canvas     Style

	XAxis          XAxis
	YAxis          YAxis
	YAxisSecondary YAxis

	Font *truetype.Font

	Series   []Series
	Elements []Renderable
	// contains filtered or unexported fields
}

Chart is what we're drawing.

func (Chart) Box

func (c Chart) Box() Box

Box returns the chart bounds as a box.

func (Chart) GetColorPalette

func (c Chart) GetColorPalette() ColorPalette

GetColorPalette returns the color palette for the chart.

func (Chart) GetDPI

func (c Chart) GetDPI(defaults ...float64) float64

GetDPI returns the dpi for the chart.

func (Chart) GetFont

func (c Chart) GetFont() *truetype.Font

GetFont returns the text font.

func (Chart) GetHeight

func (c Chart) GetHeight() int

GetHeight returns the chart height or the default value.

func (Chart) GetWidth

func (c Chart) GetWidth() int

GetWidth returns the chart width or the default value.

func (Chart) Render

func (c Chart) Render(rp RendererProvider, w io.Writer) error

Render renders the chart with the given renderer to the given io.Writer.

type ColorPalette

type ColorPalette interface {
	BackgroundColor() drawing.Color
	BackgroundStrokeColor() drawing.Color
	CanvasColor() drawing.Color
	CanvasStrokeColor() drawing.Color
	AxisStrokeColor() drawing.Color
	TextColor() drawing.Color
	GetSeriesColor(index int) drawing.Color
}

ColorPalette is a set of colors that.

type ColorProvider

type ColorProvider func(v, vmin, vmax float64) drawing.Color

ColorProvider is a general provider for color ranges based on values.

type ConcatSeries

type ConcatSeries []Series

ConcatSeries is a special type of series that concatenates its `InnerSeries`.

func (ConcatSeries) GetValue

func (cs ConcatSeries) GetValue(index int) (x, y float64)

GetValue returns the value at the (meta) index (i.e 0 => totalLen-1)

func (ConcatSeries) Len

func (cs ConcatSeries) Len() int

Len returns the length of the concatenated set of series.

func (ConcatSeries) Validate

func (cs ConcatSeries) Validate() error

Validate validates the series.

type ContinuousRange

type ContinuousRange struct {
	Min        float64
	Max        float64
	Domain     int
	Descending bool
}

ContinuousRange represents a boundary for a set of numbers.

func (ContinuousRange) GetDelta

func (r ContinuousRange) GetDelta() float64

GetDelta returns the difference between the min and max value.

func (ContinuousRange) GetDomain

func (r ContinuousRange) GetDomain() int

GetDomain returns the range domain.

func (ContinuousRange) GetMax

func (r ContinuousRange) GetMax() float64

GetMax returns the max value for the continuous range.

func (ContinuousRange) GetMin

func (r ContinuousRange) GetMin() float64

GetMin gets the min value for the continuous range.

func (ContinuousRange) IsDescending

func (r ContinuousRange) IsDescending() bool

IsDescending returns if the range is descending.

func (ContinuousRange) IsZero

func (r ContinuousRange) IsZero() bool

IsZero returns if the ContinuousRange has been set or not.

func (*ContinuousRange) SetDomain

func (r *ContinuousRange) SetDomain(domain int)

SetDomain sets the range domain.

func (*ContinuousRange) SetMax

func (r *ContinuousRange) SetMax(max float64)

SetMax sets the max value for the continuous range.

func (*ContinuousRange) SetMin

func (r *ContinuousRange) SetMin(min float64)

SetMin sets the min value for the continuous range.

func (ContinuousRange) String

func (r ContinuousRange) String() string

String returns a simple string for the ContinuousRange.

func (ContinuousRange) Translate

func (r ContinuousRange) Translate(value float64) int

Translate maps a given value into the ContinuousRange space.

type ContinuousSeries

type ContinuousSeries struct {
	Name  string
	Style Style

	YAxis YAxisType

	XValueFormatter ValueFormatter
	YValueFormatter ValueFormatter

	XValues []float64
	YValues []float64
}

ContinuousSeries represents a line on a chart.

func (ContinuousSeries) GetLastValues

func (cs ContinuousSeries) GetLastValues() (float64, float64)

GetLastValues gets the last x,y values.

func (ContinuousSeries) GetName

func (cs ContinuousSeries) GetName() string

GetName returns the name of the time series.

func (ContinuousSeries) GetStyle

func (cs ContinuousSeries) GetStyle() Style

GetStyle returns the line style.

func (ContinuousSeries) GetValueFormatters

func (cs ContinuousSeries) GetValueFormatters() (x, y ValueFormatter)

GetValueFormatters returns value formatter defaults for the series.

func (ContinuousSeries) GetValues

func (cs ContinuousSeries) GetValues(index int) (float64, float64)

GetValues gets the x,y values at a given index.

func (ContinuousSeries) GetYAxis

func (cs ContinuousSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (ContinuousSeries) Len

func (cs ContinuousSeries) Len() int

Len returns the number of elements in the series.

func (ContinuousSeries) Render

func (cs ContinuousSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (ContinuousSeries) Validate

func (cs ContinuousSeries) Validate() error

Validate validates the series.

type DotColorProvider

type DotColorProvider func(xrange, yrange Range, index int, x, y float64) drawing.Color

DotColorProvider is a provider for dot color.

type EMASeries

type EMASeries struct {
	Name  string
	Style Style
	YAxis YAxisType

	Period      int
	InnerSeries ValuesProvider
	// contains filtered or unexported fields
}

EMASeries is a computed series.

func (*EMASeries) GetLastValues

func (ema *EMASeries) GetLastValues() (x, y float64)

GetLastValues computes the last moving average value but walking back window size samples, and recomputing the last moving average chunk.

func (EMASeries) GetName

func (ema EMASeries) GetName() string

GetName returns the name of the time series.

func (EMASeries) GetPeriod

func (ema EMASeries) GetPeriod() int

GetPeriod returns the window size.

func (EMASeries) GetSigma

func (ema EMASeries) GetSigma() float64

GetSigma returns the smoothing factor for the serise.

func (EMASeries) GetStyle

func (ema EMASeries) GetStyle() Style

GetStyle returns the line style.

func (*EMASeries) GetValues

func (ema *EMASeries) GetValues(index int) (x, y float64)

GetValues gets a value at a given index.

func (EMASeries) GetYAxis

func (ema EMASeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (EMASeries) Len

func (ema EMASeries) Len() int

Len returns the number of elements in the series.

func (*EMASeries) Render

func (ema *EMASeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (*EMASeries) Validate

func (ema *EMASeries) Validate() error

Validate validates the series.

type FullBoundedValuesProvider

type FullBoundedValuesProvider interface {
	BoundedValuesProvider
	BoundedLastValuesProvider
}

FullBoundedValuesProvider is an interface that combines `BoundedValuesProvider` and `BoundedLastValuesProvider`

type FullValuesProvider

type FullValuesProvider interface {
	ValuesProvider
	LastValuesProvider
}

FullValuesProvider is an interface that combines `ValuesProvider` and `LastValuesProvider`

type GridLine

type GridLine struct {
	IsMinor bool
	Style   Style
	Value   float64
}

GridLine is a line on a graph canvas.

func GenerateGridLines

func GenerateGridLines(ticks []Tick, majorStyle, minorStyle Style) []GridLine

GenerateGridLines generates grid lines.

func (GridLine) Major

func (gl GridLine) Major() bool

Major returns if the gridline is a `major` line.

func (GridLine) Minor

func (gl GridLine) Minor() bool

Minor returns if the gridline is a `minor` line.

func (GridLine) Render

func (gl GridLine) Render(r Renderer, canvasBox Box, ra Range, isVertical bool, defaults Style)

Render renders the gridline

type GridLineProvider

type GridLineProvider interface {
	GetGridLines(ticks []Tick, isVertical bool, majorStyle, minorStyle Style) []GridLine
}

GridLineProvider is a type that provides grid lines.

type HistogramSeries

type HistogramSeries struct {
	Name        string
	Style       Style
	YAxis       YAxisType
	InnerSeries ValuesProvider
}

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.

func (HistogramSeries) GetBoundedValues

func (hs HistogramSeries) GetBoundedValues(index int) (x, y1, y2 float64)

GetBoundedValues implements BoundedValuesProvider.GetBoundedValue

func (HistogramSeries) GetName

func (hs HistogramSeries) GetName() string

GetName implements Series.GetName.

func (HistogramSeries) GetStyle

func (hs HistogramSeries) GetStyle() Style

GetStyle implements Series.GetStyle.

func (HistogramSeries) GetValues

func (hs HistogramSeries) GetValues(index int) (x, y float64)

GetValues implements ValuesProvider.GetValues.

func (HistogramSeries) GetYAxis

func (hs HistogramSeries) GetYAxis() YAxisType

GetYAxis returns which yaxis the series is mapped to.

func (HistogramSeries) Len

func (hs HistogramSeries) Len() int

Len implements BoundedValuesProvider.Len.

func (HistogramSeries) Render

func (hs HistogramSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render implements Series.Render.

func (HistogramSeries) Validate

func (hs HistogramSeries) Validate() error

Validate validates the series.

type ImageWriter

type ImageWriter struct {
	// contains filtered or unexported fields
}

ImageWriter is a special type of io.Writer that produces a final image.

func (*ImageWriter) Image

func (ir *ImageWriter) Image() (image.Image, error)

Image returns an *image.Image for the result.

func (*ImageWriter) SetRGBA

func (ir *ImageWriter) SetRGBA(i *image.RGBA)

SetRGBA sets a raw version of the image.

func (*ImageWriter) Write

func (ir *ImageWriter) Write(buffer []byte) (int, error)

type IsZeroable

type IsZeroable interface {
	IsZero() bool
}

IsZeroable is a type that returns if it's been set or not.

type LastValuesProvider

type LastValuesProvider interface {
	GetLastValues() (x, y float64)
}

LastValuesProvider is a special type of value provider that can return it's (potentially computed) last value.

type LinearRegressionSeries

type LinearRegressionSeries struct {
	Name  string
	Style Style
	YAxis YAxisType

	Limit       int
	Offset      int
	InnerSeries ValuesProvider
	// contains filtered or unexported fields
}

LinearRegressionSeries is a series that plots the n-nearest neighbors linear regression for the values.

func (LinearRegressionSeries) GetEndIndex

func (lrs LinearRegressionSeries) GetEndIndex() int

GetEndIndex returns the effective limit end.

func (*LinearRegressionSeries) GetLastValues

func (lrs *LinearRegressionSeries) GetLastValues() (x, y float64)

GetLastValues computes the last linear regression value.

func (LinearRegressionSeries) GetLimit

func (lrs LinearRegressionSeries) GetLimit() int

GetLimit returns the window size.

func (LinearRegressionSeries) GetName

func (lrs LinearRegressionSeries) GetName() string

GetName returns the name of the time series.

func (LinearRegressionSeries) GetOffset

func (lrs LinearRegressionSeries) GetOffset() int

GetOffset returns the data offset.

func (LinearRegressionSeries) GetStyle

func (lrs LinearRegressionSeries) GetStyle() Style

GetStyle returns the line style.

func (*LinearRegressionSeries) GetValues

func (lrs *LinearRegressionSeries) GetValues(index int) (x, y float64)

GetValues gets a value at a given index.

func (LinearRegressionSeries) GetYAxis

func (lrs LinearRegressionSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (LinearRegressionSeries) Len

func (lrs LinearRegressionSeries) Len() int

Len returns the number of elements in the series.

func (*LinearRegressionSeries) Render

func (lrs *LinearRegressionSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (*LinearRegressionSeries) Validate

func (lrs *LinearRegressionSeries) Validate() error

Validate validates the series.

type MACDLineSeries

type MACDLineSeries struct {
	Name        string
	Style       Style
	YAxis       YAxisType
	InnerSeries ValuesProvider

	PrimaryPeriod   int
	SecondaryPeriod int

	Sigma float64
	// contains filtered or unexported fields
}

MACDLineSeries is a series that computes the inner ema1-ema2 value as a series.

func (MACDLineSeries) GetName

func (macdl MACDLineSeries) GetName() string

GetName returns the name of the time series.

func (MACDLineSeries) GetPeriods

func (macdl MACDLineSeries) GetPeriods() (w1, w2 int)

GetPeriods returns the primary and secondary periods.

func (MACDLineSeries) GetStyle

func (macdl MACDLineSeries) GetStyle() Style

GetStyle returns the line style.

func (*MACDLineSeries) GetValues

func (macdl *MACDLineSeries) GetValues(index int) (x float64, y float64)

GetValues gets a value at a given index. For MACD it is the signal value.

func (MACDLineSeries) GetYAxis

func (macdl MACDLineSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (*MACDLineSeries) Len

func (macdl *MACDLineSeries) Len() int

Len returns the number of elements in the series.

func (*MACDLineSeries) Render

func (macdl *MACDLineSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (MACDLineSeries) Validate

func (macdl MACDLineSeries) Validate() error

Validate validates the series.

type MACDSeries

type MACDSeries struct {
	Name        string
	Style       Style
	YAxis       YAxisType
	InnerSeries ValuesProvider

	PrimaryPeriod   int
	SecondaryPeriod int
	SignalPeriod    int
	// contains filtered or unexported fields
}

MACDSeries computes the difference between the MACD line and the MACD Signal line. It is used in technical analysis and gives a lagging indicator of momentum.

func (MACDSeries) GetName

func (macd MACDSeries) GetName() string

GetName returns the name of the time series.

func (MACDSeries) GetPeriods

func (macd MACDSeries) GetPeriods() (w1, w2, sig int)

GetPeriods returns the primary and secondary periods.

func (MACDSeries) GetStyle

func (macd MACDSeries) GetStyle() Style

GetStyle returns the line style.

func (*MACDSeries) GetValues

func (macd *MACDSeries) GetValues(index int) (x float64, y float64)

GetValues gets a value at a given index. For MACD it is the signal value.

func (MACDSeries) GetYAxis

func (macd MACDSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (MACDSeries) Len

func (macd MACDSeries) Len() int

Len returns the number of elements in the series.

func (MACDSeries) Validate

func (macd MACDSeries) Validate() error

Validate validates the series.

type MACDSignalSeries

type MACDSignalSeries struct {
	Name        string
	Style       Style
	YAxis       YAxisType
	InnerSeries ValuesProvider

	PrimaryPeriod   int
	SecondaryPeriod int
	SignalPeriod    int
	// contains filtered or unexported fields
}

MACDSignalSeries computes the EMA of the MACDLineSeries.

func (MACDSignalSeries) GetName

func (macds MACDSignalSeries) GetName() string

GetName returns the name of the time series.

func (MACDSignalSeries) GetPeriods

func (macds MACDSignalSeries) GetPeriods() (w1, w2, sig int)

GetPeriods returns the primary and secondary periods.

func (MACDSignalSeries) GetStyle

func (macds MACDSignalSeries) GetStyle() Style

GetStyle returns the line style.

func (*MACDSignalSeries) GetValues

func (macds *MACDSignalSeries) GetValues(index int) (x float64, y float64)

GetValues gets a value at a given index. For MACD it is the signal value.

func (MACDSignalSeries) GetYAxis

func (macds MACDSignalSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (*MACDSignalSeries) Len

func (macds *MACDSignalSeries) Len() int

Len returns the number of elements in the series.

func (*MACDSignalSeries) Render

func (macds *MACDSignalSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (MACDSignalSeries) Validate

func (macds MACDSignalSeries) Validate() error

Validate validates the series.

type MarketHoursRange

type MarketHoursRange struct {
	Min time.Time
	Max time.Time

	MarketOpen  time.Time
	MarketClose time.Time

	HolidayProvider util.HolidayProvider

	ValueFormatter ValueFormatter

	Descending bool
	Domain     int
}

MarketHoursRange is a special type of range that compresses a time range into just the market (i.e. NYSE operating hours and days) range.

func (MarketHoursRange) GetDelta

func (mhr MarketHoursRange) GetDelta() float64

GetDelta gets the delta.

func (MarketHoursRange) GetDomain

func (mhr MarketHoursRange) GetDomain() int

GetDomain gets the domain.

func (MarketHoursRange) GetEffectiveMax

func (mhr MarketHoursRange) GetEffectiveMax() time.Time

GetEffectiveMax gets either the close on the max, or the max itself.

func (MarketHoursRange) GetHolidayProvider

func (mhr MarketHoursRange) GetHolidayProvider() util.HolidayProvider

GetHolidayProvider coalesces a userprovided holiday provider and the date.DefaultHolidayProvider.

func (MarketHoursRange) GetMarketClose

func (mhr MarketHoursRange) GetMarketClose() time.Time

GetMarketClose returns the market close time.

func (MarketHoursRange) GetMarketOpen

func (mhr MarketHoursRange) GetMarketOpen() time.Time

GetMarketOpen returns the market open time.

func (MarketHoursRange) GetMax

func (mhr MarketHoursRange) GetMax() float64

GetMax returns the max value.

func (MarketHoursRange) GetMin

func (mhr MarketHoursRange) GetMin() float64

GetMin returns the min value.

func (*MarketHoursRange) GetTicks

func (mhr *MarketHoursRange) GetTicks(r Renderer, defaults Style, vf ValueFormatter) []Tick

GetTicks returns the ticks for the range. This is to override the default continous ticks that would be generated for the range.

func (MarketHoursRange) GetTimezone

func (mhr MarketHoursRange) GetTimezone() *time.Location

GetTimezone returns the timezone for the market hours range.

func (MarketHoursRange) IsDescending

func (mhr MarketHoursRange) IsDescending() bool

IsDescending returns if the range is descending.

func (MarketHoursRange) IsZero

func (mhr MarketHoursRange) IsZero() bool

IsZero returns if the range is setup or not.

func (*MarketHoursRange) SetDomain

func (mhr *MarketHoursRange) SetDomain(domain int)

SetDomain sets the domain.

func (*MarketHoursRange) SetMax

func (mhr *MarketHoursRange) SetMax(max float64)

SetMax sets the max value.

func (*MarketHoursRange) SetMin

func (mhr *MarketHoursRange) SetMin(min float64)

SetMin sets the min value.

func (MarketHoursRange) String

func (mhr MarketHoursRange) String() string

func (MarketHoursRange) Translate

func (mhr MarketHoursRange) Translate(value float64) int

Translate maps a given value into the ContinuousRange space.

type MaxSeries

type MaxSeries struct {
	Name        string
	Style       Style
	YAxis       YAxisType
	InnerSeries ValuesProvider
	// contains filtered or unexported fields
}

MaxSeries draws a horizontal line at the maximum value of the inner series.

func (MaxSeries) GetName

func (ms MaxSeries) GetName() string

GetName returns the name of the time series.

func (MaxSeries) GetStyle

func (ms MaxSeries) GetStyle() Style

GetStyle returns the line style.

func (*MaxSeries) GetValues

func (ms *MaxSeries) GetValues(index int) (x, y float64)

GetValues gets a value at a given index.

func (MaxSeries) GetYAxis

func (ms MaxSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (MaxSeries) Len

func (ms MaxSeries) Len() int

Len returns the number of elements in the series.

func (*MaxSeries) Render

func (ms *MaxSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (*MaxSeries) Validate

func (ms *MaxSeries) Validate() error

Validate validates the series.

type MinSeries

type MinSeries struct {
	Name        string
	Style       Style
	YAxis       YAxisType
	InnerSeries ValuesProvider
	// contains filtered or unexported fields
}

MinSeries draws a horizontal line at the minimum value of the inner series.

func (MinSeries) GetName

func (ms MinSeries) GetName() string

GetName returns the name of the time series.

func (MinSeries) GetStyle

func (ms MinSeries) GetStyle() Style

GetStyle returns the line style.

func (*MinSeries) GetValues

func (ms *MinSeries) GetValues(index int) (x, y float64)

GetValues gets a value at a given index.

func (MinSeries) GetYAxis

func (ms MinSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (MinSeries) Len

func (ms MinSeries) Len() int

Len returns the number of elements in the series.

func (*MinSeries) Render

func (ms *MinSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (*MinSeries) Validate

func (ms *MinSeries) Validate() error

Validate validates the series.

type NameProvider

type NameProvider interface {
	GetName() string
}

NameProvider is a type that returns a name.

type PieChart

type PieChart struct {
	Title      string
	TitleStyle Style

	ColorPalette ColorPalette

	Width  int
	Height int
	DPI    float64

	Background Style
	Canvas     Style
	SliceStyle Style

	Font *truetype.Font

	Values   []Value
	Elements []Renderable
	// contains filtered or unexported fields
}

PieChart is a chart that draws sections of a circle based on percentages.

func (PieChart) Box

func (pc PieChart) Box() Box

Box returns the chart bounds as a box.

func (PieChart) GetColorPalette

func (pc PieChart) GetColorPalette() ColorPalette

GetColorPalette returns the color palette for the chart.

func (PieChart) GetDPI

func (pc PieChart) GetDPI(defaults ...float64) float64

GetDPI returns the dpi for the chart.

func (PieChart) GetFont

func (pc PieChart) GetFont() *truetype.Font

GetFont returns the text font.

func (PieChart) GetHeight

func (pc PieChart) GetHeight() int

GetHeight returns the chart height or the default value.

func (PieChart) GetWidth

func (pc PieChart) GetWidth() int

GetWidth returns the chart width or the default value.

func (PieChart) Render

func (pc PieChart) Render(rp RendererProvider, w io.Writer) error

Render renders the chart with the given renderer to the given io.Writer.

type Point

type Point struct {
	X, Y int
}

Point is an X,Y pair

func (Point) DistanceTo

func (p Point) DistanceTo(other Point) float64

DistanceTo calculates the distance to another point.

func (Point) Equals

func (p Point) Equals(other Point) bool

Equals returns if a point equals another point.

func (Point) String

func (p Point) String() string

String returns a string representation of the point.

type PolynomialRegressionSeries

type PolynomialRegressionSeries struct {
	Name  string
	Style Style
	YAxis YAxisType

	Limit       int
	Offset      int
	Degree      int
	InnerSeries ValuesProvider
	// contains filtered or unexported fields
}

PolynomialRegressionSeries implements a polynomial regression over a given inner series.

func (PolynomialRegressionSeries) GetEndIndex

func (prs PolynomialRegressionSeries) GetEndIndex() int

GetEndIndex returns the effective limit end.

func (*PolynomialRegressionSeries) GetLastValues

func (prs *PolynomialRegressionSeries) GetLastValues() (x, y float64)

GetLastValues computes the last poly regression value.

func (PolynomialRegressionSeries) GetLimit

func (prs PolynomialRegressionSeries) GetLimit() int

GetLimit returns the window size.

func (PolynomialRegressionSeries) GetName

func (prs PolynomialRegressionSeries) GetName() string

GetName returns the name of the time series.

func (PolynomialRegressionSeries) GetOffset

func (prs PolynomialRegressionSeries) GetOffset() int

GetOffset returns the data offset.

func (PolynomialRegressionSeries) GetStyle

func (prs PolynomialRegressionSeries) GetStyle() Style

GetStyle returns the line style.

func (*PolynomialRegressionSeries) GetValues

func (prs *PolynomialRegressionSeries) GetValues(index int) (x, y float64)

GetValues returns the series value for a given index.

func (PolynomialRegressionSeries) GetYAxis

func (prs PolynomialRegressionSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (PolynomialRegressionSeries) Len

func (prs PolynomialRegressionSeries) Len() int

Len returns the number of elements in the series.

func (*PolynomialRegressionSeries) Render

func (prs *PolynomialRegressionSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (*PolynomialRegressionSeries) Validate

func (prs *PolynomialRegressionSeries) Validate() error

Validate validates the series.

type RGBACollector

type RGBACollector interface {
	SetRGBA(i *image.RGBA)
}

RGBACollector is a render target for a chart.

type Range

type Range interface {
	Stringable
	IsZeroable

	GetMin() float64
	SetMin(min float64)

	GetMax() float64
	SetMax(max float64)

	GetDelta() float64

	GetDomain() int
	SetDomain(domain int)

	IsDescending() bool

	// Translate the range to the domain.
	Translate(value float64) int
}

Range is a common interface for a range of values.

type Renderable

type Renderable func(r Renderer, canvasBox Box, defaults Style)

Renderable is a function that can be called to render custom elements on the chart.

func Legend

func Legend(c *Chart, userDefaults ...Style) Renderable

Legend returns a legend renderable function.

func LegendLeft

func LegendLeft(c *Chart, userDefaults ...Style) Renderable

LegendLeft is a legend that is designed for longer series lists.

func LegendThin

func LegendThin(c *Chart, userDefaults ...Style) Renderable

LegendThin is a legend that doesn't obscure the chart area.

type Renderer

type Renderer interface {
	// ResetStyle should reset any style related settings on the renderer.
	ResetStyle()

	// GetDPI gets the DPI for the renderer.
	GetDPI() float64

	// SetDPI sets the DPI for the renderer.
	SetDPI(dpi float64)

	// SetStrokeColor sets the current stroke color.
	SetStrokeColor(drawing.Color)

	// SetFillColor sets the current fill color.
	SetFillColor(drawing.Color)

	// SetStrokeWidth sets the stroke width.
	SetStrokeWidth(width float64)

	// SetStrokeDashArray sets the stroke dash array.
	SetStrokeDashArray(dashArray []float64)

	// MoveTo moves the cursor to a given point.
	MoveTo(x, y int)

	// LineTo both starts a shape and draws a line to a given point
	// from the previous point.
	LineTo(x, y int)

	// QuadCurveTo draws a quad curve.
	// cx and cy represent the bezier "control points".
	QuadCurveTo(cx, cy, x, y int)

	// ArcTo draws an arc with a given center (cx,cy)
	// a given set of radii (rx,ry), a startAngle and delta (in radians).
	ArcTo(cx, cy int, rx, ry, startAngle, delta float64)

	// Close finalizes a shape as drawn by LineTo.
	Close()

	// Stroke strokes the path.
	Stroke()

	// Fill fills the path, but does not stroke.
	Fill()

	// FillStroke fills and strokes a path.
	FillStroke()

	// Circle draws a circle at the given coords with a given radius.
	Circle(radius float64, x, y int)

	// SetFont sets a font for a text field.
	SetFont(*truetype.Font)

	// SetFontColor sets a font's color
	SetFontColor(drawing.Color)

	// SetFontSize sets the font size for a text field.
	SetFontSize(size float64)

	// Text draws a text blob.
	Text(body string, x, y int)

	// MeasureText measures text.
	MeasureText(body string) Box

	// SetTextRotatation sets a rotation for drawing elements.
	SetTextRotation(radians float64)

	// ClearTextRotation clears rotation.
	ClearTextRotation()

	// Save writes the image to the given writer.
	Save(w io.Writer) error
}

Renderer represents the basic methods required to draw a chart.

func PNG

func PNG(width, height int) (Renderer, error)

PNG returns a new png/raster renderer.

func SVG

func SVG(width, height int) (Renderer, error)

SVG returns a new png/raster renderer.

type RendererProvider

type RendererProvider func(int, int) (Renderer, error)

RendererProvider is a function that returns a renderer.

type SMASeries

type SMASeries struct {
	Name  string
	Style Style
	YAxis YAxisType

	Period      int
	InnerSeries ValuesProvider
}

SMASeries is a computed series.

func (SMASeries) GetLastValues

func (sma SMASeries) GetLastValues() (x, y float64)

GetLastValues computes the last moving average value but walking back window size samples, and recomputing the last moving average chunk.

func (SMASeries) GetName

func (sma SMASeries) GetName() string

GetName returns the name of the time series.

func (SMASeries) GetPeriod

func (sma SMASeries) GetPeriod(defaults ...int) int

GetPeriod returns the window size.

func (SMASeries) GetStyle

func (sma SMASeries) GetStyle() Style

GetStyle returns the line style.

func (SMASeries) GetValues

func (sma SMASeries) GetValues(index int) (x, y float64)

GetValues gets a value at a given index.

func (SMASeries) GetYAxis

func (sma SMASeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (SMASeries) Len

func (sma SMASeries) Len() int

Len returns the number of elements in the series.

func (SMASeries) Render

func (sma SMASeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (SMASeries) Validate

func (sma SMASeries) Validate() error

Validate validates the series.

type Series

type Series interface {
	GetName() string
	GetYAxis() YAxisType
	GetStyle() Style
	Validate() error
	Render(r Renderer, canvasBox Box, xrange, yrange Range, s Style)
}

Series is an alias to Renderable.

type SizeProvider

type SizeProvider func(xrange, yrange Range, index int, x, y float64) float64

SizeProvider is a provider for integer size.

type StackedBar

type StackedBar struct {
	Name   string
	Width  int
	Values []Value
}

StackedBar is a bar within a StackedBarChart.

func (StackedBar) GetWidth

func (sb StackedBar) GetWidth() int

GetWidth returns the width of the bar.

type StackedBarChart

type StackedBarChart struct {
	Title      string
	TitleStyle Style

	ColorPalette ColorPalette

	Width  int
	Height int
	DPI    float64

	Background Style
	Canvas     Style

	XAxis Style
	YAxis Style

	BarSpacing int

	Font *truetype.Font

	Bars     []StackedBar
	Elements []Renderable
	// contains filtered or unexported fields
}

StackedBarChart is a chart that draws sections of a bar based on percentages.

func (StackedBarChart) Box

func (sbc StackedBarChart) Box() Box

Box returns the chart bounds as a box.

func (StackedBarChart) GetBarSpacing

func (sbc StackedBarChart) GetBarSpacing() int

GetBarSpacing returns the spacing between bars.

func (StackedBarChart) GetColorPalette

func (sbc StackedBarChart) GetColorPalette() ColorPalette

GetColorPalette returns the color palette for the chart.

func (StackedBarChart) GetDPI

func (sbc StackedBarChart) GetDPI(defaults ...float64) float64

GetDPI returns the dpi for the chart.

func (StackedBarChart) GetFont

func (sbc StackedBarChart) GetFont() *truetype.Font

GetFont returns the text font.

func (StackedBarChart) GetHeight

func (sbc StackedBarChart) GetHeight() int

GetHeight returns the chart height or the default value.

func (StackedBarChart) GetWidth

func (sbc StackedBarChart) GetWidth() int

GetWidth returns the chart width or the default value.

func (StackedBarChart) Render

func (sbc StackedBarChart) Render(rp RendererProvider, w io.Writer) error

Render renders the chart with the given renderer to the given io.Writer.

type Stringable

type Stringable interface {
	String() string
}

Stringable is a type that has a string representation.

type Style

type Style struct {
	Show    bool
	Padding Box

	StrokeWidth     float64
	StrokeColor     drawing.Color
	StrokeDashArray []float64

	DotColor drawing.Color
	DotWidth float64

	DotWidthProvider SizeProvider
	DotColorProvider DotColorProvider

	FillColor drawing.Color

	FontSize  float64
	FontColor drawing.Color
	Font      *truetype.Font

	TextHorizontalAlign TextHorizontalAlign
	TextVerticalAlign   TextVerticalAlign
	TextWrap            TextWrap
	TextLineSpacing     int
	TextRotationDegrees float64 //0 is unset or normal
}

Style is a simple style set.

func StyleShow

func StyleShow() Style

StyleShow is a prebuilt style with the `Show` property set to true.

func StyleTextDefaults

func StyleTextDefaults() Style

StyleTextDefaults returns a style for drawing outside a chart context.

func (Style) GetDotColor

func (s Style) GetDotColor(defaults ...drawing.Color) drawing.Color

GetDotColor returns the stroke color.

func (Style) GetDotOptions

func (s Style) GetDotOptions() Style

GetDotOptions returns the dot components.

func (Style) GetDotWidth

func (s Style) GetDotWidth(defaults ...float64) float64

GetDotWidth returns the dot width for scatter plots.

func (Style) GetFillAndStrokeOptions

func (s Style) GetFillAndStrokeOptions() Style

GetFillAndStrokeOptions returns the fill and stroke components.

func (Style) GetFillColor

func (s Style) GetFillColor(defaults ...drawing.Color) drawing.Color

GetFillColor returns the fill color.

func (Style) GetFillOptions

func (s Style) GetFillOptions() Style

GetFillOptions returns the fill components.

func (Style) GetFont

func (s Style) GetFont(defaults ...*truetype.Font) *truetype.Font

GetFont returns the font face.

func (Style) GetFontColor

func (s Style) GetFontColor(defaults ...drawing.Color) drawing.Color

GetFontColor gets the font size.

func (Style) GetFontSize

func (s Style) GetFontSize(defaults ...float64) float64

GetFontSize gets the font size.

func (Style) GetPadding

func (s Style) GetPadding(defaults ...Box) Box

GetPadding returns the padding.

func (Style) GetStrokeColor

func (s Style) GetStrokeColor(defaults ...drawing.Color) drawing.Color

GetStrokeColor returns the stroke color.

func (Style) GetStrokeDashArray

func (s Style) GetStrokeDashArray(defaults ...[]float64) []float64

GetStrokeDashArray returns the stroke dash array.

func (Style) GetStrokeOptions

func (s Style) GetStrokeOptions() Style

GetStrokeOptions returns the stroke components.

func (Style) GetStrokeWidth

func (s Style) GetStrokeWidth(defaults ...float64) float64

GetStrokeWidth returns the stroke width.

func (Style) GetTextHorizontalAlign

func (s Style) GetTextHorizontalAlign(defaults ...TextHorizontalAlign) TextHorizontalAlign

GetTextHorizontalAlign returns the horizontal alignment.

func (Style) GetTextLineSpacing

func (s Style) GetTextLineSpacing(defaults ...int) int

GetTextLineSpacing returns the spacing in pixels between lines of text (vertically).

func (Style) GetTextOptions

func (s Style) GetTextOptions() Style

GetTextOptions returns just the text components of the style.

func (Style) GetTextRotationDegrees

func (s Style) GetTextRotationDegrees(defaults ...float64) float64

GetTextRotationDegrees returns the text rotation in degrees.

func (Style) GetTextVerticalAlign

func (s Style) GetTextVerticalAlign(defaults ...TextVerticalAlign) TextVerticalAlign

GetTextVerticalAlign returns the vertical alignment.

func (Style) GetTextWrap

func (s Style) GetTextWrap(defaults ...TextWrap) TextWrap

GetTextWrap returns the word wrap.

func (Style) InheritFrom

func (s Style) InheritFrom(defaults Style) (final Style)

InheritFrom coalesces two styles into a new style.

func (Style) IsZero

func (s Style) IsZero() bool

IsZero returns if the object is set or not.

func (Style) ShouldDrawDot

func (s Style) ShouldDrawDot() bool

ShouldDrawDot tells drawing functions if they should draw the dot.

func (Style) ShouldDrawFill

func (s Style) ShouldDrawFill() bool

ShouldDrawFill tells drawing functions if they should draw the stroke.

func (Style) ShouldDrawStroke

func (s Style) ShouldDrawStroke() bool

ShouldDrawStroke tells drawing functions if they should draw the stroke.

func (Style) String

func (s Style) String() string

String returns a text representation of the style.

func (Style) WriteDrawingOptionsToRenderer

func (s Style) WriteDrawingOptionsToRenderer(r Renderer)

WriteDrawingOptionsToRenderer passes just the drawing style options to a renderer.

func (Style) WriteTextOptionsToRenderer

func (s Style) WriteTextOptionsToRenderer(r Renderer)

WriteTextOptionsToRenderer passes just the text style options to a renderer.

func (Style) WriteToRenderer

func (s Style) WriteToRenderer(r Renderer)

WriteToRenderer passes the style's options to a renderer.

type StyleProvider

type StyleProvider interface {
	GetStyle() Style
}

StyleProvider is a type that returns a style.

type TextHorizontalAlign

type TextHorizontalAlign int

TextHorizontalAlign is an enum for the horizontal alignment options.

const (
	// TextHorizontalAlignUnset is the unset state for text horizontal alignment.
	TextHorizontalAlignUnset TextHorizontalAlign = 0
	// TextHorizontalAlignLeft aligns a string horizontally so that it's left ligature starts at horizontal pixel 0.
	TextHorizontalAlignLeft TextHorizontalAlign = 1
	// TextHorizontalAlignCenter left aligns a string horizontally so that there are equal pixels
	// to the left and to the right of a string within a box.
	TextHorizontalAlignCenter TextHorizontalAlign = 2
	// TextHorizontalAlignRight right aligns a string horizontally so that the right ligature ends at the right-most pixel
	// of a box.
	TextHorizontalAlignRight TextHorizontalAlign = 3
)

type TextStyle

type TextStyle struct {
	HorizontalAlign TextHorizontalAlign
	VerticalAlign   TextVerticalAlign
	Wrap            TextWrap
}

TextStyle encapsulates text style options.

type TextVerticalAlign

type TextVerticalAlign int

TextVerticalAlign is an enum for the vertical alignment options.

const (
	// TextVerticalAlignUnset is the unset state for vertical alignment options.
	TextVerticalAlignUnset TextVerticalAlign = 0
	// TextVerticalAlignBaseline aligns text according to the "baseline" of the string, or where a normal ascender begins.
	TextVerticalAlignBaseline TextVerticalAlign = 1
	// TextVerticalAlignBottom aligns the text according to the lowers pixel of any of the ligatures (ex. g or q both extend below the baseline).
	TextVerticalAlignBottom TextVerticalAlign = 2
	// TextVerticalAlignMiddle aligns the text so that there is an equal amount of space above and below the top and bottom of the ligatures.
	TextVerticalAlignMiddle TextVerticalAlign = 3
	// TextVerticalAlignMiddleBaseline aligns the text veritcally so that there is an equal number of pixels above and below the baseline of the string.
	TextVerticalAlignMiddleBaseline TextVerticalAlign = 4
	// TextVerticalAlignTop alignts the text so that the top of the ligatures are at y-pixel 0 in the container.
	TextVerticalAlignTop TextVerticalAlign = 5
)

type TextWrap

type TextWrap int

TextWrap is an enum for the word wrap options.

const (
	// TextWrapUnset is the unset state for text wrap options.
	TextWrapUnset TextWrap = 0
	// TextWrapNone will spill text past horizontal boundaries.
	TextWrapNone TextWrap = 1
	// TextWrapWord will split a string on words (i.e. spaces) to fit within a horizontal boundary.
	TextWrapWord TextWrap = 2
	// TextWrapRune will split a string on a rune (i.e. utf-8 codepage) to fit within a horizontal boundary.
	TextWrapRune TextWrap = 3
)

type Tick

type Tick struct {
	Value float64
	Label string
}

Tick represents a label on an axis.

func GenerateContinuousTicks

func GenerateContinuousTicks(r Renderer, ra Range, isVertical bool, style Style, vf ValueFormatter) []Tick

GenerateContinuousTicks generates a set of ticks.

type TickPosition

type TickPosition int

TickPosition is an enumeration of possible tick drawing positions.

const (
	// TickPositionUnset means to use the default tick position.
	TickPositionUnset TickPosition = 0
	// TickPositionBetweenTicks draws the labels for a tick between the previous and current tick.
	TickPositionBetweenTicks TickPosition = 1
	// TickPositionUnderTick draws the tick below the tick.
	TickPositionUnderTick TickPosition = 2
)

type Ticks

type Ticks []Tick

Ticks is an array of ticks.

func (Ticks) Len

func (t Ticks) Len() int

Len returns the length of the ticks set.

func (Ticks) Less

func (t Ticks) Less(i, j int) bool

Less returns if i's value is less than j's value.

func (Ticks) String

func (t Ticks) String() string

String returns a string representation of the set of ticks.

func (Ticks) Swap

func (t Ticks) Swap(i, j int)

Swap swaps two elements.

type TicksProvider

type TicksProvider interface {
	GetTicks(r Renderer, defaults Style, vf ValueFormatter) []Tick
}

TicksProvider is a type that provides ticks.

type TimeSeries

type TimeSeries struct {
	Name  string
	Style Style

	YAxis YAxisType

	XValues []time.Time
	YValues []float64
}

TimeSeries is a line on a chart.

func (TimeSeries) GetLastValues

func (ts TimeSeries) GetLastValues() (x, y float64)

GetLastValues gets the last value.

func (TimeSeries) GetName

func (ts TimeSeries) GetName() string

GetName returns the name of the time series.

func (TimeSeries) GetStyle

func (ts TimeSeries) GetStyle() Style

GetStyle returns the line style.

func (TimeSeries) GetValueFormatters

func (ts TimeSeries) GetValueFormatters() (x, y ValueFormatter)

GetValueFormatters returns value formatter defaults for the series.

func (TimeSeries) GetValues

func (ts TimeSeries) GetValues(index int) (x, y float64)

GetValues gets a value at a given index.

func (TimeSeries) GetYAxis

func (ts TimeSeries) GetYAxis() YAxisType

GetYAxis returns which YAxis the series draws on.

func (TimeSeries) Len

func (ts TimeSeries) Len() int

Len returns the number of elements in the series.

func (TimeSeries) Render

func (ts TimeSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style)

Render renders the series.

func (TimeSeries) Validate

func (ts TimeSeries) Validate() error

Validate validates the series.

type Value

type Value struct {
	Style Style
	Label string
	Value float64
}

Value is a chart value.

type Value2

type Value2 struct {
	Style          Style
	Label          string
	XValue, YValue float64
}

Value2 is a two axis value.

type ValueFormatter

type ValueFormatter func(v interface{}) string

ValueFormatter is a function that takes a value and produces a string.

func TimeValueFormatterWithFormat

func TimeValueFormatterWithFormat(format string) ValueFormatter

TimeValueFormatterWithFormat returns a time formatter with a given format.

type ValueFormatterProvider

type ValueFormatterProvider interface {
	GetValueFormatters() (x, y ValueFormatter)
}

ValueFormatterProvider is a series that has custom formatters.

type Values

type Values []Value

Values is an array of Value.

func (Values) Normalize

func (vs Values) Normalize() []Value

Normalize returns the values normalized.

func (Values) Values

func (vs Values) Values() []float64

Values returns the values.

func (Values) ValuesNormalized

func (vs Values) ValuesNormalized() []float64

ValuesNormalized returns normalized values.

type ValuesProvider

type ValuesProvider interface {
	Len() int
	GetValues(index int) (float64, float64)
}

ValuesProvider is a type that produces values.

type XAxis

type XAxis struct {
	Name      string
	NameStyle Style

	Style          Style
	ValueFormatter ValueFormatter
	Range          Range

	TickStyle    Style
	Ticks        []Tick
	TickPosition TickPosition

	GridLines      []GridLine
	GridMajorStyle Style
	GridMinorStyle Style
}

XAxis represents the horizontal axis.

func (XAxis) GetGridLines

func (xa XAxis) GetGridLines(ticks []Tick) []GridLine

GetGridLines returns the gridlines for the axis.

func (XAxis) GetName

func (xa XAxis) GetName() string

GetName returns the name.

func (XAxis) GetStyle

func (xa XAxis) GetStyle() Style

GetStyle returns the style.

func (XAxis) GetTickPosition

func (xa XAxis) GetTickPosition(defaults ...TickPosition) TickPosition

GetTickPosition returns the tick position option for the axis.

func (XAxis) GetTicks

func (xa XAxis) GetTicks(r Renderer, ra Range, defaults Style, vf ValueFormatter) []Tick

GetTicks returns the ticks for a series. The coalesce priority is:

  • User Supplied Ticks (i.e. Ticks array on the axis itself).
  • Range ticks (i.e. if the range provides ticks).
  • Generating continuous ticks based on minimum spacing and canvas width.

func (XAxis) GetValueFormatter

func (xa XAxis) GetValueFormatter() ValueFormatter

GetValueFormatter returns the value formatter for the axis.

func (XAxis) Measure

func (xa XAxis) Measure(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick) Box

Measure returns the bounds of the axis.

func (XAxis) Render

func (xa XAxis) Render(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick)

Render renders the axis

type YAxis

type YAxis struct {
	Name      string
	NameStyle Style

	Style Style

	Zero GridLine

	AxisType  YAxisType
	Ascending bool

	ValueFormatter ValueFormatter
	Range          Range

	TickStyle Style
	Ticks     []Tick

	GridLines      []GridLine
	GridMajorStyle Style
	GridMinorStyle Style
}

YAxis is a veritcal rule of the range. There can be (2) y-axes; a primary and secondary.

func (YAxis) GetGridLines

func (ya YAxis) GetGridLines(ticks []Tick) []GridLine

GetGridLines returns the gridlines for the axis.

func (YAxis) GetName

func (ya YAxis) GetName() string

GetName returns the name.

func (YAxis) GetNameStyle

func (ya YAxis) GetNameStyle() Style

GetNameStyle returns the name style.

func (YAxis) GetStyle

func (ya YAxis) GetStyle() Style

GetStyle returns the style.

func (YAxis) GetTickStyle

func (ya YAxis) GetTickStyle() Style

GetTickStyle returns the tick style.

func (YAxis) GetTicks

func (ya YAxis) GetTicks(r Renderer, ra Range, defaults Style, vf ValueFormatter) []Tick

GetTicks returns the ticks for a series. The coalesce priority is:

  • User Supplied Ticks (i.e. Ticks array on the axis itself).
  • Range ticks (i.e. if the range provides ticks).
  • Generating continuous ticks based on minimum spacing and canvas width.

func (YAxis) GetValueFormatter

func (ya YAxis) GetValueFormatter() ValueFormatter

GetValueFormatter returns the value formatter for the axis.

func (YAxis) Measure

func (ya YAxis) Measure(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick) Box

Measure returns the bounds of the axis.

func (YAxis) Render

func (ya YAxis) Render(r Renderer, canvasBox Box, ra Range, defaults Style, ticks []Tick)

Render renders the axis.

type YAxisType

type YAxisType int

YAxisType is a type of y-axis; it can either be primary or secondary.

const (
	// YAxisPrimary is the primary axis.
	YAxisPrimary YAxisType = 0
	// YAxisSecondary is the secondary axis.
	YAxisSecondary YAxisType = 1
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL