用途
d3-viz 技能用于指导用户使用 d3.js 创建复杂、交互式的数据可视化。d3.js(Data-Driven Documents)的核心能力是将数据绑定到 DOM 元素,并对其施加数据驱动的变换,从而对每一个视觉元素进行精确控制,生成自定义的、出版级质量的图形。文档说明这些技术适用于任何 JavaScript 环境,包括原生 JavaScript、React、Vue、Svelte 等框架。
适用场景
资料列出 d3.js 适合以下情况:需要独特视觉编码或布局的自定义可视化;带复杂平移、缩放或刷选行为的交互式探索;网络/图可视化(力导向布局、树图、层次结构、和弦图);使用自定义投影的地理可视化;需要平滑、编排式过渡的可视化;具备细粒度样式控制的出版级图形;标准库中不存在的新颖图表类型。资料同时指出,对于 3D 可视化应考虑改用 Three.js。
核心工作流
-
设置 d3.js:在脚本顶部使用
import * as d3 from 'd3';,或使用 7.x 版本的 CDNhttps://d3js.org/d3.v7.min.js。所有模块(比例尺、坐标轴、形状、过渡等)都可通过 d3 命名空间访问。 -
选择集成模式。资料给出两种模式:
- 模式 A:直接 DOM 操作(大多数情况下推荐),使用 d3 选择 DOM 元素并以命令式方式操作,适用于任何 JavaScript 环境。
- 模式 B:声明式渲染(适用于带模板的框架),仅用 d3 做数据计算(比例尺、布局),再通过框架渲染元素。资料建议复杂可视化(过渡、交互或需发挥 d3 全部能力)用模式 A,较简单可视化或框架偏好声明式渲染时用模式 B。
-
组织可视化代码结构。资料给出的标准结构为:定义尺寸与边距、创建带边距的主分组、创建比例尺、创建并追加坐标轴、绑定数据并创建视觉元素。
-
实现响应式尺寸。资料提供两种方式:基于 window resize 事件监听并返回清理函数,或使用 ResizeObserver 观察容器元素。
常见可视化模式
资料给出了多类图表的实现方式与代码示例:
- 柱状图(Bar chart):使用
d3.scaleBand()与d3.scaleLinear(),通过join("rect")绘制矩形。 - 折线图(Line chart):使用
d3.line()定义 x/y 访问器与d3.curveMonotoneX平滑曲线,绘制path。 - 散点图(Scatter plot):绘制
circle,可按sizeScale编码大小、按colourScale编码颜色,并设置透明度。 - 和弦图(Chord diagram):以圆形布局展示实体间关系,丝带表示流向。资料给出从 source/target/value 数据构建矩阵、使用
d3.chord()、d3.arc()、d3.ribbon()绘制丝带、分组弧线与标签的完整示例。 - 热力图(Heatmap):用颜色编码二维网格中的值。资料给出
scaleBand构建行列、scaleSequential(d3.interpolateYlOrRd)着色、绘制矩形、添加轴标签与颜色图例的示例。 - 饼图(Pie chart):使用
d3.pie()与d3.arc()。 - 力导向网络(Force-directed network):使用
d3.forceSimulation配置 link、charge、center 力,绘制连线与节点,并实现拖拽函数dragstarted、dragged、dragended。
添加交互性
资料给出三类交互实现:
- 提示框(Tooltips):在 SVG 外创建
div,通过mouseover、mousemove、mouseout事件控制显示位置与内容。 - 缩放与平移(Zoom and pan):使用
d3.zoom(),设置scaleExtent并在 zoom 事件中更新分组 transform。 - 点击交互(Click interactions):通过 click 事件处理逻辑、更新视觉反馈,并可分发自定义事件供框架监听。
过渡与动画
资料说明可通过 transition() 添加平滑过渡,例如 .transition().duration(750).attr("r", 10);,并提到可链式调用(原文在此处截断,未提供后续内容)。
限制
资料未说明该技能的收费、价格、具体平台要求或效果保证。对于 3D 可视化,资料明确建议改用 Three.js。其余未在资料中提及的功能或使用步骤暂未提供。