logo

G2

  • Chart Gallery
  • Docs
  • Examples
  • Theme
  • Ecosystem
  • Productsantv logo arrow
  • 5.3.5
  • Get Started
  • Introduction
    • What is G2
    • Using in Frontend Frameworks
    • Experimental Spec API
  • Chart API
  • Core Concepts
    • G2's complete configuration system
    • Chart
      • Components of G2 Charts
      • Chart Lifecycle
    • Mark
      • Overview
      • area
      • box
      • boxplot
      • cell
      • chord
      • density
      • gauge
      • heatmap
      • image
      • interval
      • line
      • lineX
      • lineY
      • link
      • liquid
      • sunburst
      • point
      • polygon
      • range
      • rangeX
      • rangeY
      • rect
      • shape
      • text
      • vector
      • connector
      • wordCloud
    • View
    • Data
      • Overview
      • custom
      • ema
      • fetch
      • filter
      • fold
      • inline
      • join
      • kde
      • log
      • map
      • pick
      • rename
      • slice
      • sort
      • sortBy
    • Encode
    • Scale
      • Overview
      • band
      • linear
      • log
      • ordinal
      • point
      • quantile
      • quantize
      • sqrt
      • threshold
      • time
      • pow
    • Transform
      • Overview
      • bin
      • binX
      • diffY
      • dodgeX
      • flexX
      • group
      • groupColor
      • groupX
      • groupY
      • jitter
      • jitterX
      • jitterY
      • normalizeY
      • pack
      • sample
      • select
      • selectX
      • selectY
      • sortColor
      • sortX
      • sortY
      • stackEnter
      • stackY
      • symmetryY
    • Coordinate
      • Overview
      • fisheye
      • parallel
      • polar
      • theta
      • transpose
      • radial
      • cartesian3D
      • helix
    • Style
    • Animate
      • Overview
      • fadeIn
      • fadeOut
      • growInX
      • growInY
      • morphing
      • pathIn
      • scaleInX
      • scaleInY
      • scaleOutX
      • scaleOutY
      • waveIn
      • zoomIn
      • zoomOut
    • State
    • Interaction
      • Overview
      • brushAxisHighlight
      • brushHighlight
      • brushXHighlight
      • brushYHighlight
      • brushFilter
      • brushXFilter
      • brushYFilter
      • chartIndex
      • elementHighlight
      • elementHighlightByColor
      • elementHighlightByX
      • elementSelect
      • elementSelectByColor
      • elementSelectByX
      • legendFilter
      • legendHighlight
      • poptip
      • scrollbarFilter
      • sliderFilter
      • fisheye
    • Composition
      • Overview
      • facetCircle
      • facetRect
      • repeatMatrix
      • spaceFlex
      • spaceLayer
      • timingKeyframe
    • Theme
      • Overview
      • academy
      • classic
      • classicDark
    • Events
    • Color Mapping
  • Chart Component
    • Title
    • Axis
    • Legend
    • Scrollbar
    • Slider
    • Tooltip
    • Data Label
  • Extra Topics
    • Graph
      • forceGraph
      • pack
      • sankey
      • tree
      • treemap
    • Geo
      • geoPath
      • geoView
    • 3D
      • Draw 3D Chart
      • point3D
      • line3D
      • interval3D
      • surface3D
    • Plugin
      • renderer
      • rough
      • lottie
      • a11y
    • Package on demand
    • Set pattern
    • Server-Side Rendering (SSR)
    • Spec Function Expression Support (Available in 5.3.0)
  • Whats New
    • New Version Features
    • Migration from v4 to v5
  • Frequently Asked Questions (FAQ)

tree

Previous
sankey
Next
treemap

Resource

Ant Design
Galacea Effects
Umi-React Application Framework
Dumi-Component doc generator
ahooks-React Hooks Library
WeaveFox-AI Coding Assistant

Community

Ant Financial Experience Tech
seeconfSEE Conf-Experience Tech Conference
weavefoxWeaveFox-AI Developer Community

Help

GitHub
StackOverflow

more productsMore Productions

Ant DesignAnt Design-Enterprise UI design language
yuqueYuque-Knowledge creation and Sharing tool
EggEgg-Enterprise-class Node development framework
kitchenKitchen-Sketch Tool set
GalaceanGalacean-Interactive solution
weavefoxWeaveFox-AI Coding Assistant
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

A tree chart (Tree) can decompose things or phenomena into a tree-like structure, also known as a tree diagram or system diagram. In a tree structure, the root node has no predecessor nodes, and each of the remaining nodes has one and only one predecessor node. Leaf nodes have no successor nodes, while each of the remaining nodes can have one or more successor nodes.

Getting Started

