2013-12-11 34 views
1

我已经实现了d3.js直方图,类似于this example。这很好,但由于在一些使用情况下值的数量,我想对数据进行预处理并将必要的频率传递给d3.layout.histogram()。根据已知频率创建d3.js直方图

不是值[13, 5, 88, 4]的我有以下几点:

{ "0-5" : 2, 
    "5-10" : 0, 
    "10-15" : 1, 
    ... 
} 

我想这将调用保存我

var data = d3.layout.histogram() 
    .bins(x.ticks(20)) 
    (values); 

,但我不知道如何正确地整合这一点。我仍然需要d3.layout函数来计算垃圾箱的宽度。通过给定频率中的特性的数量给出箱的数量。任何提示?

回答

3

这个答案假设你想要动态传递垃圾箱;但仍然允许通过layout.histogram

完成频率计算您可以将数组传递给histogram.bins方法。像这样:

// Generate a histogram using twenty uniformly-spaced bins. 
var values= [13,5,88,4]; 
var data = d3.layout.histogram() 
    .bins(d3.range(0,100,6)) 
    (values); 

你甚至可以通过查找minvalues阵列的max参数调用d3.range()。这将节省您创建关联数组以找到频率的时间

+0

谢谢您的回答,但我想我已经表达了自己的含糊之处。我真正想要的是自己计算频率(在服务器端)并将其传递给d3.layout。我更新了标题和问题。 – Mahoni

+1

'直方图'布局可能无法帮助您,因为它是[用于](https://github.com/mbostock/d3/wiki/Histogram-Layout#wiki-_histogram)用于计算传入数据的频率,你已经有了。要按照您的指定计算垃圾箱的宽度,可以创建一个新的'd3.scale'并使用'ticks'功能。 – jacquard