D3 parcoords轴刻度未正确更新

时间:2017-11-19 13:53:44

标签: javascript d3.js parallel-coordinates

我正在使用d3 parcoords库。当我修改在平行坐标图表中绘制的数据并重新加载图表时,轴的比例不会刷新。

我尝试拨打.autoscale(),但是如果我在.render()之前调用它,它就没有效果,如果我在.render()之后调用它,那么就不会再绘制折线。

    $("#example").html(""); //to make sure "ghost" axes are removed

            parcoords = d3.parcoords()("#example")
                .data(parsedData)
                .createAxes()
                .brushMode("1D-axes")
                .reorderable()//;
                .detectDimensions()
                .dimensions(dimensionObj)
                .autoscale() //no visible effect if placed here
                .render()
                .updateAxes();

不确定这是否相关(虽然问题同时开始),我开始指定维度的顺序。为此,我使用包含编号“索引”键的JS对象dimensionArray,而不是使用包含轴(dimensionObj)的数组,如下所示:

//dimensionArray = ["axis1", "axis2", "axis3", "axis4"]; //orderless array

//Default axes to display with predefined ordering
dimensionObj = {
  "axis1": {index:0},
  "axis2": {index:1},
  "axis3": {index:2},
  "axis4": {index:3}
  }

为了便于说明,以下屏幕截图显示了如何在顶部图像上正确设置比例,但在第二个(更新的)图表上,一些新的折线在第1和第3轴上将变为0,但是比例尺为n没有更新,所以线条超出了范围。

重新加载图表时是否有一种简单的方法来刷新轴刻度?是否有可能在.dimensions()中使用JS对象与底层缩放函数产生一些冲突?

1st chart with default data

2nd updated chart with updated data

1 个答案:

答案 0 :(得分:0)

找到导致此行为的原因:d3.parcoords.js frontend http-in bind :80 acl its_an_api_request path_beg /api acl its_a_web_request path_beg /web use_backend api_server if its_an_api_request use_backend web_server if its_a_web_request default_backend web_server backend api_server server api_1 api:80 backend web_server server web_1 web:80 函数中的if语句,如果先前未定义pc.autoscale,则仅重置比例。基本上我编辑了原始的yscale声明:

if

对此(当然 d3.keys(__.dimensions).forEach(function(k) { if (!__.dimensions[k].yscale){ __.dimensions[k].yscale = defaultScales[__.dimensions[k].type](k); } }); 语句可以完全删除,我只是将其保存在此表单中,以防我因以下原因需要恢复原始版本):

if