使用D3js并行集动态添加或删除维度

时间:2015-03-09 12:23:24

标签: javascript d3.js

我试图动态更改并行设置图表的尺寸,如前面question中所述。

我使用了Jason Davies创建的可重用图表: http://www.jasondavies.com/parallel-sets/

我使用以下代码创建我的图表:

var chart = d3.parsets()
      .dimensions(["Survived", "Sex", "Age", "Class"]);

var vis = d3.select("#vis").append("svg")
    .attr("width", chart.width())
    .attr("height", chart.height());

d3.csv("titanic.csv", function(error, csv) {
  vis.datum(csv).call(chart);
});

我创建了一个按钮,点击该按钮时应调用一个应将尺寸更改为change的函数["Survived", "Sex", "Class"]

功能:

function change() {
    vis.call(chart.dimensions(["Survived", "Sex", "Class"]));
}

当调用该函数时,我在第90行得到错误Uncaught TypeError: Cannot read property 'hasOwnProperty' of undefined,该错误位于可重用图表中的updateDimensions函数内。

任何人都有这方面的解决方案,或者我应该通过使用新的维度创建新的svg对象并使用解决方法来解决它,并在前面提到的问题的评论中删除旧的user1386906提及? / p>

1 个答案:

答案 0 :(得分:0)

有没有办法让并行集采用json中不同的数据实体值 我已经做了一些随机数生成器

 svg.datum(data)
      .call(chart
        .value(function(d, i) {
            var v1, v2, v3;
            v1 = d["Valu"];
            v2 = d["Val"];enter code here
            v3 = d["Value"];
            console.log(v1);
            console.log(v2);
            console.log(v3);
            var x = Math.floor((Math.random() * 10) + 1);
            if (x < 5) {
                return v2;
            } else {
                return v3;
            }

        })
        .mapLevel(levelMap)
        .dimensions(arrayOfDimensions)
        //dimensions to be displayed by chart. (i.e "Cost Item", "Location" etc)
    );

有三个不同的值,Value,val,valu,我希望节点为并行节点采用不同的值,这样每组并行节点都有不同的节点大小 例如:

nodeP        node Parallel to nodeP
]             ]
]

具有不同的大小,因此连接它们的功能区从源节点到目标节点的大小各不相同。