AntV G2 统计图表
可视化官方

AntV G2 统计图表

Use this skill whenever the user wants to create, customize, or troubleshoot G2 v5 chart visualizations. Triggers include: any mention of 'G2', 'antv g2', '@antv/g2', 'G2 chart', 'G2 可视化', or requests to produce charts like bar charts (柱状图), line charts (折线图), pie charts (饼图), scatter plots (散点图), area charts (面积图), heatmap (热力图), radar charts (雷达图), treemap (矩形树图), funnel charts (漏斗图), sankey diagrams (桑基图), gauge (仪表盘), wordcloud (词云), boxplot (箱线图), as well as G2-specific topics like encode channels, scale config, coordinate systems, transforms, interactions, themes, labels, and animations. Also use when debugging G2 rendering errors, V4→V5 migration issues, or chart type selection. Do NOT use for G6 graph/network visualization, X6 editor diagrams, or S2 pivot tables.

Memo Agent
Memo Agent
浏览4,020
使用2,511

Skill 文件

SKILL.md
name
antv-g2-chart
title
AntV G2 统计图表
description
Use this skill whenever the user wants to create, customize, or troubleshoot G2 v5 chart visualizations. Triggers include: any mention of 'G2', 'antv g2', '@antv/g2', 'G2 chart', 'G2 可视化', or requests to produce charts like bar charts (柱状图), line charts (折线图), pie charts (饼图), scatter plots (散点图), area charts (面积图), heatmap (热力图), radar charts (雷达图), treemap (矩形树图), funnel charts (漏斗图), sankey diagrams (桑基图), gauge (仪表盘), wordcloud (词云), boxplot (箱线图), as well as G2-specific topics like encode channels, scale config, coordinate systems, transforms, interactions, themes, labels, and animations. Also use when debugging G2 rendering errors, V4→V5 migration issues, or chart type selection. Do NOT use for G6 graph/network visualization, X6 editor diagrams, or S2 pivot tables.
tools
curl

G2 v5 Chart Visualization

Overview

G2 v5 is AntV's grammar-of-graphics charting library. It uses Spec Mode — a declarative, JSON-like configuration style where chart.options() defines the entire visualization in one call.

javascript
import { Chart } from '@antv/g2';
const chart = new Chart({ container: 'container', autoFit: true });chart.options({  type: 'interval',  data: [{ genre: 'Sports', sold: 275 }],  encode: { x: 'genre', y: 'sold' },});chart.render();

CDN Usage

html
<​script src="https://unpkg.com/@antv/g2@5/dist/g2.min.js"​><​/script​><​script​>  const chart = new G2.Chart({ container: 'container', autoFit: true });  chart.options({    type: 'interval',    data: [{ genre: 'Sports', sold: 275 }],    encode: { x: 'genre', y: 'sold' },  });  chart.render();<​/script​>

Content Retrieval Service

When using AntV G2 for data visualization, if you need to understand the concepts, usage, API, examples, and other aspects of G2 v5, you can use the provided context retrieval service. When using the skill, content is retrieved via an antv HTTP API server using GET requests.

  • Host: https://sive.antv.antgroup.com
  • Endpoint: /api/v1/context/retrieve
  • Method: GET
  • Parameters: query, library, topK, content, maxTokens, progressiveLevel

Retrieve skills by query (hybrid search = FTS + vector + RRF fusion). Constraints docs are indexed as regular skill documents and will appear in search results naturally.

ParameterTypeRequiredDescription
querystringSearch keywords, e.g. bar chart interval
librarystringLibrary name: g2, g6, x6
topKnumberNumber of results to return (default: 5)
contentbooleanReturn full reference doc markdown (default: true)
maxTokensnumberMax tokens per result (default: unlimited)
progressiveLevelnumberProgressive disclosure level: 0=full, 1=summary+code, 2=summary-only
bash
curl "https://sive.antv.antgroup.com/api/v1/context/retrieve?query=bar+chart+stacked&library=g2"

Critical Rules

MUST: Use V5 Spec Mode ONLY

javascript
// ❌ WRONG — V4 chain API (deprecated, will not render)chart.interval()  .data([...])  .encode('x', 'genre')  .encode('y', 'sold')  .style({ radius: 4 });
// ✅ CORRECT — V5 Spec Modechart.options({  type: 'interval',  data: [...],  encode: { x: 'genre', y: 'sold' },  style: { radius: 4 },});

