当前位置:首页 > 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);

添加坐标轴

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

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);

事件交互处理

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

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);

d3.js 实现

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div c…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hr…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…