当前位置:首页 > JavaScript

js实现曲线图

2026-04-04 07:23:03JavaScript

使用 Canvas 绘制曲线图

Canvas 是 HTML5 提供的绘图 API,适合动态生成图形。以下是一个简单的曲线图实现示例:

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

// 绘制坐标轴
ctx.beginPath();
ctx.moveTo(50, 30);
ctx.lineTo(50, 250);
ctx.lineTo(450, 250);
ctx.stroke();

// 绘制曲线
ctx.beginPath();
ctx.moveTo(50, 250);
const points = [60, 120, 90, 80, 150, 200, 210, 150, 270, 180, 330, 100, 390, 160];
for (let i = 0; i < points.length; i += 2) {
  ctx.lineTo(50 + points[i], 250 - points[i+1]);
}
ctx.strokeStyle = 'blue';
ctx.stroke();

使用 SVG 绘制曲线图

SVG 是矢量图形格式,适合需要缩放和交互的场景:

const svg = document.getElementById('mySvg');
const pathData = points.reduce((acc, val, i) => {
  return acc + (i % 2 === 0 ? ` L${50 + val}` : ` ${250 - val}`);
}, `M50 250`);

const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
path.setAttribute('d', pathData);
path.setAttribute('stroke', 'blue');
path.setAttribute('fill', 'none');
svg.appendChild(path);

使用 Chart.js 库

Chart.js 是流行的图表库,简化了图表创建过程:

const ctx = document.getElementById('myChart').getContext('2d');
const chart = new Chart(ctx, {
  type: 'line',
  data: {
    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    datasets: [{
      label: 'Sales',
      data: [65, 59, 80, 81, 56, 55],
      borderColor: 'rgb(75, 192, 192)',
      tension: 0.1
    }]
  },
  options: {
    scales: {
      y: {
        beginAtZero: true
      }
    }
  }
});

使用 D3.js 库

D3.js 提供更强大的数据可视化功能:

const data = [10, 20, 30, 40, 50, 60];
const svg = d3.select('#d3Chart')
  .append('svg')
  .attr('width', 400)
  .attr('height', 300);

const line = d3.line()
  .x((d, i) => i * 60 + 50)
  .y(d => 250 - d * 3)
  .curve(d3.curveCardinal);

svg.append('path')
  .datum(data)
  .attr('fill', 'none')
  .attr('stroke', 'steelblue')
  .attr('stroke-width', 2)
  .attr('d', line);

实现平滑曲线

使用贝塞尔曲线实现平滑效果:

ctx.beginPath();
ctx.moveTo(50, 250);
for (let i = 0; i < points.length - 2; i += 2) {
  const xc = (points[i] + points[i+2]) / 2;
  const yc = (points[i+1] + points[i+3]) / 2;
  ctx.quadraticCurveTo(
    50 + points[i], 250 - points[i+1],
    50 + xc, 250 - yc
  );
}
ctx.stroke();

响应式设计

使图表适应不同屏幕尺寸:

js实现曲线图

function resizeCanvas() {
  const container = document.getElementById('chartContainer');
  canvas.width = container.clientWidth;
  canvas.height = container.clientHeight;
  drawChart(); // 重新绘制图表
}

window.addEventListener('resize', resizeCanvas);

以上方法提供了从基础到高级的曲线图实现方案,可根据项目需求选择合适的技术方案。

标签: 曲线图js
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…