chart-visualization
npx skills add https://github.com/antvis/gpt-vis --skill chart-visualization
Agent 安装分布
Skill 文档
Chart Visualization Skill
Workflow
This skill helps AI assistants recommend and generate appropriate data visualizations. The workflow consists of three main steps:
-
Intent Recognition & Chart Selection: Analyze the user’s intent and data characteristics to select the most suitable chart type
- Time-series data â Line, Area charts
- Categorical comparison â Column, Bar charts
- Proportion analysis â Pie chart
- Distribution analysis â Histogram, Boxplot, Violin charts
- Relationship/Flow â Sankey chart
- Multi-dimensional comparison â Radar chart
- Other specific needs â Funnel, Waterfall, Liquid, WordCloud, Treemap, Venn, etc.
-
Syntax Generation: Generate GPT-Vis syntax based on the selected chart type and provided data
-
Code Generation: Generate renderable code for the target framework (HTML, React, or Vue)
Supported Chart Types
| åç§° | å«å | è±æå | éç¨åºæ¯ | åææå¾ |
|---|---|---|---|---|
| æçº¿å¾ | çº¿å¾ | Line Chart | æ¶é´åºåæ°æ®ï¼å±ç¤ºè¶å¿åå | è¶å¿åæãå¯¹æ¯ |
| æ±å½¢å¾ | æ±ç¶å¾ | Column Chart | åç±»æ°æ®æ¯è¾ | 对æ¯ãåå¸ãæå |
| æ¡å½¢å¾ | æ¨ªåæ±ç¶å¾ | Bar Chart | åç±»æ°æ®æ¯è¾ï¼æ ç¾è¾é¿ | 对æ¯ãåå¸ãæå |
| é¥¼å¾ | 饼ç¶å¾ | Pie Chart | æ¾ç¤ºé¨åå æ´ä½çæ¯ä¾ | å æ¯ãæå |
| é¢ç§¯å¾ | åºåå¾ | Area Chart | æ¶é´åºåï¼å¼ºè°è¶å¿åæ»é | è¶å¿åæãå¯¹æ¯ |
| æ£ç¹å¾ | – | Scatter Chart | æ¾ç¤ºä¸¤ä¸ªåéçå ³ç³» | ç¸å ³æ§åæãåå¸ |
| åè½´å¾ | ç»åå¾ | Dual-Axes Chart | åæ¶å±ç¤ºä¸¤ä¸ªä¸åéçº§çæ°æ® | å¤ç»´å¯¹æ¯ãè¶å¿åæ |
| ç´æ¹å¾ | – | Histogram | æ¾ç¤ºæ°æ®åå¸ | åå¸åæ |
| ç®±çº¿å¾ | çé¡»å¾ | Boxplot | æ¾ç¤ºæ°æ®åå¸åå¼å¸¸å¼ | åå¸åæãå¼å¸¸æ£æµ |
| é·è¾¾å¾ | èèå¾ | Radar Chart | å¤ç»´åº¦æ°æ®å¯¹æ¯ | å¤ç»´å¯¹æ¯ |
| æ¼æå¾ | – | Funnel Chart | å±ç¤ºæµç¨è½¬åç | æµç¨åæã转ååæ |
| çå¸å¾ | – | Waterfall Chart | æ¾ç¤ºç´¯è®¡æåº | å¢ååååæ |
| æ°´æ³¢å¾ | è¿åº¦ç | Liquid Chart | æ¾ç¤ºç¾åæ¯æè¿åº¦ | è¿åº¦å±ç¤ºãå æ¯ |
| è¯äºå¾ | è¯äº | Word Cloud | å±ç¤ºææ¬è¯é¢ | è¯é¢åæãçç¹å±ç¤º |
| å°æç´å¾ | – | Violin Chart | æ¾ç¤ºæ°æ®åå¸å¯åº¦ | åå¸åæ |
| 馿©å¾ | ææ°å¾ | Venn Chart | æ¾ç¤ºéåå ³ç³» | éåäº¤å¹¶å ³ç³» |
| ç©éµæ å¾ | æ ç¶å¾ | Treemap | æ¾ç¤ºå±çº§æ°æ®å æ¯ | å±çº§å æ¯ãç»æåæ |
| æ¡åºå¾ | – | Sankey Chart | å±ç¤ºæµéæµå | æµååæ |
| è¡¨æ ¼ | æ°æ®è¡¨ | Table | å±ç¤ºè¯¦ç»æ°æ®æç» | æ°æ®å±ç¤ºãæ¥æ¾ |
| æ»ç»æè¦ | – | Summary | ææ¬æ»ç»å 容 | å 容æ»ç» |
GPT-Vis Syntax
GPT-Vis 使ç¨ç®æ´çç±» Markdown è¯æ³æ¥æè¿°å¾è¡¨é ç½®ï¼ä½¿ AI æ´å®¹æçæãåºæ¬ç»æå¦ä¸ï¼
vis [chart-type]
data
- [field1] [value1]
[field2] [value2]
[optional-property] [value]
Syntax ç¹ç¹
- ç®æ´æè¯»: ç±» Markdown ç缩è¿è¯æ³ï¼æäº AI çæ
- æµå¼å好: æ¯æé token 渲æï¼éåæµå¼è¾åº
- å®¹éæ§å¼º: è½ä¼é å¤çä¸å®æ´æ°æ®
- ç±»åå®å ¨: æ¯ä¸ªå¾è¡¨ææç¡®çæ°æ®ç»æ
Framework Integration
GPT-Vis æ¯æå¨ HTMLãReact å Vue ä¸ä½¿ç¨ï¼æä¾ç»ä¸ç API æ¥æ¸²æ Syntaxã
HTML / Vanilla JavaScript
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/@antv/gpt-vis/dist/umd/index.min.js"></script>
</head>
<body>
<div id="container"></div>
<script>
const gptVis = new GPTVis.GPTVis({
container: '#container',
width: 600,
height: 400,
});
const visSyntax = `
vis line
data
- time 2020
value 100
- time 2021
value 120
- time 2022
value 150
title 年度è¶å¿
`;
gptVis.render(visSyntax);
</script>
</body>
</html>
React
import { GPTVis } from '@antv/gpt-vis';
import { useEffect, useRef } from 'react';
function ChartComponent({ visSyntax }) {
const containerRef = useRef(null);
const gptVisRef = useRef(null);
useEffect(() => {
if (containerRef.current && !gptVisRef.current) {
gptVisRef.current = new GPTVis({
container: containerRef.current,
width: 600,
height: 400,
});
}
}, []);
useEffect(() => {
if (gptVisRef.current && visSyntax) {
gptVisRef.current.render(visSyntax);
}
}, [visSyntax]);
return <div ref={containerRef}></div>;
}
// 使ç¨ç¤ºä¾
const visSyntax = `
vis column
data
- category A产å
value 30
- category B产å
value 50
title 产åéé
`;
<ChartComponent visSyntax={visSyntax} />;
Vue
<template>
<div ref="containerRef"></div>
</template>
<script setup>
import { ref, onMounted, watch } from 'vue';
import { GPTVis } from '@antv/gpt-vis';
const props = defineProps({
visSyntax: String,
});
const containerRef = ref(null);
let gptVis = null;
onMounted(() => {
gptVis = new GPTVis({
container: containerRef.value,
width: 600,
height: 400,
});
if (props.visSyntax) {
gptVis.render(props.visSyntax);
}
});
watch(
() => props.visSyntax,
(newSyntax) => {
if (gptVis && newSyntax) {
gptVis.render(newSyntax);
}
},
);
</script>
<!-- 使ç¨ç¤ºä¾ -->
<ChartComponent :vis-syntax="visSyntax" />
æµå¼æ¸²ææ¯æ
GPT-Vis å¤©ç¶æ¯ææµå¼æ¸²æï¼å¯ä»¥éæ¥æ¥æ¶ AI çæç Syntaxï¼
import { GPTVis, isVisSyntax } from '@antv/gpt-vis';
const gptVis = new GPTVis({
container: '#container',
width: 600,
height: 400,
});
let buffer = '';
// å½ AI æµå¼è¾åº token æ¶
function onToken(token) {
buffer += token;
if (isVisSyntax(buffer)) {
gptVis.render(buffer);
}
}
Syntax Examples
Line Chart (æçº¿å¾)
éç¨åºæ¯: æ¶é´åºåæ°æ®ï¼å±ç¤ºè¶å¿åå
Syntax 示ä¾:
vis line
data
- time 2020
value 100
- time 2021
value 120
- time 2022
value 150
title å¹´åº¦æ°æ®è¶å¿
详ç»ç¨æ³åè: references/line.md
Column Chart (æ±å½¢å¾)
éç¨åºæ¯: åç±»æ°æ®æ¯è¾
Syntax 示ä¾:
vis column
data
- category A产å
value 30
- category B产å
value 50
- category C产å
value 20
title 产åéé对æ¯
详ç»ç¨æ³åè: references/column.md
Bar Chart (æ¡å½¢å¾)
éç¨åºæ¯: åç±»æ°æ®æ¯è¾ï¼æ ç¾è¾é¿
Syntax 示ä¾:
vis bar
data
- category 产åç±»å«A
value 30
- category 产åç±»å«B
value 50
- category 产åç±»å«C
value 20
详ç»ç¨æ³åè: references/bar.md
Pie Chart (饼å¾)
éç¨åºæ¯: æ¾ç¤ºé¨åå æ´ä½çæ¯ä¾
Syntax 示ä¾:
vis pie
data
- category ç±»å«A
value 30
- category ç±»å«B
value 50
- category ç±»å«C
value 20
详ç»ç¨æ³åè: references/pie.md
Area Chart (é¢ç§¯å¾)
éç¨åºæ¯: æ¶é´åºåï¼å¼ºè°è¶å¿åæ»é
Syntax 示ä¾:
vis area
data
- time 2020
value 100
- time 2021
value 120
- time 2022
value 150
详ç»ç¨æ³åè: references/area.md
Scatter Chart (æ£ç¹å¾)
éç¨åºæ¯: æ¾ç¤ºä¸¤ä¸ªåéçå ³ç³»
Syntax 示ä¾:
vis scatter
data
- x 1
y 2
- x 2
y 4
- x 3
y 3
详ç»ç¨æ³åè: references/scatter.md
Dual-Axes Chart (åè½´å¾)
éç¨åºæ¯: åæ¶å±ç¤ºä¸¤ä¸ªä¸åéçº§çæ°æ®
Syntax 示ä¾:
vis dual-axes
data
- category 1æ
value 100
count 10
- category 2æ
value 120
count 15
- category 3æ
value 150
count 12
详ç»ç¨æ³åè: references/dual-axes.md
Histogram (ç´æ¹å¾)
éç¨åºæ¯: æ¾ç¤ºæ°æ®åå¸
Syntax 示ä¾:
vis histogram
data
- value 10
- value 12
- value 15
- value 18
- value 20
详ç»ç¨æ³åè: references/histogram.md
Boxplot (箱线å¾)
éç¨åºæ¯: æ¾ç¤ºæ°æ®åå¸åå¼å¸¸å¼
Syntax 示ä¾:
vis boxplot
data
- category A
value 10
- category A
value 15
- category A
value 20
- category B
value 12
- category B
value 18
详ç»ç¨æ³åè: references/boxplot.md
Radar Chart (é·è¾¾å¾)
éç¨åºæ¯: å¤ç»´åº¦æ°æ®å¯¹æ¯
Syntax 示ä¾:
vis radar
data
- dimension 维度1
value 80
- dimension 维度2
value 90
- dimension 维度3
value 70
详ç»ç¨æ³åè: references/radar.md
Funnel Chart (æ¼æå¾)
éç¨åºæ¯: å±ç¤ºæµç¨è½¬åç
Syntax 示ä¾:
vis funnel
data
- stage 访é®
value 1000
- stage 注å
value 500
- stage è´ä¹°
value 100
详ç»ç¨æ³åè: references/funnel.md
Waterfall Chart (çå¸å¾)
éç¨åºæ¯: æ¾ç¤ºç´¯è®¡æåº
Syntax 示ä¾:
vis waterfall
data
- category åå§
value 100
- category å¢å
value 50
- category åå°
value -30
详ç»ç¨æ³åè: references/waterfall.md
Liquid Chart (æ°´æ³¢å¾)
éç¨åºæ¯: æ¾ç¤ºç¾åæ¯æè¿åº¦
Syntax 示ä¾:
vis liquid
data
- value 0.65
详ç»ç¨æ³åè: references/liquid.md
Word Cloud (è¯äºå¾)
éç¨åºæ¯: å±ç¤ºææ¬è¯é¢
Syntax 示ä¾:
vis word-cloud
data
- word æ°æ®
value 100
- word å¯è§å
value 80
- word å¾è¡¨
value 60
详ç»ç¨æ³åè: references/word-cloud.md
Violin Chart (å°æç´å¾)
éç¨åºæ¯: æ¾ç¤ºæ°æ®åå¸å¯åº¦
Syntax 示ä¾:
vis violin
data
- category A
value 10
- category A
value 15
- category A
value 20
详ç»ç¨æ³åè: references/violin.md
Venn Chart (馿©å¾)
éç¨åºæ¯: æ¾ç¤ºéåå ³ç³»
Syntax 示ä¾:
vis venn
data
- sets A
size 10
- sets B
size 8
- sets A,B
size 3
详ç»ç¨æ³åè: references/venn.md
Treemap (ç©éµæ å¾)
éç¨åºæ¯: æ¾ç¤ºå±çº§æ°æ®å æ¯
Syntax 示ä¾:
vis treemap
data
- category åç±»A
value 30
- category åç±»B
value 50
- category åç±»C
value 20
详ç»ç¨æ³åè: references/treemap.md
Sankey Chart (æ¡åºå¾)
éç¨åºæ¯: å±ç¤ºæµéæµå
Syntax 示ä¾:
vis sankey
data
- source A
target B
value 10
- source B
target C
value 5
- source A
target C
value 5
详ç»ç¨æ³åè: references/sankey.md
Table (è¡¨æ ¼)
éç¨åºæ¯: å±ç¤ºè¯¦ç»æ°æ®æç»
Syntax 示ä¾:
vis table
data
- å§å å¼ ä¸
å¹´é¾ 25
åå¸ å京
- å§å æå
å¹´é¾ 30
åå¸ ä¸æµ·
详ç»ç¨æ³åè: references/table.md
Summary (æ»ç»æè¦)
éç¨åºæ¯: æ°æ®æ¥åçæãæ´å¯ç»è®ºåç°ãåäºæ§æ°æ®å±ç¤º
Syntax 示ä¾:
# Q4 éå®åææ¥å
## æ ¸å¿ææ
[2024 å¹´ Q4](time_desc)ï¼å
¬å¸[éå®é¢](metric_name)è¾¾å°[Â¥523 ä¸](metric_value, origin=5230000)ï¼
è¾ä¸å£åº¦[å¢é¿ 15.2%](ratio_value, origin=0.152, assessment="positive")ã
## å
³é®åç°
- [æ°å®¢æ·æ°](metric_name)ï¼[1,234](metric_value, origin=1234)ï¼ç¯æ¯å¢é¿[8.3%](ratio_value, origin=0.083)
- [客æ·çåç](metric_name)ï¼[89.5%](ratio_value, origin=0.895)
- [å¹³å订åéé¢](metric_name)ï¼[Â¥4,567](metric_value, origin=4567)
å
¶ä¸ï¼[çº¿ä¸æ¸ é](dim_value)è´¡ç®äº[68%](contribute_ratio, origin=0.68)çéå®é¢ã
详ç»ç¨æ³åè: references/summary.md
Best Practices
-
éæ©åéçå¾è¡¨ç±»å
- æ¶é´åºåä¼å ä½¿ç¨æçº¿å¾æé¢ç§¯å¾
- åç±»æ¯è¾ä¼å ä½¿ç¨æ±å½¢å¾ææ¡å½¢å¾
- å æ¯åæä½¿ç¨é¥¼å¾ï¼åç±»ä¸è¶ è¿ 5 个ï¼
- å¤ç»´å¯¹æ¯ä½¿ç¨é·è¾¾å¾
-
æ°æ®è¦æ±
- ç¡®ä¿æ°æ®å段ä¸å¾è¡¨ç±»åå¹é
- æ°å¼åæ®µå¿ é¡»æ¯æ°åç±»å
- åç±»åæ®µå¿ é¡»æ¯ææ¬ç±»å
-
é¿å 误ç¨
- ä¸è¦ç¨é¥¼å¾å±ç¤ºè¶å¿
- ä¸è¦ç¨æçº¿å¾å±ç¤ºæ åºåç±»
- ä¸è¦å¨æ°æ®éè¿å¤§æ¶ä½¿ç¨é¥¼å¾
References
详ç»çå¾è¡¨ç¥è¯ãä½¿ç¨æ¹æ³ãæ°æ®è¦æ±åæ´å¤ç¤ºä¾ï¼è¯·åè references/ ç®å½ä¸çåå¾è¡¨ææ¡£ãæ¯ä¸ªææ¡£å
å«ï¼
- å¾è¡¨å±æ§ååºç¡æ¦å¿µ
- éç¨åä¸éç¨åºæ¯
- 详ç»çæ°æ®è¦æ±åç±»åå®ä¹
- å¤ä¸ªå®é 使ç¨ç¤ºä¾