当前位置:首页 > JavaScript

js实现折线图

2026-01-30 15:37:29JavaScript

使用 Canvas API 绘制折线图

通过原生 Canvas API 绘制折线图可以高度自定义样式和交互。以下是一个基础实现示例:

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

// 数据准备
const data = [30, 50, 80, 45, 65];
const labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May'];

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

// 绘制折线
ctx.beginPath();
data.forEach((value, index) => {
  const x = 50 + (index * 100);
  const y = 250 - (value * 2);
  if (index === 0) {
    ctx.moveTo(x, y);
  } else {
    ctx.lineTo(x, y);
  }
});
ctx.strokeStyle = 'blue';
ctx.lineWidth = 2;
ctx.stroke();

使用 Chart.js 库实现

Chart.js 是流行的开源图表库,实现折线图非常简便:

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="myChart"></canvas>

<script>
  const ctx = document.getElementById('myChart').getContext('2d');
  const chart = new Chart(ctx, {
    type: 'line',
    data: {
      labels: ['January', 'February', 'March', 'April'],
      datasets: [{
        label: 'Sales 2023',
        data: [65, 59, 80, 81],
        borderColor: 'rgb(75, 192, 192)',
        tension: 0.1
      }]
    },
    options: {
      responsive: true,
      scales: {
        y: {
          beginAtZero: true
        }
      }
    }
  });
</script>

使用 ECharts 实现交互式折线图

ECharts 提供丰富的交互功能和可视化效果:

<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
<div id="chart" style="width: 600px;height:400px;"></div>

<script>
  const chartDom = document.getElementById('chart');
  const myChart = echarts.init(chartDom);

  const option = {
    xAxis: {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
    },
    yAxis: {
      type: 'value'
    },
    series: [{
      data: [820, 932, 901, 934, 1290],
      type: 'line',
      smooth: true,
      areaStyle: {}
    }]
  };

  myChart.setOption(option);
</script>

使用 D3.js 创建动态折线图

D3.js 适合需要复杂交互和数据绑定的场景:

<script src="https://d3js.org/d3.v7.min.js"></script>
<svg id="d3-chart"></svg>

<script>
  const data = [4, 8, 15, 16, 23, 42];
  const width = 500, height = 300;

  const svg = d3.select("#d3-chart")
    .attr("width", width)
    .attr("height", height);

  const xScale = d3.scaleLinear()
    .domain([0, data.length-1])
    .range([0, width-50]);

  const yScale = d3.scaleLinear()
    .domain([0, d3.max(data)])
    .range([height-50, 0]);

  const line = d3.line()
    .x((d,i) => xScale(i))
    .y(d => yScale(d));

  svg.append("path")
    .datum(data)
    .attr("fill", "none")
    .attr("stroke", "steelblue")
    .attr("stroke-width", 2)
    .attr("d", line);
</script>

响应式折线图实现

确保折线图适应不同屏幕尺寸:

function resizeChart() {
  const container = document.getElementById('chart-container');
  const canvas = document.getElementById('myChart');
  canvas.width = container.clientWidth;
  canvas.height = container.clientHeight;
  // 重新绘制图表逻辑...
}

window.addEventListener('resize', resizeChart);

每种方法各有优势:Canvas API 适合轻量级需求,Chart.js 提供快速解决方案,ECharts 适合复杂可视化,D3.js 则提供最大灵活性。根据项目需求选择合适的技术方案。

js实现折线图

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

相关文章

js实现分页

js实现分页

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

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…