d3. js проблема толщины линии параллельных координат - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь использовать разную ширину линии для разных осей для графика параллельных координат с использованием d3. js

Он отлично работает, только если он находится в строго убывающем порядке (например: lineWidth=10 для 1-й оси , lineWidth=5 для 2-й оси и lineWidth=2 для 3-й оси). Но если значения похожи на (lineWidth=10 для 1-й оси, lineWidth=2 для 2-й оси и lineWidth=5 для 3-й оси), то для второй и третьей оси толщина линии равна 5, что является большим значением после меньшего всегда отменяет меньшее значение. Есть ли способ решить эту проблему? Ваша помощь очень заметна.

Ниже приведен фрагмент кода, над которым я сейчас работаю.

if (i == 0) {
    ctx.beginPath();
    ctx.moveTo(x,y);
} 
else {          
    if(i == 1) {
        ctx.lineWidth = 1;
    }           
    if(i == 2) {
        ctx.lineWidth = 5;
    }               
    if(i == 3) {
        ctx.lineWidth = 10;
    }
    var cp1x = x - 0.55*(x-x0);
    var cp1y = y0;
    var cp2x = x - 0.45*(x-x0);
    var cp2y = y;
    ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
    ctx.stroke();
}

Для приведенного выше кода ширина линии равна 10 по всем осям.

Если я используйте ctx.beginPath() перед каждым оператором if, тогда толщина линии работает нормально. Но, к сожалению, линии, проведенные между осями, меняют свое положение (рисуются только половинные линии). Заранее спасибо.

Если я использую ctx.beginPath() в каждом операторе if, то это то, что я получение

1 Ответ

0 голосов
/ 28 мая 2020

Переместить

ctx.beginPath();
ctx.moveTo(x,y);

перед каждым оператором if. Таким образом, каждая итерация будет новым путем, и вы переместитесь в правильную позицию, чтобы начать каждую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...