Я пытаюсь построить этот тип графики «двоичной матрицы»:
Не обращайте внимания на два цвета из образца изображения; Я хочу либо покрасить точку в синий цвет, скажем, для «завершенных» значений, либо оставить ее неокрашенной / серой для «неполных» значений, чтобы отслеживать ежедневное выполнение задач на определенное количество точек / дней. Точки представляют день, когда задача была выполнена или не выполнена. Отображение полного количества точек / дней дает представление о проценте завершения по мере того, как дни проходят.
Я хотел бы использовать комбинацию HTML / Javascript и PHP + MySQL. Но самое сложное для меня — найти хороший алгоритм для визуализации. Спасибо за вашу помощь.
Просто относитесь к каждой точке, как к пикселю. Также представьте, что изображение было повернуто на 90 ° против часовой стрелки. Затем вы просто рисуете квадрат, который занимает меньше места, отведенного ему — таким образом, вы получаете разделительные линии.
Вот что-то быстрое, чтобы поиграть.
Несколько заметок:
Т.е. если изображение 100 х 100, то есть 10000 пикселей. Вы можете обратиться к ним, указав число от 0 до 9,999
Например
function 10k_to_100x100(index)
{
var x = index % 100;
var y = (index / 100).toFixed(0);
plotPixelDot(x, y);
}
Х просто остаток при делении на ширину
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>
Других решений пока нет …