MCPInstall

antv-gpt-vis

Recommend and generate appropriate data visualization charts using the GPT-Vis library. Supports two output modes — (1) Syntax mode, which generates Syntax or JSON configurations, and (2) Code mode, which generates complete runnable code. Supports 26 chart types.

Installs
83
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/antvis/chart-visualization-skills --skill antv-gpt-vis
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads antv-gpt-vis automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

GPT-Vis Chart Visualization Skill

GPT-Vis is an AI-native visualization library designed for the LLM era. It uses a framework-agnostic architecture, supports 26 chart types, and enables LLMs to easily generate high-quality visualizations through a simple, natural syntax.

Steps

  1. Intent recognition: Select the chart type based on user intent and data characteristics
  2. Determine output mode: Choose Syntax mode or Code mode based on context
  3. Generate output: Produce content in the selected mode

Supported Chart Types

type valueUse case
lineTime series trends
areaTime series trends + totals
columnCategorical data comparison
barCategorical comparison (long labels)
piePart-to-whole proportions
scatterRelationship between two variables
dual-axesComparison of data at different scales
histogramFrequency distribution of continuous values
boxplotData distribution and outliers
violinData distribution density
radarMulti-dimensional comparison
funnelProcess conversion rates
waterfallCumulative increases and decreases
liquidPercentage / progress
word-cloudWord frequency display
vennSet intersection/union relationships
treemapHierarchical data proportions
sankeyFlow and direction of quantities
flow-diagramProcess steps
mindmapHierarchical knowledge organization
indented-treeTree node hierarchy / directories
network-graphRelationships between entities
organization-chartOrganizational hierarchy
fishbone-diagramRoot cause analysis
tableTabular data display
summaryContent summary

Output Modes

Mode 1: Syntax Mode (Syntax / JSON)

Used for LLM application integration scenarios. Generates chart configurations consumed by GPTVis.render(). Supports two formats:

  • Syntax format: Markdown-like indentation syntax, suitable for streaming output (renders in real time as the LLM generates tokens)
  • JSON format: Standard JSON object, suitable for structured API calls

Both formats are equivalent and can be passed directly to GPTVis.render().

Mode 2: Code Mode

Used when the user needs complete runnable code. Generates output including installation instructions and full code.

GPTVis API

GPTVis is the unified entry class of the library, responsible for creating, rendering, and destroying charts.

Constructor

new GPTVis(options: VisualizationOptions)

VisualizationOptions:

ParameterTypeRequiredDefaultDescription
containerstring | HTMLElementYes—CSS selector or DOM element
widthnumberNo—Chart width (px)
heightnumberNo—Chart height (px)
theme'default' | 'light' | 'dark' | 'academy'No'light'Theme
wrapperbooleanNofalseWhether to show the outer UI container (tabs, download, copy)
localestringNo'zh-CN'Language of the text inside the wrapper

Methods

render(config: string | object): void

Renders a chart. Accepts two kinds of input:

  • Syntax string: Text starting with vis [type], automatically parsed into a configuration object
  • JSON configuration object: An object containing a type field
  • Plain text: Strings not starting with vis are rendered as the summary type

Calling render() multiple times automatically destroys the previous chart before rendering the new one.

destroy(): void

Destroys the current chart instance and releases resources.

Syntax Mode: JSON Format

Directly output a JSON object conforming to the chart's TypeScript type; GPTVis.render() can consume it directly.

JSON Example

{
  "type": "column",
  "data": [
    { "category": "Product A", "value": 30, "group": "Online" },
    { "category": "Product B", "value": 50, "group": "Online" }
  ],
  "title": "Product Sales Comparison",
  "axisXTitle": "Product",
  "axisYTitle": "Sales (10k)",
  "stack": true,
  "theme": "academy",
  "style": {
    "palette": ["#5B8FF9", "#61DDAA"]
  }
}

Syntax Mode: Syntax Format

Markdown-like indentation syntax that supports streaming rendering. The first line must be vis [type].

Syntax Rules

Basic properties — key value, one per line:

title Annual Trend
theme dark

Object arrays — under data, each item starts with - , with sub-fields indented:

{ data: { time: string; value: number; }[]; }

Corresponds to:

data
  - time 2020
    value 100
  - time 2021
    value 120

Plain value arrays — each item starts with - :

{ data: number[] }

Corresponds to:

data
  - 10
  - 20

