如何使用 PHP 和 HTML 绘制这种类型的 "binary matrix" 图形(老实说我不知道​​它是否有名字)

How to plot this type of "binary matrix" graphic (I honestly don't know if it has a name) using PHP and HTML

我正在尝试绘制这种类型的 "binary matrix" 图形:

忽略示例图像中的两种颜色;我想为 "complete" 值涂上蓝色的点,或者为 "incomplete" 值留下 uncolored/gray 作为跟踪每日任务完成情况的一种方式 [=24] =].点代表任务完成或未完成的一天。显示 dots/days 的全部数量可以了解随着时间推移完成的百分比。

我想使用 HTML/Javascript 和 PHP + MySQL 的组合。但对我来说最困难的部分是找出一个好的算法来渲染这个可视化。感谢您的帮助。

就像对待像素一样对待每个点。另外,假设图像已逆时针旋转 90°。然后,您只需绘制一个占用分配给它的空间较少的正方形 - 这样,您就可以得到分隔线。

这里有一些可以玩的东西。 一些注意事项:

  • 0) 我刚把你的图片尺寸减半
  • 1) 4像素和5像素任意选择
  • 2) 我没有设置圆点的颜色 - 你可以 轻松做到这一点。
  • 3) 我只是将绘图区域视为普通的上下区域 位图,而您的图像似乎显示所有 Y 值都将 在需要下一个 X 值之前使用。 (这就像 90° CCW 旋转)。
  • 4) 我正在用 X 和 Y 对像素进行寻​​址 - 也许你会 更有兴趣用一个数字来称呼他们?如果是这样,你 可以轻松编写一个函数,将两个坐标映射到一个坐标 number - 像素索引,如果你愿意的话。

也就是说,如果图像是 100 x 100,则有 10,000 个像素。您可以通过指定 0 - 9,999 之间的数字来解决这些问题 例如

function 10k_to_100x100(index)
{
   var x = index % 100;
   var y = (index / 100).toFixed(0);
   plotPixelDot(x, y);
}

X就是除以宽度的余数 Y是除以宽度的整数答案

这是您可以在页面此处尝试的片段:

function byId(id){return document.getElementById(id);}
window.addEventListener('load', onDocLoaded, false);

function onDocLoaded()
{
 var x, y;
 
 for (y=0; y<20; y++)
 {
  for (x=0; x<100; x++)
  {
   drawDot(x, y, 'output');
  }
 }
}

function drawDot(xPos, yPos, canvasId)
{
 var actualX=xPos*5, actualY=yPos*5;
 var ctx = byId(canvasId).getContext('2d');
 ctx.fillRect(actualX, actualY, 4, 4);
}
<canvas width=558 height=122 id='output'></canvas>