Matplotlib
zLanqing/codex-claude-academic-skills
Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.
Recommend and generate appropriate data visualization charts using the GPT-Vis library.
$ npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install antvis/chart-visualization-skills antv-gpt-vis --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/antvis/chart-visualization-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/antv-gpt-vis .claude/skills/antv-gpt-vis && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "antv-gpt-vis" agent skill from https://github.com/antvis/chart-visualization-skills/tree/master/skills/antv-gpt-vis into .claude/skills/antv-gpt-vis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "antv-gpt-vis", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/antvis/chart-visualization-skills/tree/master/skills/antv-gpt-visType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install antvis/chart-visualization-skills antv-gpt-vis --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/antvis/chart-visualization-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/antv-gpt-vis .agents/skills/antv-gpt-vis && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "antv-gpt-vis" agent skill from https://github.com/antvis/chart-visualization-skills/tree/master/skills/antv-gpt-vis into .agents/skills/antv-gpt-vis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "antv-gpt-vis", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install antvis/chart-visualization-skills antv-gpt-vis --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/antvis/chart-visualization-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/antv-gpt-vis .cursor/skills/antv-gpt-vis && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "antv-gpt-vis" agent skill from https://github.com/antvis/chart-visualization-skills/tree/master/skills/antv-gpt-vis into .cursor/skills/antv-gpt-vis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "antv-gpt-vis", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/antvis/chart-visualization-skills.git --path skills/antv-gpt-vis--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install antvis/chart-visualization-skills antv-gpt-vis --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/antvis/chart-visualization-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/antv-gpt-vis .gemini/skills/antv-gpt-vis && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "antv-gpt-vis" agent skill from https://github.com/antvis/chart-visualization-skills/tree/master/skills/antv-gpt-vis into .gemini/skills/antv-gpt-vis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "antv-gpt-vis", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install antvis/chart-visualization-skills antv-gpt-visInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/antvis/chart-visualization-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/antv-gpt-vis .github/skills/antv-gpt-vis && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "antv-gpt-vis" agent skill from https://github.com/antvis/chart-visualization-skills/tree/master/skills/antv-gpt-vis into .github/skills/antv-gpt-vis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "antv-gpt-vis", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install antvis/chart-visualization-skills antv-gpt-vis --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/antvis/chart-visualization-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/antv-gpt-vis .opencode/skills/antv-gpt-vis && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "antv-gpt-vis" agent skill from https://github.com/antvis/chart-visualization-skills/tree/master/skills/antv-gpt-vis into .opencode/skills/antv-gpt-vis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "antv-gpt-vis", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
antv-gpt-visRecommend and generate appropriate data visualization charts using the GPT-Vis library.
Antv Gpt Vis is an agent skill from antvis/chart-visualization-skills. 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.
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/summary.md`).
It sits in Data & Analytics, covering Data visualization. The repository describes itself as: ⛏️ Turning data into a visual language for better thinking with Skills. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a105fa1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
unpkg.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Antv Gpt Vis loads about 3.7k tokens when it runs, and up to ~5.2k if it reads all its reference files. Until then it costs about 69 tokens; SKILL.md has 1,056 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from antvis/chart-visualization-skills at commit a105fa1, republished under its MIT licence (© antvis). 1,056 words, ~3,658 tokens.
.claude/skills/antv-gpt-vis/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.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.
| type value | Use case |
|---|---|
| line | Time series trends |
| area | Time series trends + totals |
| column | Categorical data comparison |
| bar | Categorical comparison (long labels) |
| pie | Part-to-whole proportions |
| scatter | Relationship between two variables |
| dual-axes | Comparison of data at different scales |
| histogram | Frequency distribution of continuous values |
| boxplot | Data distribution and outliers |
| violin | Data distribution density |
| radar | Multi-dimensional comparison |
| funnel | Process conversion rates |
| waterfall | Cumulative increases and decreases |
| liquid | Percentage / progress |
| word-cloud | Word frequency display |
| venn | Set intersection/union relationships |
| treemap | Hierarchical data proportions |
| sankey | Flow and direction of quantities |
| flow-diagram | Process steps |
| mindmap | Hierarchical knowledge organization |
| indented-tree | Tree node hierarchy / directories |
| network-graph | Relationships between entities |
| organization-chart | Organizational hierarchy |
| fishbone-diagram | Root cause analysis |
| table | Tabular data display |
| summary | Content summary |
Used for LLM application integration scenarios. Generates chart configurations consumed by GPTVis.render(). Supports two formats:
Both formats are equivalent and can be passed directly to GPTVis.render().
Used when the user needs complete runnable code. Generates output including installation instructions and full code.
GPTVis is the unified entry class of the library, responsible for creating, rendering, and destroying charts.
new GPTVis(options: VisualizationOptions)VisualizationOptions:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
container | string | HTMLElement | Yes | — | CSS selector or DOM element |
width | number | No | — | Chart width (px) |
height | number | No | — | Chart height (px) |
theme | 'default' | 'light' | 'dark' | 'academy' | No | 'light' | Theme |
wrapper | boolean | No | false | Whether to show the outer UI container (tabs, download, copy) |
locale | string | No | 'zh-CN' | Language of the text inside the wrapper |
render(config: string | object): voidRenders a chart. Accepts two kinds of input:
vis [type], automatically parsed into a configuration objecttype fieldvis are rendered as the summary typeCalling render() multiple times automatically destroys the previous chart before rendering the new one.
destroy(): voidDestroys the current chart instance and releases resources.
Directly output a JSON object conforming to the chart's TypeScript type; GPTVis.render() can consume it directly.
{
"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-like indentation syntax that supports streaming rendering. The first line must be vis [type].
Basic properties — key value, one per line:
title Annual Trend
theme darkObject 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 120Plain value arrays — each item starts with - :
{ data: number[] }Corresponds to:
data
- 10
- 20String values containing spaces — wrap in quotes (single or double); quotes can be omitted when there are no spaces:
categories
- "North America"
- 'Southeast Asia'
- EuropeNested objects — the object name occupies its own line, with sub-properties indented:
{ style?: { backgroundColor?: string; palette?: string[] } }Corresponds to:
style
backgroundColor #f0f2f5
palette
- #5B8FF9
- #61DDAARecursive 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 Bvis 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
- #61DDAAWhen 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:
GPT-Visvis <chart-type> (see the full list in Supported Chart Types above)<code class="language-gpt-vis"> and rendered on the browser sideNote: In Markdown mode, the content area must include the first line
vis <type>, consistent with the plain Syntax mode format.
Generate complete runnable code based on the target framework.
NPM:
npm install @antv/gpt-visimport { 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.
<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>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[] } }{ data: { time: string | number; value: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string; stack?: boolean; style?: { lineWidth?: number } }stack is only supported by area.
{ data: { category: string; value: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string; stack?: boolean; group?: boolean }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.
{ data: { x: number; y: number; group?: string }[]; axisXTitle?: string; axisYTitle?: string }{ categories: string[]; series: { type: 'line' | 'column'; data: number[]; axisYTitle?: string }[]; axisXTitle?: string; style?: { startAtZero?: boolean } }{ data: number[]; binNumber?: number; axisXTitle?: string; axisYTitle?: string }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 } }{ 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.
{ data: { category: string; value: number; }[]; }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[] } }percent ranges from 0 to 1.
{ percent: number; shape?: 'rect' | 'circle' | 'pin' | 'triangle' }{ data: { text: string; value: number; }[]; }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 }[] }type TreeNode = { name: string; value: number; children?: TreeNode[] };
{ data: TreeNode[] }{ data: { source: string; target: string; value: number }[]; nodeAlign?: 'left' | 'center' | 'right' | 'justify' }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' }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'.
type FishboneNode = { name: string; children?: FishboneNode[] };
{ data: FishboneNode; style?: { texture?: 'rough' | 'default' } }texture: 'rough' produces a hand-drawn style.
{ data: Record<string, string | number>[]; }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.
time/category and the other as group© antvis, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/antv-gpt-vis of antvis/chart-visualization-skills.
Open the folder on GitHubat commit a105fa1
Antv Gpt Vis next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Antv Gpt Vis this skillantvis/chart-visualization-skills | 506 | — | ~3.7k | Automated safety check: Pass | MIT | |
| MatplotlibzLanqing/codex-claude-academic-skills | 4.7k | 17 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Chart Visualizationbytedance/deer-flow | 84k | 1 repos | ~840 | Automated safety check: Pass | MIT | |
| Scientific Visualizationmims-harvard/OptimusKG | 147 | 19 repos | ~6.3k | Automated safety check: Pass | MIT | |
| SeabornzLanqing/codex-claude-academic-skills | 4.7k | 15 repos | ~4.9k | Automated safety check: Pass | BSD-3-Clause | |
| Plot From DataTrae1ounG/paper-plot-skills | 872 | 1 repos | ~583 | Automated safety check: Pass | None |
zLanqing/codex-claude-academic-skills
Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.
bytedance/deer-flow
Picks a suitable chart type from 26 options for your data, maps the data to that chart's parameters and generates a chart image through a JavaScript script.
mims-harvard/OptimusKG
Create publication figures with matplotlib/seaborn/plotly. An agent skill from mims-harvard/OptimusKG.
zLanqing/codex-claude-academic-skills
Statistical visualization with pandas integration. An agent skill from zLanqing/codex-claude-academic-skills.
Trae1ounG/paper-plot-skills
Generate publication-quality matplotlib figures by selecting a pre-built paper style and substituting user data.
ChenLiu-1996/figures4papers
Covers publication-ready matplotlib figures for academic papers, slides, and reports—bars, trends, scatter, heatmaps, and multi-panel layouts—with this…
antvis/chart-visualization-skills
A skill your agent uses whenever the user wants to create, customize, or troubleshoot G2 v5 chart visualizations.
antvis/chart-visualization-skills
A skill your agent uses whenever the user wants to create, customize, or troubleshoot G6 v5 graph/network visualizations.
antvis/chart-visualization-skills
Create beautiful infographics based on given text content. An agent skill from antvis/chart-visualization-skills.
antvis/chart-visualization-skills
Generate structured narrative text visualizations from data using T8 Syntax.
antvis/chart-visualization-skills
A skill your agent uses whenever the user wants to create, customize, or troubleshoot X6 v3 graph editor diagrams.
antvis/chart-visualization-skills
推荐并生成合适的数据可视化图表,使用 GPT-Vis 库。支持两种输出模式:(1)语法模式——生成 Syntax 或 JSON 配置;(2)代码模式——生成完整的运行代码。支持 26 种图表类型。
Categories
Recommend and generate appropriate data visualization charts using the GPT-Vis library. Antv Gpt Vis is an agent skill from antvis/chart-visualization-skills. Recommend and generate appropriate data visualization charts using the GPT-Vis library.
Antv Gpt Vis fits situations like: tasks that involve Data visualization.
Run `npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a claude-code`. Or copy the skill folder (skills/antv-gpt-vis in antvis/chart-visualization-skills) into .claude/skills/antv-gpt-vis in your project. Claude Code loads it when a task matches its description.
Run `npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a codex`. Or copy the skill folder (skills/antv-gpt-vis in antvis/chart-visualization-skills) into .agents/skills/antv-gpt-vis in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add antvis/chart-visualization-skills --skill antv-gpt-vis -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/antv-gpt-vis, .gemini/skills/antv-gpt-vis, .github/skills/antv-gpt-vis and .opencode/skills/antv-gpt-vis in your project.
Going by SKILL.md and its folder, Antv Gpt Vis needs the command-line tools its instructions call (npm). Our summary lists: Node.js.
SKILL.md names 1 domain. In commands or code: unpkg.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Antv Gpt Vis is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Antv Gpt Vis: Matplotlib (zLanqing/codex-claude-academic-skills, 4.7k stars), Chart Visualization (bytedance/deer-flow, 84k stars), Scientific Visualization (mims-harvard/OptimusKG, 147 stars) and Seaborn (zLanqing/codex-claude-academic-skills, 4.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
antvis (a GitHub organization) maintains it in antvis/chart-visualization-skills, which has 506 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on September 22, 2026.
Source: antvis/chart-visualization-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.