
Skill 文件
| name | antv-g2-chart |
|---|---|
| title | AntV G2 统计图表 |
| description | Generate G2 v5 chart code. Use when user asks for G2 charts, bar charts, line charts, pie charts, scatter plots, area charts, or any data visualization with G2 library. |
G2 v5 Chart Code Generator
You are an expert in AntV G2 v5 charting library. Generate accurate, runnable code following G2 v5 best practices.
1. Core Constraints / 核心约束 (MUST follow)
containeris mandatory:new Chart({ container: 'container', ... })- Use Spec Mode ONLY:
chart.options({ type: 'interval', data, encode: {...} })(V4 链式 API 见 Forbidden Patterns) chart.options()只能调用一次:多次调用会完整覆盖前一次配置,只有最后一次生效。多 mark 叠加必须用type: 'view'+children数组,而不是多次调用chart.options()encodeobject:encode: { x, y }(禁止 V4 的.position('x*y'))transformmust be array:transform: [{ type: 'stackY' }]labelsis plural: Uselabels: [{ text: 'field' }]notlabel: {}coordinate规则:- 坐标系类型直接写:
coordinate: { type: 'theta' }、coordinate: { type: 'polar' } - transpose 是变换不是坐标系类型,必须写在
transform数组里:coordinate: { transform: [{ type: 'transpose' }] } - ❌ 禁止:
coordinate: { type: 'transpose' }
- 坐标系类型直接写:
- 范围编码(甘特图、candlestick 等):
encode: { y: 'start', y1: 'end' },禁止y: ['start', 'end'] - 样式原则:用户描述中提到的样式(radius、fillOpacity、color、fontSize 等)必须完整保留;用户未提及的装饰性样式(
shadowBlur、shadowColor、shadowOffsetX/Y等)不要自行添加 animate规则:用户未明确要求动画时不要添加animate配置(G2 自带默认动画),只有用户明确描述动画需求时才添加scale.color.palette只能用合法值:palette 通过 d3-scale-chromatic 查找,非法名称会抛Unknown palette错误。不要推断或创造不存在的名称(如'blueOrange'、'redGreen'、'hot'、'jet'、'coolwarm'等均非法)。合法的常用值:顺序色阶'blues'|'greens'|'reds'|'ylOrRd'|'viridis'|'plasma'|'turbo';发散色阶'rdBu'|'rdYlGn'|'spectral';不确定时用range: ['#startColor', '#endColor']自定义替代- 禁止在用户代码中使用
d3.*:G2 内部使用 d3,但d3对象不会暴露到用户代码作用域,调用d3.sum()等会抛ReferenceError: d3 is not defined。如需聚合,优先使用 G2 内置选项(如sortX的reducer: 'sum'),不得不自定义时用原生 JS:d3.sum(arr, d=>d.v)→arr.reduce((s,d)=>s+d.v,0);d3.max(arr, d=>d.v)→Math.max(...arr.map(d=>d.v)) - 用户未指定配色时,禁止使用白色或近白色作为图形填充色:
style: { fill: '#fff' }、style: { fill: 'white' }、style: { fill: '#ffffff' }等在白色背景下会让图形完全不可见。未指定配色时应依赖 G2 的encode.color自动分配主题色,或使用有明确视觉区分度的颜色(如'#5B8FF9')。以下是合法例外:label 文字fill: '#fff'(深色背景内标签)、分隔线stroke: '#fff'(堆叠/pack/treemap 的分隔白线) padding只接受number | 'auto',禁止数组形式:padding: [40, 30, 40, 50]在 G2 v5 中无效(会被忽略或报错)。四边统一用padding: 40;分方向控制用paddingTop/paddingRight/paddingBottom/paddingLeft单独设置;默认'auto'已自动为坐标轴/图例预留空间,大多数情况无需手动配置。禁止设置padding: 0——会关闭自动计算,导致坐标轴/图例被截断;只需调整某一方向时单独设置对应方向即可autoFit: true时禁止同时设置width:autoFit会完全忽略width,同时出现时width无效。autoFit: true时只设height;需要固定宽高时去掉autoFit改用width+height- 用户未指定容器时:
container默认为'container',不要通过document.createElement('div')进行创建,代码末尾必须有chart.render(); - 禁止在数据中存放 hex 色值并通过
encode.color映射:encode.color映射到数据中包含 hex 字符串(如'#1e3a5f')的字段时,Ordinal scale 会将 hex 字符串当作「类别 key」而非颜色值处理——最终渲染颜色来自 G2 默认调色板而非数据中的 hex 值,且图例会显示无意义的 hex 字符串。正确做法:移除数据中的 color 字段,将 hex 色值放入scale.color.range,encode.color指向有业务含义的字段(如'group'),通过scale.color.domain+range精确配对。例外情况:若必须直接使用数据中的动态颜色,需显式配置scale: { color: { type: 'identity' } }。 - Label 可见性与防重叠:柱状图
position: 'inside'的 label 必须添加transform: [{ type: 'contrastReverse' }];数据密集图表(折线图多系列、散点图、分组柱状图)label 必须添加overlapDodgeY或overlapHide;堆叠图/TreeMap/旭日图等空间有限 mark 的 label 必须添加overflowHide;禁止使用dx偏移定位 label,应使用position控制位置。详见 标签配置 [blocked] - 深色背景文本对比度:容器背景为深色/黑色时必须使用
theme: 'classicDark'(或theme: { type: 'classicDark', view: { viewFill: '色值' } }),G2 会自动将所有组件文本切换为浅色;浅色背景下禁止将文本设为浅灰色(如labelFill: '#ccc');饼图scale.color.range中禁止包含与背景相同或近似的颜色。详见 深色主题适配 [blocked] - interval和area 的 scale.y 值域约束:interval和area 的默认基线为 y=0(MaybeZeroY1)。当 scale.y.domain 收窄到不包含 0 的区间(如数据在 90-100 波动,设 domain: [90, 100] 以放大细节),图形会从 0 开始绘制,底部溢出绘图区并遮挡坐标轴。此时必须同时设置 clip: true 裁剪溢出。
1.1 Forbidden Patterns / 禁止使用的写法
禁止使用 V4 语法,必须使用 V5 Spec 模式:
原因:V5 使用 Spec 模式,结构清晰,易于序列化、动态生成和调试。
createView 的正确 V5 替代方案
chart.createView() 在 V4 中用于"多视图共享容器但数据各异",V5 中对应两种场景:
场景 A:同一坐标系内叠加多个 mark(最常见)
→ 用 type: 'view' + children 数组,children 中不能再嵌套 view 或者 children :
场景 B:多个独立坐标系并排/叠加(如人口金字塔、butterfly 图)
→ 用 type: 'spaceLayer' + children(各子 view 有独立数据和坐标系):
选择原则:
- 两侧数据结构相同、只是方向相反 → 优先用负值技巧(单
interval,代码最简洁) - 两侧需要完全独立的坐标系/比例尺 → 用
spaceLayer
1.2 禁止使用的幻觉 Mark 类型 / Hallucinated Mark Types
以下类型来自其他图表库(如 ECharts、Vega),G2 中不存在,使用将导致运行时报错:
G2 合法 mark 类型完整列表(不得凭空创造其他 type):
- 基础:
interval、line、area、point、rect、cell、text、image、path、polygon、shape - 连接:
link、connector、vector - 参考线/区域:
lineX、lineY、rangeX、rangeY;range(极少用,仅在 x/y 均需限定二维矩形时使用,且数据的 x/y 字段必须是[start,end]数组) - 统计:
box、boxplot、density、heatmap、beeswarm - 层次/关系:
treemap、pack、partition、tree、sankey、chord、forceGraph - 特殊:
wordCloud、gauge、liquid - 需引入扩展包:
sunburst(需@antv/g2-extension-plot,见 旭日图 [blocked])
2. Common Mistakes / 常见错误
⚠️ 最高频错误:禁止多次调用 chart.options()
chart.options() 是全量替换,不是合并。多次调用时只有最后一次生效,前面的配置全部丢失。每个图表只能调用一次 chart.options()。
多 mark 组合规则:
- 只能使用
children,禁止marks、layers等属性 children不能嵌套(children内不能再有type: 'view'+children)- 复杂多坐标系组合用
spaceLayer/spaceFlex
其他常见错误
<!-- CONSTRAINTS:END -->
3. Basic Structure / 基础结构
4. Core / 核心概念
核心概念是 G2 的基础,理解这些概念是正确使用 G2 的前提。
4.1 Chart 初始化
Chart 是 G2 的核心类,所有图表都从 Chart 实例开始。
> 详细文档: Chart 初始化 [blocked]
4.2 encode 通道系统
encode 将数据字段映射到视觉通道,是 G2 的核心概念。
> 详细文档: encode 通道系统 [blocked]
4.3 视图组合 (view + children)
使用 view 类型配合 children 数组组合多个 mark。
> 详细文档: 视图组合 [blocked]
5. Concepts / 概念指南
概念指南帮助选择正确的图表类型和配置方案。
5.1 图表类型选择 / Chart Selection
根据数据特征和可视化目标选择合适的图表类型:
> 详细文档: 图表类型选择指南 [blocked]
5.2 视觉通道 / Visual Channels
视觉通道是数据到视觉属性的映射方式:
> 详细文档: 视觉通道 [blocked]
5.3 配色理论 / Color Theory
选择合适的配色方案提升图表可读性:
> 详细文档: 配色理论 [blocked]
6. Marks / 图表类型
Marks 是 G2 的核心可视化元素,决定了数据的视觉表现形式。每种 Mark 适合特定的数据类型和可视化场景。
6.1 柱状图系列 / Interval
柱状图用于比较分类数据的大小,是最常用的图表类型。基础柱状图使用 interval mark,堆叠柱状图需要添加 stackY transform,分组柱状图使用 dodgeX transform。
> 详细文档: 基础柱状图 [blocked] | 堆叠柱状图 [blocked] | 分组柱状图 [blocked] | 百分比柱状图 [blocked]
6.2 折线图系列 / Line
折线图用于展示数据随时间或有序类别的变化趋势。支持单线、多线对比,以及不同插值方式。
> 详细文档: 基础折线图 [blocked] | 多系列折线 [blocked] | LineX/LineY [blocked]
6.3 面积图系列 / Area
面积图在折线图基础上填充区域,强调数量随时间的变化程度。堆叠面积图用于展示各部分对整体的贡献。
> 详细文档: 基础面积图 [blocked] | 堆叠面积图 [blocked]
6.4 饼图/环形图 / Arc (Pie/Donut)
饼图用于展示各部分占整体的比例关系。使用 theta 坐标系配合 interval mark 实现。
> 详细文档: 饼图 [blocked] | 环形图 [blocked]
6.5 散点图/气泡图 / Point
散点图用于展示两个数值变量的关系,气泡图通过点的大小展示第三个维度。
> 详细文档: 散点图 [blocked] | 气泡图 [blocked]
6.6 直方图 / Histogram
直方图用于展示连续数值数据的分布情况,使用 rect 标记配合 binX 转换实现。与柱状图不同,直方图的柱子之间无间隔,表示数据连续。
> 详细文档: 直方图 [blocked]
6.7 玫瑰图/玉珏图 / Polar Charts
极坐标系下的图表,通过半径或弧长表示数值大小,视觉上更加美观。
> 详细文档: 玫瑰图 [blocked] | 玉珏图 [blocked]
6.8 统计分布图 / Distribution
展示数据分布特征的图表,适用于统计分析和探索性数据分析。
> 详细文档: 箱线图 [blocked] | 箱型图(Box) [blocked] | 密度图 [blocked] | 小提琴图 [blocked] | 多边形 [blocked]
6.9 关系图 / Relation
展示数据之间关系的图表,适用于网络分析和集合关系展示。
> 详细文档: 桑基图 [blocked] | 和弦图 [blocked] | 韦恩图 [blocked] | 弧长连接图 [blocked]
6.10 项目管理图 / Project
适用于项目管理和进度跟踪的图表。
> 详细文档: 甘特图 [blocked] | 子弹图 [blocked]
6.11 金融图表 / Finance
适用于金融数据分析的专业图表。
> 详细文档: K线图 [blocked]
6.12 多维数据图 / Multivariate
展示多维数据关系的图表。
> 详细文档: 平行坐标系 [blocked] | 雷达图 [blocked]
6.13 对比图 / Comparison
适用于数据对比的图表。
> 详细文档: 双向柱状图 [blocked]
6.14 基础标记 / Basic Marks
基础标记是 G2 的底层构建块,可独立使用或组合构建复杂图表。
> 详细文档: rect [blocked] | text [blocked] | image [blocked] | path [blocked] | link [blocked] | connector [blocked] | shape [blocked] | vector [blocked]
6.15 范围标记 / Range
范围标记用于展示数据的区间范围。
> 详细文档: range/rangeY [blocked] | rangeX [blocked]
6.16 分布与打包图 / Distribution & Pack
> 详细文档: 蜂群图 [blocked] | 打包图 [blocked]
6.17 层次结构图 / Hierarchy
展示层级数据的图表,通过面积或半径表示数值占比。
> 详细文档: 矩形树图 [blocked] | 旭日图 [blocked] | 分区图 [blocked] | 树图 [blocked]
6.18 其他图表 / Others
> 详细文档: 热力图 [blocked] | 密度热力图 [blocked] | 仪表盘 [blocked] | 词云 [blocked] | 水波图 [blocked]
7. Data / 数据变换
数据变换在数据加载阶段执行,配置在 data.transform 中,影响所有使用该数据的标记。
7.1 Data Transform 类型(配置在 data.transform)
7.2 数据格式与模式
> 详细文档: filter [blocked] | sort [blocked] | sortBy [blocked] | fold [blocked] | slice [blocked] | ema [blocked] | kde [blocked] | log [blocked] | fetch [blocked] | 数据变换模式 [blocked]
7.3 常见错误:Data Transform 放错位置
7.4 组合示例:宽表数据 + 堆叠图
8. Transforms / 标记变换
标记变换在绑定视觉通道时执行,配置在 mark 的 transform 数组中,用于数据聚合、防重叠等。
配置位置:transform 数组,与 data、encode 同级,不是在 data.transform 中。
8.1 防重叠变换 / Anti-overlap
> 详细文档: stackY [blocked] | dodgeX [blocked] | jitter [blocked] | jitterX [blocked] | jitterY [blocked] | pack [blocked]
8.2 聚合变换 / Aggregation
> 详细文档: group [blocked] | groupX [blocked] | groupY [blocked] | groupColor [blocked] | bin [blocked] | binX [blocked] | sample [blocked]
8.3 排序变换 / Sorting
> 详细文档: sortX [blocked] | sortY [blocked] | sortColor [blocked]
8.4 选取变换 / Selection
> 详细文档: select [blocked] | selectX [blocked] | selectY [blocked]
8.5 其他变换 / Others
> 详细文档: normalizeY [blocked] | diffY [blocked] | symmetryY [blocked] | flexX [blocked] | stackEnter [blocked]
9. Interactions / 交互
G2 提供丰富的内置交互,用于数据探索和图表操作。
9.1 选择类交互 / Selection
> 详细文档: elementSelect [blocked] | elementSelectBy [blocked] | brush [blocked] | brushXY [blocked] | brushAxis [blocked] | legendFilter [blocked]
9.2 高亮类交互 / Highlight
> 详细文档: elementHighlight [blocked] | elementHighlightBy [blocked] | elementHoverScale [blocked] | legendHighlight [blocked] | brushXHighlight [blocked] | brushYHighlight [blocked] | 单轴框选高亮 [blocked]
9.3 过滤类交互 / Filter
> 详细文档: sliderFilter [blocked] | scrollbarFilter [blocked] | brushFilter [blocked] | brushXFilter [blocked] | brushYFilter [blocked] | adaptiveFilter [blocked]
9.4 其他交互 / Others
> 详细文档: tooltip [blocked] | poptip [blocked] | drilldown [blocked] | treemapDrilldown [blocked] | fisheye [blocked] | sliderWheel [blocked] | elementPointMove [blocked] | chartIndex [blocked]
10. Components / 组件
组件是图表的辅助元素,如坐标轴、图例、提示信息等。
10.1 坐标轴 / Axis
坐标轴展示数据维度,支持丰富的样式配置。
> 详细文档: 坐标轴配置 [blocked] | 雷达图坐标轴 [blocked]
10.2 图例 / Legend
图例展示数据分类或连续数值映射,支持分类图例和连续图例(色带)。
> 详细文档: 图例配置 [blocked] | 分类图例 [blocked] | 连续图例 [blocked]
10.3 提示信息 / Tooltip
Tooltip 在悬停时显示数据详情,支持自定义模板和格式化。
> 详细文档: Tooltip 配置 [blocked]
10.4 其他组件 / Others
> 详细文档: 标题 [blocked] | 标签 [blocked] | 滚动条 [blocked] | 滑动条 [blocked] | 标注 [blocked]
11. Scales / 比例尺
比例尺将数据值映射到视觉通道,如位置、颜色、大小等。
11.1 ⚠️ 默认行为(不要过度指定 type)
G2 会根据数据类型自动推断 scale 类型,非特殊情况下不要手动指定 type:
需要手动指定 type 的特殊情况:
11.2 比例尺类型
> 详细文档: linear [blocked] | band [blocked] | point [blocked] | time [blocked] | log [blocked] | pow/sqrt [blocked] | ordinal [blocked] | sequential [blocked] | quantile/quantize [blocked] | threshold [blocked]
12. Coordinates / 坐标系
坐标系定义数据到画布位置的映射方式,不同坐标系产生不同图表形态。
> 详细文档: cartesian [blocked] | polar [blocked] | theta [blocked] | radial [blocked] | transpose [blocked] | parallel [blocked] | helix [blocked] | fisheye [blocked]
13. Compositions / 组合视图
组合视图用于创建多图表布局,如分面、多视图叠加等。
> 详细文档: view [blocked] | facetRect [blocked] | facetCircle [blocked] | repeatMatrix [blocked] | spaceLayer [blocked] | spaceFlex [blocked] | timingKeyframe [blocked] | geoView [blocked] | 地图 [blocked]
14. Themes / 主题
主题定义图表的整体视觉风格,包括颜色、字体、间距等。
> 详细文档: 内置主题 [blocked] | 自定义主题 [blocked]
15. Palettes / 调色板
调色板定义颜色序列,用于分类数据或连续数据的颜色映射。
> 详细文档: category10 [blocked] | category20 [blocked]
16. Animations / 动画
动画增强图表的表现力,支持入场、更新、退场动画配置。
⚠️ 重要规则:G2 底层自带默认动画效果,用户没有明确要求动画时不要添加 animate 配置。只有用户明确描述了动画需求(如"渐入动画"、"波浪入场"等)时,才查阅参考文档添加对应的 animate 配置。
> 详细文档: 动画介绍 [blocked] | 动画类型 [blocked] | 关键帧动画 [blocked]
17. Label Transforms / 标签变换
标签变换用于处理标签重叠、溢出等问题,提升标签可读性。
> 详细文档: overflowHide [blocked] | overlapHide [blocked] | overlapDodgeY [blocked] | contrastReverse [blocked] | exceedAdjust [blocked] | overflowStroke [blocked]
18. Patterns / 模式
模式是常见场景的最佳实践,包含迁移指南、性能优化、响应式适配等。
18.1 迁移指南 / Migration (v4 → v5)
> 详细文档: v4 → v5 迁移 [blocked]
18.2 性能优化 / Performance
数据预聚合、LTTB 降采样、Canvas 渲染器确认、高频实时数据节流更新。
> 详细文档: 性能优化 [blocked]
18.3 响应式适配 / Responsive
autoFit 自适应、ResizeObserver 动态调整、移动端字体/边距适配。
> 详细文档: 响应式适配 [blocked]
19. Theme from Style Skill / 从风格 Skill 生成主题
当匹配到某个风格 Skill 的时候,从该 Skill 中提取 chart_aesthetics 和 data_color_scales 两个 section,映射为 G2 theme 配置。
19.1 前置条件
Skill 文档中必须包含以下两个 section:
19.2 映射规则
chart_aesthetics → G2 Theme 配置
data_color_scales → G2 色板配置
19.3 生成示例
19.4 注意事项
- 颜色值从 Skill 的
tokens.colors中查找,chart_aesthetics只定义语义(subtle、solid),具体色值在 tokens 里 - 字体从
tokens.typography或typography中提取,通常是 mono 字体(如 JetBrains Mono)配数据标签 - Skill 如果定义了
dark/light双模式,分别生成两套 theme 对象,通过切换theme参数应用 - G2 不支持
box-shadow、backdrop-filter、CSSgradient等效果,这类属性需通过style回调或跳过