String values containing spaces — wrap in quotes (single or double); quotes can be omitted when there are no spaces:

categories
  - "North America"
  - 'Southeast Asia'
  - Europe

Nested objects — the object name occupies its own line, with sub-properties indented:

{ style?: { backgroundColor?: string; palette?: string[] } }

Corresponds to:

style
  backgroundColor #f0f2f5
  palette
    - #5B8FF9
    - #61DDAA

Recursive trees — the children array is indented with - :

type TreeData = { name: string; children?: TreeData[] };
{ data: TreeData; }

Corresponds to:

data
  name Root
  children
    - name Child A
      children
        - name Grandchild
    - name Child B

Complete Syntax Example

vis column
data
  - category Product A
    value 30
    group Online
  - category Product B
    value 50
    group Online
title Product Sales Comparison
axisXTitle Product
axisYTitle Sales (10k)
stack true
theme academy
style
  palette
    - #5B8FF9
    - #61DDAA

Markdown Syntax

When the output is in Markdown format, use GPT-Vis as the language tag of the fenced code block, and write the complete Syntax format in the content area:

```GPT-Vis
vis line
data
  - time 2020
    value 100
```

Format:

```GPT-Vis
<complete Syntax content, first line: vis <chart-type>>
```

Syntax rules:

  • The language tag is fixed as GPT-Vis
  • The content area follows the Syntax format rules, and the first line must contain vis <chart-type> (see the full list in Supported Chart Types above)
  • The code block is converted by the Markdown plugin into <code class="language-gpt-vis"> and rendered on the browser side

Note: In Markdown mode, the content area must include the first line vis <type>, consistent with the plain Syntax mode format.

Code Mode

Generate complete runnable code based on the target framework.

Installation

NPM:

npm install @antv/gpt-vis
import { GPTVis } from '@antv/gpt-vis';

CDN:

<script src="https://unpkg.com/@antv/gpt-vis/dist/umd/index.min.js"></script>

After loading via CDN, access the main class through GPTVis.GPTVis.

Complete HTML Example

<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,
      });

      gptVis.render(`
vis line
data
  - time 2020
    value 100
  - time 2021
    value 120
title Annual Trend
`);
    </script>
  </body>
</html>

Chart Type Configurations

Common Configuration

All charts include the following fields, which are omitted from the individual chart type definitions below. Each section heading is the type value (e.g. line, column), corresponding to the type column in the chart type table above.

{ type: string; title?: string; theme?: 'default' | 'light' | 'dark' | 'academy'; style?: { backgroundColor?: string; palette?: string[] } }

line / area

