你如何避免d3插值中的小值?

时间:2013-11-05 08:14:32

标签: d3.js

根据d3文档:

当插值为零或从零插值时,某些插值可能非常小。 JavaScript以指数表示法格式化小数字,遗憾的是CSS不支持。例如,将不透明度转换为淡入或淡出时,数字0.0000001将转换为字符串“1e-7”,然后被忽略,默认值为1!为了避免分散闪烁,在1e-6而不是0开始或结束转换;这是未以指数表示法格式化的最小值。

这给了我一个直方图的问题,该直方图具有一些非常低的频率。矩形高度被内插为科学数字,从而引发错误。我尝试了以下内容:

svg.selectAll(".bar")
    .data(freq)
    .filter(function(d) {return d.freq>0.005})
    .transition()
    .duration(1000)
    .attr("y", function(d) { return y(d.freq); })
    .attr("height", function(d) { return height - y(d.freq) })

这可以避免最终值为零 - 但是如何过滤掉初始值可能接近零的那些元素呢?

1 个答案:

答案 0 :(得分:0)

当您创建条形图时,您可以执行相同的操作,即

svg.selectAll("rect").data(freq).filter(...)
   .enter().append("rect");

此时,在将数据传递给D3之前预先过滤数据实际上是有意义的,即使用var filteredData = data.filter(...)之类的内容并使用filteredData