Skip to content

Commit

Permalink
feat/tree: add tree chart type
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreZiviani committed Feb 12, 2021
1 parent bf525d1 commit 69c70bf
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 0 deletions.
14 changes: 14 additions & 0 deletions charts/series.go
Expand Up @@ -49,6 +49,11 @@ type SingleSeries struct {
// Scatter
SymbolSize float32 `json:"symbolSize,omitempty"`

// Tree
Orient string `json:"orient,omitempty"`
ExpandAndCollapse bool `json:"expandAndCollapse"`
InitialTreeDepth int `json:"initialTreeDepth,omitempty"`

// WordCloud
Shape string `json:"shape,omitempty"`
SizeRange []float32 `json:"sizeRange,omitempty"`
Expand Down Expand Up @@ -195,6 +200,15 @@ func WithBar3DChartOpts(opt opts.Bar3DChart) SeriesOpts {
}
}

// WithTreeOpts
func WithTreeOpts(opt opts.TreeChart) SeriesOpts {
return func(s *SingleSeries) {
s.Orient = opt.Orient
s.ExpandAndCollapse = opt.ExpandAndCollapse
s.InitialTreeDepth = opt.InitialTreeDepth
}
}

// WithWorldCloudChartOpts
func WithWorldCloudChartOpts(opt opts.WordCloudChart) SeriesOpts {
return func(s *SingleSeries) {
Expand Down
35 changes: 35 additions & 0 deletions charts/tree.go
@@ -0,0 +1,35 @@
package charts

import (
"github.com/go-echarts/go-echarts/v2/opts"
"github.com/go-echarts/go-echarts/v2/render"
"github.com/go-echarts/go-echarts/v2/types"
)

// Tree represents a Tree chart.
type Tree struct {
RectChart
}

// Type returns the chart type.
func (Tree) Type() string { return types.Tree }

// NewTree creates a new Tree chart instance.
func NewTree() *Tree {
c := &Tree{}
c.initBaseConfiguration()
c.Renderer = render.NewChartRender(c, c.Validate)
return c
}

func (c *Tree) AddSeries(name string, data []opts.TreeData, options ...SeriesOpts) *Tree {
series := SingleSeries{Name: name, Type: types.Tree, Data: data}
series.configureSeriesOpts(options...)
c.MultiSeries = append(c.MultiSeries, series)
return c
}

// Validate validates the given configuration.
func (c *Tree) Validate() {
c.Assets.Validate(c.AssetsHost)
}
46 changes: 46 additions & 0 deletions opts/charts.go
Expand Up @@ -516,3 +516,49 @@ type Chart3DData struct {
// The style setting of the text label in a single bar.
Label *Label `json:"label,omitempty"`
}

type TreeChart struct {
// The layout of the tree, which can be orthogonal and radial.
// * 'orthogonal' refer to the horizontal and vertical direction.
// * 'radial' refers to the view that the root node as the center and each layer of nodes as the ring.
Layout string

// The direction of the orthogonal layout in the tree diagram.
// * 'from left to right' or 'LR'
// * 'from right to left' or 'RL'
// * 'from top to bottom' or 'TB'
// * 'from bottom to top' or 'BT'
Orient string `json:"orient,omitempty"`

// Whether to enable mouse zooming and translating. false by default.
// If either zooming or translating is wanted, it can be set to 'scale' or 'move'.
// Otherwise, set it to be true to enable both.
Roam bool

// Subtree collapses and expands interaction, default true.
ExpandAndCollapse bool `json:"expandAndCollapse"`

// The initial level (depth) of the tree. The root node is the 0th layer, then the first layer, the second layer, ... , until the leaf node.
// This configuration item is primarily used in conjunction with collapsing and expansion interactions.
// The purpose is to prevent the nodes from obscuring each other. If set as -1 or null or undefined, all nodes are expanded.
InitialTreeDepth int `json:"initialTreeDepth,omitempty"`
}

type TreeData struct {
// Name of the data item.
Name string `json:"name,omitempty"`

// Value of the data item.
Value int `json:"value,omitempty"`

Children []*TreeData `json:"children,omitempty"`
// Symbol of node of this category.
// Icon types provided by ECharts includes
// 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
// It can be set to an image with 'image://url' , in which URL is the link to an image, or dataURI of an image.
Symbol string `json:"symbol,omitempty"`

// node of this category symbol size. It can be set to single numbers like 10,
// or use an array to represent width and height. For example, [20, 10] means symbol width is 20, and height is10.
SymbolSize interface{} `json:"symbolSize,omitempty"`
}
1 change: 1 addition & 0 deletions types/charts.go
Expand Up @@ -26,4 +26,5 @@ const (
ChartSurface3D = "surface"
ChartThemeRiver = "themeRiver"
ChartWordCloud = "wordCloud"
Tree = "tree"
)

0 comments on commit 69c70bf

Please sign in to comment.