canvas绘制网格(增加坐标)

本文介绍了一种使用JavaScript在HTML画布上绘制带有坐标轴的网格图表的方法。通过定义函数drawGrid、drawText和drawRect,实现了网格的绘制及坐标轴的添加,便于直观展示数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.接着上篇文章,我打算给绘制的表格增加坐标,这样看起来比较方便


//绘制网格
function drawGrid(CANVAS_WIDTH,CANVAS_HEIGHT,GRID_WIDTH,GRID_HEIGHT){
	var rows=parseInt(CANVAS_WIDTH/GRID_WIDTH);
	var cols=parseInt(CANVAS_HEIGHT/GRID_HEIGHT);
	for(var i=0;i<rows;++i)
	{
		for(var j=0;j<cols;++j)
		{
			drawRect(i,j,GRID_WIDTH,GRID_HEIGHT);
			if(i==0||j==0)                
			{
				drawText(i,j,GRID_WIDTH,GRID_HEIGHT); //增加坐标
			}
		}
	}
}

//绘制横坐标与纵坐标
function drawText(i,j,GRID_WIDTH,GRID_HEIGHT){
	var drawing=document.getElementById("drawing");
	if(!drawing.getContext) return false;
	var context=drawing.getContext("2d");
	context.font="bold 16px Arial";
	context.textAlign="start";
	var x_axis=i*100+"";
	var y_axis=j*100+"";
	context.fillText(x_axis,i*100,20);   //绘制横坐标
	context.fillText(y_axis,10,j*100);    //绘制纵坐标

}

//绘制矩形
function drawRect(i,j,GRID_WIDTH,GRID_HEIGHT){
	var drawing=document.getElementById("drawing");
	if(!drawing.getContext) return false;
	var context=drawing.getContext("2d");
	context.lineWidth=1;
	context.strokeStyle="lightgrey";
	context.strokeRect(i*100,j*100,GRID_WIDTH,GRID_HEIGHT);
}
2.调用就可以
var CANVAS_WIDTH=1024;
var CANVAS_HEIGHT=768;
var GRID_WIDTH=100;
var GRID_HEIGHT=100;

drawGrid(CANVAS_WIDTH,CANVAS_HEIGHT,GRID_WIDTH,GRID_HEIGHT);


### 实现 Canvas绘制网格和折线的功能 要在 HTML5 Canvas 上实现绘制网格和折线图表,可以按照以下方法完成。以下是详细的说明以及完整的代码示例。 #### 绘制网格 通过循环计算水平线和垂直线的位置,并使用 `strokeStyle` 设置线条颜色来创建网格效果。 ```javascript function drawGrid(ctx, canvasWidth, canvasHeight, gridSize) { ctx.strokeStyle = "#ddd"; // 设置网格的颜色为浅灰色 ctx.lineWidth = 1; // 设置线条宽度 // 绘制竖直线 for (let x = 0; x <= canvasWidth; x += gridSize) { ctx.beginPath(); ctx.moveTo(x, 0); ctx.lineTo(x, canvasHeight); ctx.stroke(); } // 绘制水平线 for (let y = 0; y <= canvasHeight; y += gridSize) { ctx.beginPath(); ctx.moveTo(0, y); ctx.lineTo(canvasWidth, y); ctx.stroke(); } } ``` 这段代码定义了一个名为 `drawGrid` 的函数,用于在给定的上下文中绘制均匀分布的网格[^7]。 --- #### 绘制折线图 为了绘制折线图,首先需要准备一组数据点作为输入参数。然后利用这些数据点依次连接形成一条连续的曲线。 ```javascript function drawLineChart(ctx, dataPoints, dottedSize, space, arrowSize) { const maxDataValue = Math.max(...dataPoints.map(point => point.value)); const scale = (ctx.canvas.height - 2 * space - arrowSize) / maxDataValue; ctx.strokeStyle = "#333"; // 折线颜色深灰 ctx.fillStyle = "#f00"; // 数据点填充红色 ctx.lineWidth = 2; let previousPoint = null; dataPoints.forEach((point, index) => { const x = space + index * ((ctx.canvas.width - 2 * space) / (dataPoints.length - 1)); const y = ctx.canvas.height - space - arrowSize - point.value * scale; if (!previousPoint) { // 开始路径并标记第一个点 ctx.beginPath(); ctx.arc(x, y, dottedSize / 2, 0, Math.PI * 2); ctx.fill(); ctx.moveTo(x, y); } else { // 连接前一点到当前点 ctx.lineTo(x, y); ctx.stroke(); // 标记当前点 ctx.beginPath(); ctx.arc(x, y, dottedSize / 2, 0, Math.PI * 2); ctx.fill(); } previousPoint = {x, y}; }); } ``` 这里实现了另一个辅助函数 `drawLineChart` ,它接受几个必要的配置项(如数据集、圆圈大小等),并将它们映射至画布坐标系中进行渲染[^8]。 --- #### 整体运行流程 最后一步就是把上面两个部分结合起来,在页面加载完成后立即调用这两个函数完成初始化操作。 ```html <canvas id="chartCanvas" width="600" height="400"></canvas> <script type="text/javascript"> window.onload = function () { const canvas = document.getElementById('chartCanvas'); const ctx = canvas.getContext('2d'); // 配置变量 const gridSize = 20; const space = 20; const arrowSize = 10; const dottedSize = 6; // 示例数据 const dataPoints = [ {value: 10}, {value: 20}, {value: 15}, {value: 30}, {value: 25} ]; // 调用绘图方法 drawGrid(ctx, canvas.width, canvas.height, gridSize); drawLineChart(ctx, dataPoints, dottedSize, space, arrowSize); }; </script> ``` 上述脚本片段展示了如何将前面提到的方法嵌入实际项目当中去执行具体的业务逻辑[^9]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值