组条形图数据未按预期工作

时间:2015-06-05 11:53:08

标签: json svg d3.js

拥有json对象类型的数组。 Var数据有一个数组对象,如:

mPlayer.seekTo(progress * 1000);

字段字母有多组数据(例如:字母A有两组频率或更多)。我需要为它创建一个组图表。

0: Object
letter  : A
frequency : .08167
1: Object
letter  : B
frequency : .01492
2: Object
letter  : C
frequency : .02780
3: Object
letter  : A
frequency : .06167
4: Object
letter  : D
frequency : .02492
5: Object
letter  : C
frequency : .03780

这似乎不起作用。 var frequency= d3.keys(data[0]).filter(function (key) { return (key !== "letter"); }); data.forEach(function (d) { d.val = frequency.map(function (name) { return { name: name, value: +d[name] }; }); }); 数据的结构有什么问题吗?

1 个答案:

答案 0 :(得分:1)

从问题和评论中看来,您的数据似乎是这样的格式:

data = [
{ "letter": "A", "frequency": .08167, "year": 2015}, 
{ "letter": "B", "frequency": .01492, "year": 2015},
{ "letter": "C", "frequency": .02780, "year": 2015}...

在这种情况下,为分组条形图分组的最佳方法是使用d3.nest

var nested_data = d3.nest()
    .key(function (d) {
        return d.letter;
    })
    .entries(data);

将使用每个字母values下的多个key构建您的数据。

以下是您的数据的工作小提琴: http://jsfiddle.net/henbox/jc0nohhb/1/ ,从此示例中借鉴了很多:http://bl.ocks.org/mbostock/3887051

barchartgrouped

注意 - 这是一个很好的资源,可以在d3中详细了解nesthttp://bl.ocks.org/phoebebright/raw/3176159/