Линия D3 изменилась после увеличения - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в разработке D3 и JavaScript, мне удалось создать многострочный график (сгенерированный с помощью объекта JS) с интерактивностью. Все элементы управления работают, за исключением изменения масштаба формы линии. Я попытался изменить количество данных и не знаю, какая часть виновата в таком поведении. По прошествии определенного времени линия не меняется и остается прежней.

Эти изображения демонстрируют последний эффект:

снимок с правой линией:

capture with the right line

capture with altered line:

захват с измененной линией

Если у кого-то есть идеи, как решить эту проблему.

[edit] Я делаю еще один проход в моем коде, и проблема, похоже, связана с обновлением пути. Я добавляю эти блоки кода, если кто-то видит что-то не так.

 function line_gen(num){
                graph['lineFunction'+num] = d3.line()
                .defined(function(d) {return !isNaN(d[graph.dict[num]]) })
                .x(function(d) { return graph.xScaleTemp(d[graph.dict[0]]);})
                .y(function(d) { return graph.yScaleTemp(d[(graph.dict[num])])})
                .curve(d3.curveMonotoneX);
        }
 function updateData() {
                var t;
                function data_join(num){
                        if(!(graph.oldFdata.length)){
                                graph.dataGroup.select(".data-line"+graph.opt.name+num)
                                .transition()
                                // .duration(graph.spd_transition!=-1?graph.spd_transition:0)
                                .attr("d", graph['lineFunction'+num]((graph.Fdata)));
                        }else{
                                let update = graph.dataGroup.select(".data-line"+graph.opt.name+num)
                                .data(graph.Fdata);
                                update.enter()
                                .append("path")
                                .attr("d",graph['lineFunction'+num]);
                                update.exit().remove();

                                // graph.dataGroup.select(".data-line"+graph.opt.name+num)
                                // .transition()
                                // .duration(graph.spd_transition!=-1?graph.spd_transition:0)
                                // .attrTween('d',function(d){
                                //      var previous =d3.select(this).attr('d');
                                //      var current =graph['lineFunction'+num]((graph.Fdata));
                                //      return d3.interpolatePath(previous, current);
                                // });
                        }
                }
 
                for (var i = 1; i < graph["keys_list"].length; i++) {
                        if(graph[("lineFunction" + i)]==null){
                                indic_gen(i);
                                indicGrp(i);
                        }
                        data_join(i);
                }

                for (var i = 1; i < (Object.keys(graph.Fdata[0]).length); i++) {
                        /* update_tooltip(i); */
                        set_tooltip(i);
                }
        }

1 Ответ

0 голосов
/ 17 июля 2020

Я решил свою проблему, заново отрендерив ее. Не лучшее решение, но работает.

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