Я смотрю на ваш второй кодовый ручка .
Сначала у вас есть строка данных, которую вы разбиваете на точки, и вы помещаете эти точки в массив canvasPts
.
Затем вы переделываете точки canvasPts
, удаляя все предыдущие точки.
Более того: все точки canvasPts
находятся почти в одном месте.Пожалуйста, посмотрите на значения для х и у.
И это еще не все.Вы делите значения для координат x и y на 100, делая их еще ближе.
Вы не объявляете размер для своего холста, делая ваш холст 300/150 px.
Предположим, я бы попытался нарисовать путь SVG для ваших данных, это похоже на группулиний длиной 0. Ничего не нужно рисовать.
Пожалуйста, измените свой вопрос, объяснив, как вы получили ваши данные.
ОБНОВЛЕНИЕ :
Во избежание беспорядка я поместил ваши данные во внешний файл.Я делаю это двумя способами:
сначала в svg : SVG легко масштабируется, и мне было легче понять, что происходит.Значение vewBox для svg равно viewBox="53.5 68 12 5"
, что означает, что холст svg начинается с x = 53.5, y = 68.Ширина холста svg - 68, а высота - 5.
В Canvas-HTML5 : я масштабирую контекст 10 раз, так как в противном случае он был бы очень маленьким: ctx.scale(10,10);
Чтобы добиться того же результата в канве, и так как я перевожу контекст ctx.translate (-53.5, -68.0);
//SVG
let d=`M${data[0].x},${data[0].y}L`
for(let i = 1; i < data.length; i++){
d += `${data[i].x},${data[i].y} `
}
test.setAttributeNS(null, "d", d);
//canvas//////
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
let cw = canvas.width = 120;
let ch = canvas.height = 50;
ctx.lineWidth = .1;
ctx.strokeStyle = "black";
ctx.scale(10,10);
ctx.translate(-53.5, -68.0);
ctx.beginPath();
ctx.moveTo(data[0].x,data[0].y);
for(let i = 1; i < data.length; i++){
ctx.lineTo(data[i].x,data[i].y);
}
ctx.stroke();
svg,canvas{border:1px solid}
path{fill: none; stroke:black; stroke-width:.05}
<svg viewBox="53.5 68 12 5">
<path id="test" />
</svg>
<canvas></canvas>
<script src='https://codepen.io/enxaneta/pen/dd442277a45b6cf1b5cc690200cdb3cf.js'></script>