我正在使用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对象与底层缩放函数产生一些冲突?
答案 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