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)

lineX

Previous
line
Next
lineY

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...

Overview

The lineX and lineY marks have similar configurations. The lineX mark is used to draw auxiliary lines perpendicular to the x-axis, commonly used for drawing average values or other aggregated data auxiliary lines.

Data Configuration Methods

lineX supports two methods for configuring data:

Method 1: Direct data configuration (recommended for simple scenarios)

When you need to draw vertical lines at fixed positions, you can directly configure data as a number array. G2 will automatically convert the array to x channel encoding.

import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
});
chart.options({
type: 'view',
autoFit: true,
height: 200,
children: [
{
type: 'rect',
data: {
type: 'fetch',
value: 'https://assets.antv.antgroup.com/g2/unemployment2.json',
},
encode: { x: 'rate' },
transform: [{ type: 'binX', y: 'count' }],
style: { inset: 0.5 },
},
{
type: 'lineX',
data: [10.2], // Automatically converted to encode: { x: [10.2] }
style: { stroke: '#000', strokeOpacity: 0.45, lineDash: [3, 4] },
labels: [
{
text: 'lineX text',
position: 'top-left',
textBaseline: 'bottom',
fill: '#000',
fillOpacity: 0.45,
background: true,
backgroundFill: '#000',
backgroundOpacity: 0.15,
},
],
},
],
});
chart.render();

Method 2: Explicit encode configuration (for complex data processing)

When you need to work with data fields or use data transforms, you should explicitly configure encode channels. This approach is more flexible and supports data field mapping and various data transforms.

/**
* A recreation of this demo: https://vega.github.io/vega-lite/examples/layer_histogram_global_mean.html
*/
import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
autoFit: true,
});
chart.data({
type: 'fetch',
value: 'https://assets.antv.antgroup.com/g2/movies.json',
transform: [
{
type: 'filter',
callback: (d) => d['IMDB Rating'] > 0,
},
],
});
chart
.rect()
.transform({ type: 'binX', y: 'count', thresholds: 9 })
.encode('x', 'IMDB Rating')
.scale('y', { domainMax: 1000 })
.style('inset', 1);
chart
.lineX()
.transform({ type: 'groupColor', x: 'mean' }) // Calculate mean value
.encode('x', 'IMDB Rating') // Explicitly configure x channel
.style('stroke', '#F4664A')
.style('strokeOpacity', 1)
.style('lineWidth', 2)
.style('lineDash', [4, 4]);
chart.render();

Configuration Method Comparison

Configuration MethodUse CaseExampleAuto Conversion
data: [value1, value2]Fixed position auxiliary linesdata: [10, 20]✅ Auto converted to encode.x
encode: { x: field }Based on data fields or transformsencode('x', 'fieldName')❌ Explicit configuration

Important Notes:

  • When both data array and encode.x are configured, encode.x takes higher priority
  • data auto conversion only works when array elements are simple values (not objects)
  • When using transform for data aggregation, the encode method must be used

For more examples, you can visit the Chart Examples - Line Annotation page.

Configuration

PropertyDescriptionTypeDefaultRequired
dataConfigure data for the lineX mark, supports number arrays (automatically converted to x channel) or object arraysArray-
encodeConfigure visual channels of the lineX mark, including x, color, etc., to specify the relationship between visual element properties and dataencode-✓
styleConfigure the graphic style of the lineX markstyle-
labelsConfigure the text configuration of the lineX marklabels-

encode

Configure the visual channels of the lineX mark.

PropertyDescriptionTypeDefaultRequired
xBind the x property channel of the lineX mark. Supports data field mapping or works with transforms to calculate aggregated values (such as mean, median). Note: When directly configuring data as an array, it will be automatically converted to the x channel, no need to configure repeatedly.encode-✓
colorBind the color property channel of the lineX mark. If a data field is mapped to the color channel, the data will be grouped and split into multiple regions with different colorsencode-

style

PropertyDescriptionTypeDefaultRequired
strokeStroke of the graphicstring | Function<string>-
strokeOpacityStroke opacitynumber | Function<number>-
lineWidthWidth of the graphic strokenumber | Function<number>-
lineDashDashed stroke configuration. The first value is the length of each dash segment, the second value is the distance between segments. Setting lineDash to [0, 0] results in no stroke[number,number] | Function<[number, number]>-
opacityOverall opacity of the graphicnumber | Function<number>-
shadowColorShadow color of the graphicstring | Function<string>-
shadowBlurGaussian blur coefficient of the graphic shadownumber | Function<number>-
shadowOffsetXHorizontal distance of the shadow from the graphicnumber | Function<number>-
shadowOffsetYVertical distance of the shadow from the graphicnumber | Function<number>-
cursorMouse cursor style. Same as CSS cursor style, default 'default'string | Function<string>default

Examples

Multi-data Source Comparative Analysis

Shows how to use different data sources to calculate statistical lines separately, suitable for data comparison analysis scenarios.

import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
autoFit: true,
});
// Simulate two different sets of data
const data2020 = Array.from({ length: 100 }, (_, i) => ({
score: 60 + Math.random() * 30,
year: 2020,
category: 'A',
}));
const data2021 = Array.from({ length: 100 }, (_, i) => ({
score: 70 + Math.random() * 25,
year: 2021,
category: 'B',
}));
const allData = [...data2020, ...data2021];
chart.options({
type: 'view',
children: [
// 2020 data histogram
{
type: 'rect',
data: data2020,
transform: [{ type: 'binX', y: 'count', thresholds: 15 }],
encode: { x: 'score' },
style: {
fill: '#1890ff',
fillOpacity: 0.5,
stroke: '#1890ff',
inset: 0.5,
},
},
// 2021 data histogram
{
type: 'rect',
data: data2021,
transform: [{ type: 'binX', y: 'count', thresholds: 15 }],
encode: { x: 'score' },
style: {
fill: '#fa8c16',
fillOpacity: 0.5,
stroke: '#fa8c16',
inset: 0.5,
},
},
// 2020 average line
{
type: 'lineX',
data: data2020,
transform: [{ type: 'groupColor', x: 'mean' }],
encode: { x: 'score' },
style: {
stroke: '#1890ff',
strokeOpacity: 1,
lineWidth: 3,
lineDash: [6, 3],
},
labels: [
{
text: '2020 Average Score',
position: 'top-left',
fill: '#1890ff',
fontWeight: 'bold',
background: true,
backgroundFill: '#e6f7ff',
backgroundOpacity: 0.9,
},
],
},
// 2021 average line
{
type: 'lineX',
data: data2021,
transform: [{ type: 'groupColor', x: 'mean' }],
encode: { x: 'score' },
style: {
stroke: '#fa8c16',
strokeOpacity: 1,
lineWidth: 3,
lineDash: [6, 3],
},
labels: [
{
text: '2021 Average Score',
position: 'top-right',
fill: '#fa8c16',
fontWeight: 'bold',
background: true,
backgroundFill: '#fff7e6',
backgroundOpacity: 0.9,
},
],
},
// Overall average line
{
type: 'lineX',
data: allData,
transform: [{ type: 'groupColor', x: 'mean' }],
encode: { x: 'score' },
style: {
stroke: '#52c41a',
strokeOpacity: 1,
lineWidth: 2,
lineDash: [8, 4],
},
labels: [
{
text: 'Overall Average Score',
position: 'bottom',
fill: '#52c41a',
fontWeight: 'bold',
textAlign: 'center',
background: true,
backgroundFill: '#f6ffed',
backgroundOpacity: 0.9,
},
],
},
],
});
chart.render();