MUST: chart.options() called exactly ONCE

Multiple calls overwrite each other. For multi-mark overlays, use type: 'view' + children:

javascript
// ❌ WRONG — second options() overwrites the firstchart.options({ type: 'line', data, encode: { x: 'date', y: 'value' } });chart.options({ type: 'point', data, encode: { x: 'date', y: 'value' } });
// ✅ CORRECT — children array for multi-markchart.options({  type: 'view',  data,  children: [    { type: 'line',  encode: { x: 'date', y: 'value' } },    { type: 'point', encode: { x: 'date', y: 'value' } },  ],});

MUST: container is mandatory, chart.render() at the end

javascript
// ❌ WRONG — no container, no renderconst chart = new Chart();chart.options({ type: 'interval', data });
// ✅ CORRECTconst chart = new Chart({ container: 'container', autoFit: true });chart.options({ type: 'interval', data, encode: { x: 'genre', y: 'sold' } });chart.render();

MUST: Correct mark types only

❌ Hallucinated (from ECharts/Vega)✅ G2 correct replacement
type: 'ruleX'type: 'lineX'
type: 'ruleY'type: 'lineY'
type: 'regionX'type: 'rangeX'
type: 'regionY'type: 'rangeY'
type: 'venn'type: 'path' + transform

Legal G2 marks: interval, line, area, point, rect, cell, text, image, path, polygon, shape, link, connector, vector, lineX, lineY, rangeX, rangeY, range, box, boxplot, density, heatmap, beeswarm, treemap, pack, partition, tree, sankey, chord, wordCloud, gauge, liquid. sunburst requires @antv/g2-extension-plot.

MUST: encode is an object, transform is an array

javascript
// ❌ WRONG.encode('x', 'genre').transform: { type: 'stackY' }
// ✅ CORRECTencode: { x: 'genre', y: 'sold' }transform: [{ type: 'stackY' }]

MUST: labels is plural, range encoding uses y/y1

javascript
// ❌ WRONGlabel: { text: 'sold' }encode: { y: ['start', 'end'] }
// ✅ CORRECTlabels: [{ text: 'sold' }]encode: { y: 'start', y1: 'end' }

MUST: No d3 in user code

javascript
// ❌ WRONG — d3 is not exposed in user scopeconst total = d3.sum(data, d => d.value);
// ✅ CORRECT — use native JS or G2 built-in transformsconst total = data.reduce((sum, d) => sum + d.value, 0);

MUST: No white/near-white fill, no padding as array

javascript
// ❌ WRONGstyle: { fill: '#fff' }       // invisible on white backgroundpadding: [40, 30, 40, 50]     // invalid in G2 v5
// ✅ CORRECTencode: { color: 'group' }    // let G2 assign colorspadding: 40                   // single number or 'auto'

MUST: Transpose is a transform, not a coordinate type

javascript
// ❌ WRONGcoordinate: { type: 'transpose' }
// ✅ CORRECTcoordinate: { transform: [{ type: 'transpose' }] }

Default Aesthetics / 默认视觉基线

这一段不依赖内容检索,是每次生成都必须满足的视觉底线。 目标:即使用户只说"画个柱状图",产出的也是一张"开箱即用就好看"的图——而不是裸 type + data + encode 三件套骨架。

下面把视觉分成两层,二者并行不悖:

  • 基线美观」(MUST):默认必加,无需用户请求。这是最低视觉档次,缺失即视为缺陷。
  • 装饰增强」(MAY):仅当用户明确想"好看 / 精致 / 报告级"时才追加。默认不要堆砌——保留 G2 克制的取向,避免图表喧宾夺主。

