Synthèse automatique
Guide pratique pour construire des visualisations de données interactives en D3.js, avec des exemples de code pour les graphiques courants, les infobulles, le zoom et les transitions.
Points forts
- Fournit un flux de travail complet et réutilisable : dimensions, marges, échelles, axes et liaison de données via join
- Donne des extraits de code prêts à l'emploi pour les graphiques en barres, en ligne et en secteurs
- Couvre l'interactivité (infobulles, zoom/pan) et les transitions, y compris les animations décalées
- Indique explicitement quand préférer une autre bibliothèque (Three.js pour la 3D, Chart.js/Recharts pour des graphiques simples)
Limites
- Annonce les diagrammes de réseau et les visualisations géographiques mais ne fournit aucun exemple pour ces cas
- N'aborde ni le chargement des données (CSV, fetch), ni l'accessibilité, ni le rendu responsive
- Le contenu est rédigé en coréen, ce qui peut gêner certains lecteurs
À utiliser lorsque vous devez créer un graphique ou une visualisation SVG personnalisée et interactive qui dépasse les capacités d'une bibliothèque de graphiques clé en main.
À éviter pour des graphiques standards très simples où Chart.js ou Recharts suffisent, ou pour de la visualisation 3D qui relève de Three.js.
Analyse de sécurité
SûrThe skill contains only D3.js instructional snippets and declares ordinary file-editing tools; it does not instruct destructive commands, credential access, network exfiltration, obfuscated payloads, or safety bypasses. The only minor concern is an educational tooltip pattern that could lead to XSS if used with untrusted data.
- •Tooltip example uses .html(`Value: ${d.value}`) with unescaped data, which could introduce XSS if copied into an app handling untrusted input; prefer textContent or sanitize.
Exemples
Using D3.js, build a bar chart of monthly sales from this JSON array, with a hover tooltip showing the exact value and an animated transition when the data updates.Create a D3 line chart of daily temperatures with a time scale on the x-axis, and add pan and zoom limited to a 0.5x–10x range.I need a custom SVG visualization that Recharts can't do: a scatter plot with staggered entrance animations and a log-scaled y-axis, written in D3 v7.name: d3-viz description: Create interactive data visualizations using D3.js. Use this when creating charts, graphs, network diagrams, geographic visualizations, or custom SVG-based data visualization. allowed-tools: Read, Glob, Grep, Edit, Write license: MIT metadata: author: chrisvoncsefalvay version: "1.0"
D3.js Visualization
D3.js를 사용한 인터랙티브 데이터 시각화 가이드입니다.
When to Use D3.js
적합한 경우:
- 커스텀 차트 (표준 라이브러리에 없는)
- 인터랙티브 탐색 (pan, zoom, brush)
- 네트워크/그래프 시각화
- 지리 시각화 (커스텀 projection)
- 애니메이션 transition
- 출판 품질 그래픽
대안 고려:
- 3D 시각화 → Three.js
- 간단한 차트 → Chart.js, Recharts
Setup
// npm
import * as d3 from 'd3';
// CDN
<script src="https://d3js.org/d3.v7.min.js"></script>
Core Workflow
function drawVisualization(data) {
if (!data || data.length === 0) return;
const svg = d3.select('#chart');
svg.selectAll("*").remove(); // Clear previous
// 1. Dimensions
const width = 800;
const height = 400;
const margin = { top: 20, right: 30, bottom: 40, left: 50 };
const innerWidth = width - margin.left - margin.right;
const innerHeight = height - margin.top - margin.bottom;
// 2. Main group with margins
const g = svg.append("g")
.attr("transform", `translate(${margin.left},${margin.top})`);
// 3. Scales
const xScale = d3.scaleLinear()
.domain([0, d3.max(data, d => d.x)])
.range([0, innerWidth]);
const yScale = d3.scaleLinear()
.domain([0, d3.max(data, d => d.y)])
.range([innerHeight, 0]);
// 4. Axes
g.append("g")
.attr("transform", `translate(0,${innerHeight})`)
.call(d3.axisBottom(xScale));
g.append("g")
.call(d3.axisLeft(yScale));
// 5. Data binding
g.selectAll("circle")
.data(data)
.join("circle")
.attr("cx", d => xScale(d.x))
.attr("cy", d => yScale(d.y))
.attr("r", 5)
.attr("fill", "steelblue");
}
Common Patterns
Bar Chart
const xScale = d3.scaleBand()
.domain(data.map(d => d.category))
.range([0, innerWidth])
.padding(0.1);
g.selectAll("rect")
.data(data)
.join("rect")
.attr("x", d => xScale(d.category))
.attr("y", d => yScale(d.value))
.attr("width", xScale.bandwidth())
.attr("height", d => innerHeight - yScale(d.value))
.attr("fill", "steelblue");
Line Chart
const line = d3.line()
.x(d => xScale(d.date))
.y(d => yScale(d.value))
.curve(d3.curveMonotoneX);
g.append("path")
.datum(data)
.attr("fill", "none")
.attr("stroke", "steelblue")
.attr("stroke-width", 2)
.attr("d", line);
Pie Chart
const pie = d3.pie().value(d => d.value);
const arc = d3.arc()
.innerRadius(0)
.outerRadius(Math.min(width, height) / 2 - 20);
g.selectAll("path")
.data(pie(data))
.join("path")
.attr("d", arc)
.attr("fill", (d, i) => d3.schemeCategory10[i]);
Interactivity
Tooltips
const tooltip = d3.select("body").append("div")
.attr("class", "tooltip")
.style("visibility", "hidden");
circles
.on("mouseover", (event, d) => {
tooltip.style("visibility", "visible")
.html(`Value: ${d.value}`);
})
.on("mousemove", (event) => {
tooltip
.style("top", (event.pageY - 10) + "px")
.style("left", (event.pageX + 10) + "px");
})
.on("mouseout", () => {
tooltip.style("visibility", "hidden");
});
Zoom & Pan
const zoom = d3.zoom()
.scaleExtent([0.5, 10])
.on("zoom", (event) => {
g.attr("transform", event.transform);
});
svg.call(zoom);
Transitions
// Basic
circles.transition()
.duration(750)
.attr("r", 10);
// Staggered
circles.transition()
.delay((d, i) => i * 50)
.duration(500)
.attr("cy", d => yScale(d.value));
Scales Reference
| Scale Type | Use Case |
|------------|----------|
| scaleLinear | 연속 수치 |
| scaleLog | 지수 데이터 |
| scaleTime | 시간/날짜 |
| scaleBand | Bar chart 카테고리 |
| scaleOrdinal | 색상 매핑 |
| scaleSequential | 연속 색상 |
Color Schemes
// Categorical
d3.schemeCategory10 // 10 colors
d3.schemeTableau10 // Tableau 10
// Sequential
d3.interpolateBlues
d3.interpolateYlOrRd
// Diverging
d3.interpolateRdBu
Best Practices
- Data Validation: null/NaN 체크
- Responsive: ResizeObserver 사용
- Performance: 1000+ 요소 시 Canvas 고려
- Accessibility: ARIA labels 추가
- Clean Up: 이전 렌더링 제거
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/interactive-d3-js-visualization-ms47vopr' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/interactive-d3-js-visualization-ms47vopr/download' --output '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md.part' && mv '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md.part' '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Glob, Grep, Edit, Write
Extrait original : Setup
// npm
import * as d3 from 'd3';
// CDN
<script src="https://d3js.org/d3.v7.min.js"></script>
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md' && test -s '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/d3-viz' && cp -R '.skill-downloads/interactive-d3-js-visualization-ms47vopr' '.claude/skills/d3-viz'Cursor
test -f '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md' && test -s '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/d3-viz' && cp -R '.skill-downloads/interactive-d3-js-visualization-ms47vopr' '.cursor/skills/d3-viz'Codex
test -f '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md' && test -s '.skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/d3-viz' && cp -R '.skill-downloads/interactive-d3-js-visualization-ms47vopr' '.agents/skills/d3-viz'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/interactive-d3-js-visualization-ms47vopr'openskills read 'interactive-d3-js-visualization-ms47vopr'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/interactive-d3-js-visualization-ms47vopr/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Créer des cartes interactives avec kepler.gl
Data & IA
Création de cartes interactives et export HTML autonome avec le package Python keplergl, à partir de données géospatiales (DataFrame, GeoJSON, CSV).
Optimisation de paramètres par agent
Data & IA
Guide d'optimisation de systèmes configurables avec objectif mesurable, via des essais bornés et une recommandation fondée sur des preuves.
Relance des visiteurs ICP
Data & IA
Identifiez les utilisateurs inscrits correspondant au profil client idéal mais qui n'ont pas activé, et rédigez des messages de relance personnalisés pour les réengager.