当前位置:首页 > 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实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现图片轮播

js实现图片轮播

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

js实现复制到剪贴板

js实现复制到剪贴板

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

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…