import { Chart } from '@antv/g2';
const chart = new Chart({ container: 'container' });
chart.options({
type: 'tree',
width: 800,
height: 1500,
layout: { sortBy: (a, b) => a.value - b.value },
data: {
type: 'fetch',
value: 'https://assets.antv.antgroup.com/g2/flare.json',
},
coordinate: { transform: [{ type: 'transpose' }] },
style: {
nodeFill: (d) => (d.height === 0 ? '#999' : '#000'),
linkStroke: '#999',
labelText: (d) => d.data.name || '-',
labelFontSize: (d) => (d.height === 0 ? 7 : 12),
labelTextAlign: (d) => (d.height === 0 ? 'start' : 'end'),
labelPosition: (d) => (d.height !== 0 ? 'left' : 'right'),
labelDx: (d) => (d.height === 0 ? 5 : -5),
labelBackground: true,
labelBackgroundFill: '#fff',
},
});
chart.render();

Data Format

Tree chart supports multiple data configuration methods:

1. Remote Data (fetch)

Use type: 'fetch' to fetch data from remote sources, supporting JSON, CSV and other formats:

chart.tree().data({
type: 'fetch',
value: 'https://assets.antv.antgroup.com/g2/flare.json',
});

2. Inline Data (inline)

Explicitly specify inline type

import { Chart } from '@antv/g2';
const chart = new Chart({ container: 'container' });
chart.options({
type: 'tree',
data: {
type: 'inline',
value: {
name: 'root',
children: [
{
name: 'branch1',
value: 100,
children: [
{ name: 'leaf1', value: 50 },
{ name: 'leaf2', value: 30 },
],
},
{
name: 'branch2',
value: 80,
children: [
{ name: 'leaf3', value: 40 },
{ name: 'leaf4', value: 40 },
],
},
],
},
},
});
chart.render();

Shorthand form (Recommended)

Since G2's default data type is inline, you can pass data directly:

// Pass hierarchical data object directly
chart.tree().data({
value: {
name: 'root',
children: [
{
name: 'branch1',
value: 100,
children: [
{ name: 'leaf1', value: 50 },
{ name: 'leaf2', value: 30 },
],
},
],
},
});
// Or pass flat data array (requires layout.path configuration)
const flatData = [
{ name: 'root', value: 180 },
{ name: 'root/branch1', value: 100 },
{ name: 'root/branch1/leaf1', value: 50 },
{ name: 'root/branch1/leaf2', value: 30 },
{ name: 'root/branch2', value: 80 },
{ name: 'root/branch2/leaf3', value: 40 },
{ name: 'root/branch2/leaf4', value: 40 },
];
chart
.tree()
.data({ value: flatData })
.layout({
path: (d) => d.name, // Specify path field
});

Data Structure Description

Tree chart supports two data structures:

  1. Hierarchical Data: JSON objects already in tree structure, each node contains a children array
  2. Flat Data: Arrays containing path information, requiring layout.path configuration to build hierarchy

Hierarchical data example:

{
"name": "root",
"value": 180,
"children": [
{
"name": "branch1",
"value": 100,
"children": [
{ "name": "leaf1", "value": 50 },
{ "name": "leaf2", "value": 30 }
]
}
]
}

Flat data example:

[
{ "name": "root", "value": 180 },
{ "name": "root/branch1", "value": 100 },
{ "name": "root/branch1/leaf1", "value": 50 }
]

Options

PropertyDescriptionTypeDefault Value
layoutLayout configurationTreeTransform-
styleConfigure graphics style and label style--
nodeLabelsCustom node data label configurationlabel[][]
linkLabelsCustom link data label configurationlabel[][]

layout

PropertyDescriptionTypeDefault Value
nodeSizeNode size(node: any) => string-
sortBySort method((a, b) => number)(a, b) => b.value - a.value
separationDistance between nodes(a, b) => number(a, b) => a.parent == b.parent ? 1 : 2
pathPath field configuration(d: any) => string-

Note: When using flat data, you must configure layout.path to specify how to extract hierarchical path information from the data.

style

Composite mark components require different prefixes to distinguish graphic configurations.

  • <label>: Prefix for data labels, e.g., labelText sets the label text.
  • <node>: Prefix for node configurations, e.g., nodeFill sets the node fill color.
  • <link>: Prefix for link configurations, e.g., linkStrokeWidth sets the link width.

FAQ

  • How to draw a circular tree chart? You need to specify coordinate: { type: 'polar' }

import { Chart } from '@antv/g2';
const chart = new Chart({ container: 'container' });
chart.options({
type: 'tree',
layout: { sortBy: (a, b) => a.value - b.value },
data: {
type: 'fetch',
value: 'https://assets.antv.antgroup.com/g2/flare.json',
},
coordinate: { type: 'polar' },
style: {
nodeFill: (d) => (d.height === 0 ? '#999' : '#000'),
linkStroke: '#999',
labelText: (d) => d.data.name || '-',
labelFontSize: (d) => (d.height === 0 ? 7 : 12),
labelTextAlign: (d) => (d.height === 0 ? 'start' : 'end'),
labelPosition: (d) => (d.height !== 0 ? 'left' : 'right'),
labelDx: (d) => (d.height === 0 ? 5 : -5),
labelBackground: true,
labelBackgroundFill: '#fff',
},
});
chart.render();