antv-gpt-vis について
GPT-Vis Chart Visualization Skillは、LLMが意図とデータに応じてチャートを選び、設定や実行可能なコードを生成するためのスキルです。26種類のチャートに対応し、構文、JSON、コードの出力モードを備えています。
主な機能
- 0126種類のチャート
- 02意図とデータに基づくチャート選択
- 03構文・JSON設定の生成
- 04ストリーミング向け構文出力
- 05実行可能なコード生成
活用シーン
- 01データからチャート設定を生成
- 02LLMアプリ向けのストリーミング構文の作成
- 03実行可能な可視化コードの作成
- 04データ比較に適したチャートの選択
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ antvis/ chart-visualization-skills --skill antv-gpt-visインストール後、Claude Code で/antv-gpt-visを入力して読み込まれたか確認します。
同梱ファイルreferences/summary.md
詳細
GPT-Vis チャート可視化スキル
GPT-Vis は、LLM 時代に向けて設計された AI ネイティブな可視化ライブラリです。フレームワークに依存しないアーキテクチャを採用し、26 種類のチャートに対応しています。シンプルで自然な構文を使って、LLM が高品質な可視化を簡単に生成できます。
手順
- 意図の認識:ユーザーの意図とデータの特性に基づいてチャートの種類を選択します
- 出力モードの決定:状況に基づいて Syntax モードまたは Code モードを選択します
- 出力の生成:選択したモードでコンテンツを生成します
対応するチャートの種類
| type value | 用途 |
|---|---|
| line | 時系列の傾向 |
| area | 時系列の傾向と合計 |
| column | カテゴリ別データの比較 |
| bar | カテゴリ別の比較(長いラベル) |
| pie | 全体に対する部分の割合 |
| scatter | 2 つの変数間の関係 |
| dual-axes | スケールの異なるデータの比較 |
| histogram | 連続値の度数分布 |
| boxplot | データ分布と外れ値 |
| violin | データ分布の密度 |
| radar | 多次元の比較 |
| funnel | プロセスのコンバージョン率 |
| waterfall | 累積的な増加と減少 |
| liquid | 割合/進捗 |
| word-cloud | 単語の頻度表示 |
| venn | 集合の共通部分/和集合の関係 |
| treemap | 階層データの割合 |
| sankey | 数量のフローと方向 |
| flow-diagram | プロセスの手順 |
| mindmap | 階層的なナレッジの整理 |
| indented-tree | ツリーノードの階層/ディレクトリ |
| network-graph | エンティティ間の関係 |
| organization-chart | 組織の階層 |
| fishbone-diagram | 根本原因分析 |
| table | 表形式のデータ表示 |
| summary | コンテンツの要約 |
出力モード
モード 1:Syntax モード(Syntax/JSON)
LLM アプリケーションとの統合に使用します。GPTVis.render() が受け取るチャート設定を生成します。次の 2 つの形式に対応しています。
- Syntax 形式:Markdown に似たインデント構文で、ストリーミング出力に適しています(LLM がトークンを生成するのに合わせてリアルタイムに描画されます)
- JSON 形式:標準的な JSON オブジェクトで、構造化された API 呼び出しに適しています
どちらの形式も同等で、そのまま GPTVis.render() に渡すことができます。
モード 2:Code モード
ユーザーが実行可能な完全なコードを必要とする場合に使用します。インストール手順と完全なコードを含む出力を生成します。
GPTVis API
GPTVis はライブラリの統一エントリークラスであり、チャートの作成、描画、破棄を担います。
コンストラクター
new GPTVis(options: VisualizationOptions)
VisualizationOptions:
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
container | string | HTMLElement | はい | — | CSS セレクターまたは DOM 要素 |
width | number | いいえ | — | グラフの幅(px) |
height | number | いいえ | — | グラフの高さ(px) |
theme | 'default' | 'light' | 'dark' | 'academy' | いいえ | 'light' | テーマ |
wrapper | boolean | いいえ | false | 外側の UI コンテナー(タブ、ダウンロード、コピー)を表示するかどうか |
locale | string | いいえ | 'zh-CN' | ラッパー内のテキストの言語 |
メソッド
render(config: string | object): void
グラフを描画します。次の 2 種類の入力を受け付けます。
- 構文文字列:
vis [type]で始まるテキストで、設定オブジェクトに自動的に解析されます - JSON 設定オブジェクト:
typeフィールドを含むオブジェクト - プレーンテキスト:
visで始まらない文字列は、summary タイプとして描画されます
render() を複数回呼び出すと、新しいグラフの描画前に以前のグラフが自動的に破棄されます。
destroy(): void
現在のグラフインスタンスを破棄し、リソースを解放します。
構文モード:JSON 形式
グラフの TypeScript 型に準拠した JSON オブジェクトを直接出力します。GPTVis.render() でそのまま使用できます。
JSON の例
{
"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"]
}
}
構文モード:構文形式
ストリーミング描画に対応した、Markdown のようなインデント構文です。最初の行は vis [type] である必要があります。
構文ルール
基本プロパティ — key value の形式で、1 行につき 1 つ記述します。
title Annual Trend
theme dark
オブジェクト配列 — data の下で、各項目を - で始め、サブフィールドをインデントします。
{ data: { time: string; value: number; }[]; }
対応する形式:
data
- time 2020
value 100
- time 2021
value 120
プレーンな値の配列 — 各項目を - で始めます。
{ data: number[] }
対応する形式:
data
- 10
- 20
スペースを含む文字列値 — シングルクォートまたはダブルクォートで囲みます。スペースがない場合は、クォートを省略できます。
categories
- "North America"
- 'Southeast Asia'
- Europe
ネストされたオブジェクト — オブジェクト名を独立した行に記述し、サブプロパティをインデントします。
{ style?: { backgroundColor?: string; palette?: string[] } }
対応する形式:
style
backgroundColor #f0f2f5
palette
- #5B8FF9
- #61DDAA
再帰的なツリー — children 配列を - でインデントします。
type TreeData = { name: string; children?: TreeData[] };
{ data: TreeData; }
対応する形式:
data
name Root
children
- name Child A
children
- name Grandchild
- name Child B
構文の完全な例
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 構文
出力が Markdown 形式の場合、フェンス付きコードブロックの言語タグに GPT-Vis を使用し、コンテンツ領域に完全な構文形式を記述します。
```GPT-Vis
vis line
data
- time 2020
value 100
```
形式:
```GPT-Vis
<complete Syntax content, first line: vis <chart-type>>
```
構文ルール:
- 言語タグは
GPT-Vis固定です - コンテンツ領域は構文形式のルールに従い、最初の行に
vis <chart-type>を含める必要があります(一覧については、上記のサポートされているグラフの種類を参照してください) - コードブロックは Markdown プラグインによって
に変換され、ブラウザー側で描画されます
注:Markdown モードでは、コンテンツ領域に構文モードのプレーン形式と同様に、最初の行 vis <type> を必ず含める必要があります。
コードモード
対象のフレームワークに基づいて、実行可能なコード一式を生成します。
インストール
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>
CDN で読み込んだ後、GPTVis.GPTVis を通じてメインクラスにアクセスします。
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,
});
gptVis.render(`
vis line
data
- time 2020
value 100
- time 2021
value 120
title Annual Trend
`);
</script>
</body>
</html>
グラフの種類ごとの設定
共通設定
すべてのチャートには以下のフィールドが含まれます。これらは、以下の個別のチャートタイプ定義では省略されています。各セクションの見出しは type の値(例:line、column)で、上のチャートタイプ表の type 列に対応しています。
{ 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 は area のみでサポートされています。
column / bar
{ data: { category: string; value: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string; stack?: boolean; group?: boolean }
pie
値にパーセンテージの数値を指定してはいけません。
{ data: { category: string; value: number }[]; innerRadius?: number }
innerRadius を 0.6 に設定すると、ドーナツチャートになります。
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
分布を表示するには、同じカテゴリに複数のデータポイントが必要です。
{ 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:すべての次元のスケールを揃えるかどうかを指定します。デフォルトは false(各軸が個別にスケーリング)です。true にすると、すべての軸で最大値が共通になり、複数の系列の絶対値を比較するのに適しています。
funnel
{ data: { category: string; value: number; }[]; }
waterfall
減少を示すために、値に負の数を指定できます。palette は、[正の値の色、負の値の色、合計の色] の順に並べた色の配列です。
{ data: { category: string; value: number }[]; axisXTitle?: string; axisYTitle?: string; style?: { palette?: string[] } }
liquid
percent の範囲は 0~1 です。
{ percent: number; shape?: 'rect' | 'circle' | 'pin' | 'triangle' }
word-cloud
{ data: { text: string; value: number; }[]; }
venn
交差部分では、セット識別子をカンマで区切ります:sets: "A,B"。チャート上に該当するセットの名前を表示するには、label を使用します。
{ 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 は、ノードの name の値を参照します。
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 のデフォルトは 'H'、indented-tree のデフォルトは 'LR' です。
fishbone-diagram
type FishboneNode = { name: string; children?: FishboneNode[] };
{ data: FishboneNode; style?: { texture?: 'rough' | 'default' } }
texture: 'rough' を指定すると、手描き風になります。
table
{ data: Record<string, string | number>[]; }
summary
summary は他のチャートタイプとは大きく異なります。Syntax/JSON 設定は使用せず、代わりに T8 構文(Markdown + 意味注釈)を使用します。
⚠️ summary を生成する前に、必ず references/summary.md を読んで、T8 構文のルール、エンティティタイプの全一覧、属性フィールドの定義、生成要件、例を確認してから、コンテンツを生成してください。この手順を省略すると、構文エラーが発生します。
ベストプラクティス
- 円グラフのカテゴリ数は 5 以下にし、残りは「その他」にまとめるか、棒グラフに切り替えてください
- 傾向の表示に円グラフを使わず、順序のないカテゴリに折れ線グラフを使わないでください
- 値のフィールドは数値、カテゴリのフィールドはテキストにしてください
- 連続値(例:給与、スコア、年齢)の分布には、ヒストグラムを使用してください
- 多次元のフィールドマッピング:カテゴリの次元が 2 つある場合、x 軸の次元には
time/category を、もう一方には group を指定してください
- Syntax モードでは、Syntax 形式を優先してください(ストリーミングに適しています)
- Code モードでは、HTML + CDN 方式をデフォルトとしてください(インストール不要)。npm 方式は、ユーザーがフレームワークを指定した場合にのみ使用してください