MUST: 基线美观(默认必加)

  1. 容器与会话new Chart({ container: 'container', autoFit: true, theme: 'classic' }),末尾 chart.render()。容器背景为深/黑色时才换 'classicDark'
  2. 颜色交给主题:分类数据用 encode: { color: <类别字段> } 让 G2 自动套用 Category10(#5B8FF9 #5AD8A6 #5D7092 #F6BD16 #6F5EF9 #6DC8EC #945FB9 #FF9845 #1E9493 #FF99C3)。不要手动写死单色 style.fill不要把 hex 色值塞进数据再用 encode.color 映射(会被当类别 key,图例显示 hex)。单系列也用 encode.color 而非裸 fill,以求与多系列风格一致。
  3. 柱/条形加圆角type: 'interval' 默认 style: { radius: 4 }(柱顶圆角)。
  4. 面积/折线降透明度并描边area 默认 style: { fillOpacity: 0.6 }line 默认 style: { lineWidth: 2 };面积常用 area + line 描边组合,fillOpacity: 0.5
  5. 数据标签防重叠labels 一律用 position 定位,禁用 dx/dy 偏移。柱内标签必带 transform: [{ type: 'contrastReverse' }](深底白字自适应);多系列折线、散点、分组柱状等密集场景必带 overlapDodgeYoverlapHide;堆叠 / treemap / 旭日图等空间有限场景必带 overflowHide
  6. 坐标轴有语义标题:业务数据默认 axis: { x: { title: '<语义化短词>' }, y: { title: '<量纲>' } },如 '月份''销量 / 件'禁止'x' / 'y' / 'field' 这类无信息标题。纯探索性图可省略,但不要写空标题。
  7. 语义化示例数据:示例数据用真实业务名——体育 / 策略 / 动作北京 / 上海 / 广州产品A / 产品B1月 … 12月严禁 a / b / cx / y类别1node1 这类惰性命名。带数值量纲的字段名最好体现单位(sales_cnylatency_ms)。
  8. 留白用 auto:默认 padding: 'auto'(坐标轴/图例已自动预留)。不要padding: 0(会截断组件),不要写数组形式 padding: [40,20,...]。确需微调某一边用 paddingTop / Right / Bottom / Left 单独设置。

MAY: 装饰增强(仅用户明确要"好看 / 报告级"时)

Mark 配色渐变(按 mark 类型选择,不要混用语法)

渐变写在 style.fill 里,是一条 CSS gradient 字符串。不同 mark 用不同形态,见下表——不要在一个 chart 里混用两种渐变思路,也不要给本应纯色的折线加渐变。

Mark渐变形态推荐写法视觉效果
interval 竖向柱状图(未 transpose)线性,固定 90deg(顶→底)style: { fill: 'linear-gradient(90deg, #5B8FF9 0%, #6DC8EC 100%)', radius: 6 }柱体顶亮底浅,轻盈感
interval 横向条形图(coordinate.transform: transpose线性,固定 0deg(左→右)style: { fill: 'linear-gradient(0deg, #5B8FF9 0%, #6DC8EC 100%)', radius: 6 }条体左端亮、右端浅
area(面积)线性,固定 90deg(顶→底衰减)style: { fill: 'linear-gradient(90deg, #1890ff 0%, rgba(24,144,255,0.1) 100%)' } 或配 fillOpacity: 0.6顶部实色、底部近透明,弱化边缘
point / 散点与气泡径向,模拟球体style: { fill: (d) => \radial-gradient(circle at 35% 35%, rgb(255,255,255) 0%, ${color(d)} 100%)`, shadowColor: 'rgba(0,0,0,0.15)', shadowBlur: 10 }`白色高光偏左上 → 3D 球体质感
line(折线)不加渐变填充;可用渐变描边 stroke 或保持纯色 lineWidth: 2折线靠形态清晰,渐变易显脏

deg 规则(与 CSS 相反,务必记牢)@antv/g 渐变角度用数学/Canvas 坐标系——0deg = 向右90deg = 向下180deg = 向左270deg = 向上。这不是 CSS 规格(CSS 里 180deg 才是向下)。所以本表竖向柱/面积要"顶→底"用 90deg,横向条形要"左→右"用 0deg。方向关键字(to top/to bottom 等)则按 CSS 语义、已自动修正,可放心用——但数值角必须按上表换算。

为什么这样固定:渐变绑死画布坐标系,不跟 coordinate.transform: transpose。竖向柱转成横向条后,柱体从竖变横,但 deg 不变——所以柱→条要把 90deg 改成 0deg 才方向正确。与其让 LLM 现算,不如按"竖向=90deg / 横向=0deg"两条死规则记。

关键细节:径向渐变的高光点统一取 circle at 35% 35%(左上偏移,模拟左上方光源),这是全仓一致的约定,照抄即可、不要自创偏移量。渐变填充的 mark 若再叠 label,标签字色要用 contrastReverse 或手动给深色字,避免压在浅色高光上不可读。

其他装饰

shadowBlur / shadowColor 轻阴影、自定义 animate 缓动、折线末端常驻标签(labels: [{ text: 'value', selector: 'last' }])、slider 缩略轴、scrollbar 滚动条。这些与渐变一同属于"锦上添花"——用户没提就别加,更不要一次性把所有装饰全堆上。

基线 vs 装饰:一张图对照

javascript
// ❌ 骨架(当前最易出现的默认产出)——只有 type + data + encode,没有视觉档次chart.options({ type: 'interval', data, encode: { x: 'genre', y: 'sold' } });
// ✅ 基线美观(默认目标)——圆角 + 主题色 + 语义数据 + 轴标题 + 标签,约 10 行chart.options({  type: 'interval',  data: [    { genre: '体育', sold: 275 },    { genre: '策略', sold: 115 },    { genre: '动作', sold: 120 },  ],  encode: { x: 'genre', y: 'sold', color: 'genre' },  style: { radius: 4 },  axis: { x: { title: '游戏类型' }, y: { title: '销量 / 件' } },  labels: [{ text: 'sold', position: 'outside' }],});
// ✨ 装饰增强(仅当用户要"报告级"时才加)——渐变 + 阴影 + 末端焦点chart.options({  type: 'interval',  data: [/* 同上 */],  encode: { x: 'genre', y: 'sold', color: 'genre' },  style: {    fill: 'linear-gradient(90deg, #5B8FF9 0%, #6DC8EC 100%)',    radius: 6,    shadowColor: 'rgba(0,0,0,0.15)',    shadowBlur: 8,  },  axis: { x: { title: '游戏类型' }, y: { title: '销量 / 件' } },  labels: [{ text: 'sold', position: 'outside', fontWeight: 'bold' }],});

契约优先级:当检索召回的 mark 文档与本段冲突时,以本段为准——本段是每次都生效的硬契约,mark 文档里的"最小示例"多为裸骨架,照抄即丑。可用 mark 文档补全数据结构 / 特有 API,但视觉基线以本段补齐。

Quick Reference

User IntentRetrieve Query
Chart initialization, container, autoFitGET /api/v1/context/retrieve?query=chart+init&library=g2
Bar / column chartGET /api/v1/context/retrieve?query=bar+chart+interval&library=g2
Line / area chartGET /api/v1/context/retrieve?query=line+area+chart&library=g2
Pie / donut / rose chartGET /api/v1/context/retrieve?query=pie+chart+theta&library=g2
Scatter / bubbleGET /api/v1/context/retrieve?query=scatter+point+bubble&library=g2
Treemap / sunburst / packGET /api/v1/context/retrieve?query=treemap+sunburst+pack&library=g2
Heatmap / density / boxplotGET /api/v1/context/retrieve?query=heatmap+density+boxplot&library=g2
Funnel / gauge / wordcloudGET /api/v1/context/retrieve?query=funnel+gauge+wordcloud&library=g2
Encode channels (x, y, color, size)GET /api/v1/context/retrieve?query=encode+channel&library=g2
Scale / palette / color rangeGET /api/v1/context/retrieve?query=scale+palette+color&library=g2
Coordinate (polar, theta, transpose)GET /api/v1/context/retrieve?query=coordinate+polar+theta+transpose&library=g2
Transform (stack, normalize, sort)GET /api/v1/context/retrieve?query=transform+stack+normalize&library=g2
Axis / legend / tooltip / labelsGET /api/v1/context/retrieve?query=axis+legend+tooltip+label&library=g2
Interaction (brush, highlight, drilldown)GET /api/v1/context/retrieve?query=interaction+brush+highlight&library=g2
Theme / dark modeGET /api/v1/context/retrieve?query=theme+dark+classicDark&library=g2
Default aesthetics / 视觉基线(见上方 Default Aesthetics 段,硬契约无需检索)—
AnimationGET /api/v1/context/retrieve?query=animation+animate&library=g2
Data fetch / filter / sortGET /api/v1/context/retrieve?query=data+fetch+filter+sort&library=g2
Facet / view compositionGET /api/v1/context/retrieve?query=facet+view+composition&library=g2
Chart type selection guideGET /api/v1/context/retrieve?query=chart+type+selection&library=g2
Rendering troubleshootGET /api/v1/context/retrieve?query=rendering+troubleshoot+debug&library=g2

Dependencies

  • @antv/g2 — G2 v5 charting engine
Ln 1, Col 1MarkdownSpaces: 2
No errors