使用canvas绘制一个栅格曲线统计图
时间: 2023-10-16 11:10:48 浏览: 205
使用canvas绘制贝塞尔曲线
要使用 Canvas 绘制栅格曲线统计图,你可以创建一个栅格化的背景,并在其上绘制曲线。以下是一个示例代码,演示如何使用 Canvas 绘制栅格曲线统计图:
```html
<!DOCTYPE html>
<html>
<head>
<title>Canvas 栅格曲线统计图</title>
</head>
<body>
<canvas id="myCanvas" width="600" height="400"></canvas>
<script>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
const data = [20, 50, 100, 80, 120, 200, 180]; // 统计数据
const gridSpacing = 50; // 栅格间距
const margin = 30; // 边距
const canvasWidth = canvas.width;
const canvasHeight = canvas.height;
// 绘制栅格背景
function drawGrid() {
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
// 绘制横向栅格线
ctx.strokeStyle = '#ccc';
ctx.lineWidth = 1;
for (let y = margin; y < canvasHeight - margin; y += gridSpacing) {
ctx.beginPath();
ctx.moveTo(margin, y);
ctx.lineTo(canvasWidth - margin, y);
ctx.stroke();
}
// 绘制纵向栅格线
for (let x = margin; x < canvasWidth - margin; x += gridSpacing) {
ctx.beginPath();
ctx.moveTo(x, margin);
ctx.lineTo(x, canvasHeight - margin);
ctx.stroke();
}
}
// 绘制曲线
function drawLineChart() {
const maxValue = Math.max(...data);
const scaleY = (canvasHeight - 2 * margin) / maxValue; // Y轴缩放比例
ctx.strokeStyle = 'blue';
ctx.lineWidth = 2;
ctx.beginPath();
for (let i = 0; i < data.length; i++) {
const x = margin + i * gridSpacing;
const y = canvasHeight - margin - data[i] * scaleY;
if (i === 0) {
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
}
}
ctx.stroke();
}
// 调用绘制函数
drawGrid();
drawLineChart();
</script>
</body>
</html>
```
在上面的示例代码中,我们首先创建了一个 Canvas 元素并获取了绘图上下文(2D)对象。然后定义了一个统计数据数组 `data`,表示每个数据点的值。`gridSpacing` 定义了栅格间距,`margin` 定义了边距。接下来,我们定义了两个函数:`drawGrid` 用于绘制栅格背景,`drawLineChart` 用于绘制曲线。在 `drawGrid` 函数中,我们使用循环绘制横向和纵向的栅格线。在 `drawLineChart` 函数中,我们根据数据点的值计算出 Y 坐标,并使用连线将数据点连接起来。
最后,我们调用 `drawGrid` 和 `drawLineChart` 函数来绘制栅格曲线统计图。你可以根据实际需要修改数据点和样式,以及其他绘图属性。希望这个示例对你有帮助!
阅读全文