{ data: { time: string | number; value: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string; stack?: boolean; style?: { lineWidth?: number } }

stack is only supported by area.

column / bar

{ data: { category: string; value: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string; stack?: boolean; group?: boolean }

pie

Values must not be percentage numbers.

{ data: { category: string; value: number }[]; innerRadius?: number }

Set innerRadius to 0.6 to turn it into a donut chart.

scatter

{ data: { x: number; y: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string }

dual-axes

{ categories: string[]; series: { type: 'line' | 'column'; data: number[]; axisYTitle?: string }[]; axisXTitle?: string; style?: { startAtZero?: boolean } }

histogram

{ data: number[]; binNumber?: number; axisXTitle?: string; axisYTitle?: string }

boxplot / violin

Multiple data points are required for the same category to show distribution.

{ data: { category: string; value: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string; style?: { startAtZero?: boolean } }

radar

{ data: { name: string; value: number; group?: string }[]; align?: boolean }

align: whether to align the scales of all dimensions. Defaults to false (each axis scales independently); when true, all axes share the same maximum value, suitable for comparing absolute values across multiple series.

funnel

{ data: { category: string; value: number; }[]; }

waterfall

Values can be negative to indicate decrease. palette is a color array in the order [positive color, negative color, total color].

{ data: { category: string; value: number }[]; axisXTitle?: string; axisYTitle?: string; style?: { palette?: string[] } }

liquid

percent ranges from 0 to 1.

{ percent: number; shape?: 'rect' | 'circle' | 'pin' | 'triangle' }

word-cloud

{ data: { text: string; value: number; }[]; }

venn

Intersections use commas to separate set identifiers: sets: "A,B". label is used to display the name of the corresponding set on the chart.

{ data: { sets: string | string[]; value: number; label?: string }[] }

treemap

type TreeNode = { name: string; value: number; children?: TreeNode[] };
{ data: TreeNode[] }

sankey

{ data: { source: string; target: string; value: number }[]; nodeAlign?: 'left' | 'center' | 'right' | 'justify' }

flow-diagram / network-graph

source/target reference node name values.

type GraphData = { nodes: { name: string }[]; edges: { source: string; target: string; name?: string }[] };

// flow-diagram
{ data: GraphData }

// network-graph
{ data: GraphData; layout?: 'force' | 'circular' | 'grid' | 'radial' | 'concentric' | 'dagre' }

mindmap / indented-tree / organization-chart

type TreeData = { name: string; children?: TreeData[] };

// mindmap
{ data: TreeData; direction?: 'H' | 'LR' | 'RL' }

// indented-tree
{ data: TreeData; direction?: 'LR' | 'RL' | 'H' }

// organization-chart
type OrganizationChartData = {
  name: string;
  description?: string;
  children?: OrganizationChartData[];
};

{ data: OrganizationChartData }

mindmap defaults to 'H'; indented-tree defaults to 'LR'.

fishbone-diagram

type FishboneNode = { name: string; children?: FishboneNode[] };
{ data: FishboneNode; style?: { texture?: 'rough' | 'default' } }

texture: 'rough' produces a hand-drawn style.

table

{ data: Record<string, string | number>[]; }

summary

summary is completely different from other chart types: it does not use Syntax/JSON configuration, but instead uses T8 syntax (Markdown + semantic annotations).

⚠️ Before generating a summary, you must: first read references/summary.md to get the T8 syntax rules, the complete entity type list, attribute field definitions, generation requirements, and examples, and only then generate the content. Skipping this step will cause syntax errors.

Best Practices

  1. Keep pie charts to no more than 5 categories; merge the rest into "Other" or switch to a bar chart
  2. Do not use pie charts for trends, and do not use line charts for unordered categories
  3. Value fields must be numeric; category fields must be text
  4. Distributions of continuous values (e.g. salaries, scores, ages) must use histogram
  5. Multi-dimensional field mapping: when there are two categorical dimensions, write the x-axis dimension as time/category and the other as group
  6. In Syntax mode, prefer the Syntax format (streaming-friendly)
  7. In Code mode, default to the HTML + CDN approach (zero installation); use the npm approach only when the user specifies a framework

FAQ

What does the antv-gpt-vis skill do?

Recommend and generate appropriate data visualization charts using the GPT-Vis library. Supports two output modes — (1) Syntax mode, which generates Syntax or JSON configurations, and (2) Code mode, which generates complete runnable code. Supports 26 chart types.

How do I install antv-gpt-vis?

Run npx skills add https://github.com/antvis/chart-visualization-skills --skill antv-gpt-vis in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/antv-gpt-vis/ (personal) or .claude/skills/antv-gpt-vis/ (project).

Which AI agents can use antv-gpt-vis?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is antv-gpt-vis safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains antv-gpt-vis?

It is published by antvis in antvis/chart-visualization-skills. It has 83 recorded installs.

More from antvis/chart-visualization-skills

View all →

chart-visualization

antvis/chart-visualization-skills

将数据可视化为图表。当用户需要生成柱状图、折线图、饼图、散点图、雷达图、桑基图、思维导图、流程图等图表时调用此技能,通过 curl 工具调用 AntV API 生成图表图片

Backend & APIs6.4K installs

infographic-creator

antvis/chart-visualization-skills

Create beautiful infographics based on given text content. Use when users request to create infographics.

2.3K installs

icon-retrieval

antvis/chart-visualization-skills

Search icons through HTTP API and retrieve SVG strings with curl.

Backend & APIs1.6K installs

narrative-text-visualization

antvis/chart-visualization-skills

Generate structured narrative text visualizations from data using T8 Syntax. Use when users want to create data interpretation reports, summaries, or structured articles with semantic entity annotations. T8 is designed for unstructured data visualization where T stands for Text and 8 represents a byte of 8 bits, symbolizing deep insights beneath the text.

1.6K installs

antv-g2-chart

antvis/chart-visualization-skills

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.

antv-skills-maintainer

antvis/chart-visualization-skills

Automatically sync documentation and configuration after any skill is added or updated. Triggers on every AI code execution to keep README Available Skills and .claude-plugin/marketplace.json up to date.

Docs & Writing1.2K installs

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs