在d3图表函数中访问json的不同部分

时间:2015-05-27 16:40:20

标签: d3.js

我试图创建一个函数,这样我就可以使用一组数据绘制三个不同的图表。

数据样本......

var marketshare = [
    {"store": "store1", "share": "5.3%", "q1count": 2, "q2count": 4, "q3count": 0},
    {"store": "store2","share": "1.9%", "q1count": 5, "q2count": 10, "q3count": 0},
    {"store": "store3", "share": "2.5%", "q1count": 3, "q2count": 6, "q3count": 0}
];

我试图绘制三张图表。一个用q1count,一个用q2count,一个用q3count。我创建了一个可以使用的函数...

drawChart(divID,marketshare,chartWidth,countReference)

" DIVID"是一个字符串,用于标识应绘制图表的位置。 "市场份额"是数据。 " chartWidth"是图表宽度。 " countReference"是一个字符串,指的是我想要使用的对象中的数据。例如,这可能是" q2count"如果我想访问json的那一部分。

我在将调用拼接在一起以获取该数据时遇到问题。以下是我尝试记录最小数据点的示例...

var minDataPoint = d3.min(marketshare, function(d){
    console.log("min d["+countReference+"] "+d[countReference]); //example return : min d[q2count] undefined
    console.log("min d.q2count "+d.q2count); //example return : min d.q2count 4 
    ...
});

我认为我应该能够使用countReference来访问json的不同部分,但这并没有发生在我身上。

2 个答案:

答案 0 :(得分:0)

我会先用不同的qCounts嵌套数据: http://matthewfieger.com/posts/me/2014/06/27/nesting_data_for_d3.html

而不是为每个嵌套元素创建图表。

答案 1 :(得分:0)

d3访问者函数中记录这种情况很奇怪。您没有记录最小值,您正在记录迭代,d3找到最小值。除此之外,您的代码按预期工作 EXCEPT (并且除了它之外)您需要从访问者返回感兴趣的值

var countReference = "q2count";
var marketshare = [
    {"store": "store1", "share": "5.3%", "q1count": 2, "q2count": 4, "q3count": 0},
    {"store": "store2","share": "1.9%", "q1count": 5, "q2count": 10, "q3count": 0},
    {"store": "store3", "share": "2.5%", "q1count": 3, "q2count": 6, "q3count": 0}
];
var minDataPoint  = d3.min(marketshare, function(d,i) {
        console.log("min d["+countReference+"] " + d[countReference]); 
        console.log("min d.q2count " + d["q2count"]);
        return d[countReference]; //<-- return the value of interest which d3 will find the min of
});
console.log(minDataPoint);

输出:

min d[q2count] 4
min d.q2count 4
min d[q2count] 10
min d.q2count 10
min d[q2count] 6
min d.q2count 6
4

示例here