当前位置:首页 > JavaScript

d3.js 实现

2026-03-01 07:11:26JavaScript

d3.js 实现基础图表

使用d3.js创建基础图表需要引入库文件并遵循数据绑定、DOM操作和绘制的流程。以下以柱状图为例说明核心步骤:

<!DOCTYPE html>
<html>
<head>
  <script src="https://d3js.org/d3.v7.min.js"></script>
</head>
<body>
  <svg width="400" height="300"></svg>
  <script>
    const data = [10, 20, 30, 40, 50];
    const svg = d3.select("svg");

    svg.selectAll("rect")
      .data(data)
      .enter()
      .append("rect")
      .attr("x", (d, i) => i * 60)
      .attr("y", d => 300 - d * 5)
      .attr("width", 50)
      .attr("height", d => d * 5)
      .attr("fill", "steelblue");
  </script>
</body>
</html>

数据绑定与比例尺

d3.js通过比例尺将数据值映射到可视化空间。线性比例尺和序数比例尺是常见类型:

const xScale = d3.scaleLinear()
  .domain([0, d3.max(data)])
  .range([0, 400]);

const colorScale = d3.scaleOrdinal()
  .domain(data)
  .range(d3.schemeCategory10);

添加坐标轴

坐标轴组件需要结合比例尺使用:

d3.js 实现

const axisBottom = d3.axisBottom(xScale);
svg.append("g")
  .attr("transform", "translate(0, 250)")
  .call(axisBottom);

过渡动画效果

d3.js提供transition()方法实现平滑动画:

svg.selectAll("rect")
  .transition()
  .duration(1000)
  .attr("y", d => 300 - d * 3)
  .attr("height", d => d * 3);

事件交互处理

通过事件监听器实现交互:

d3.js 实现

svg.selectAll("rect")
  .on("mouseover", function() {
    d3.select(this).attr("fill", "orange");
  })
  .on("mouseout", function() {
    d3.select(this).attr("fill", "steelblue");
  });

复杂图表实现

对于力导向图等复杂可视化,需使用特定布局:

const simulation = d3.forceSimulation(nodes)
  .force("charge", d3.forceManyBody())
  .force("link", d3.forceLink(links))
  .force("center", d3.forceCenter(200, 200));

响应式设计

通过窗口监听实现响应式调整:

function resize() {
  const width = window.innerWidth * 0.8;
  svg.attr("width", width);
  xScale.range([0, width]);
  svg.selectAll("rect").attr("x", (d, i) => i * (width/data.length));
}
window.addEventListener("resize", resize);

标签: js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…