mcpField
A
antv-gpt-vis

antv-gpt-vis

github.com/antvisデータ・データベース51685 回インストール5 週間前に更新
リポジトリ

antv-gpt-vis について

GPT-Vis Chart Visualization Skillは、LLMが意図とデータに応じてチャートを選び、設定や実行可能なコードを生成するためのスキルです。26種類のチャートに対応し、構文、JSON、コードの出力モードを備えています。

主な機能

  1. 0126種類のチャート
  2. 02意図とデータに基づくチャート選択
  3. 03構文・JSON設定の生成
  4. 04ストリーミング向け構文出力
  5. 05実行可能なコード生成

活用シーン

  1. 01データからチャート設定を生成
  2. 02LLMアプリ向けのストリーミング構文の作成
  3. 03実行可能な可視化コードの作成
  4. 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 が高品質な可視化を簡単に生成できます。

手順

  1. 意図の認識:ユーザーの意図とデータの特性に基づいてチャートの種類を選択します
  2. 出力モードの決定:状況に基づいて Syntax モードまたは Code モードを選択します
  3. 出力の生成:選択したモードでコンテンツを生成します

対応するチャートの種類

type value用途
line時系列の傾向
area時系列の傾向と合計
columnカテゴリ別データの比較
barカテゴリ別の比較(長いラベル)
pie全体に対する部分の割合
scatter2 つの変数間の関係
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:

パラメーター型必須デフォルト説明
containerstring | HTMLElementはい—CSS セレクターまたは DOM 要素
widthnumberいいえ—グラフの幅(px)
heightnumberいいえ—グラフの高さ(px)
theme'default' | 'light' | 'dark' | 'academy'いいえ'light'テーマ
wrapperbooleanいいえfalse外側の UI コンテナー(タブ、ダウンロード、コピー)を表示するかどうか
localestringいいえ'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 構文のルール、エンティティタイプの全一覧、属性フィールドの定義、生成要件、例を確認してから、コンテンツを生成してください。この手順を省略すると、構文エラーが発生します。

ベストプラクティス

  1. 円グラフのカテゴリ数は 5 以下にし、残りは「その他」にまとめるか、棒グラフに切り替えてください
  2. 傾向の表示に円グラフを使わず、順序のないカテゴリに折れ線グラフを使わないでください
  3. 値のフィールドは数値、カテゴリのフィールドはテキストにしてください
  4. 連続値(例:給与、スコア、年齢)の分布には、ヒストグラムを使用してください
  5. 多次元のフィールドマッピング:カテゴリの次元が 2 つある場合、x 軸の次元には time/category を、もう一方には group を指定してください
  6. Syntax モードでは、Syntax 形式を優先してください(ストリーミングに適しています)
  7. Code モードでは、HTML + CDN 方式をデフォルトとしてください(インストール不要)。npm 方式は、ユーザーがフレームワークを指定した場合にのみ使用してください

コメント