0

根据 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) })

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

4

1 回答 1

0

你可以在创建条形图时做同样的事情,即

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

在这一点上,在将数据传递给 D3 之前对数据进行预过滤实际上是有意义的,即使用var filteredData = data.filter(...)和使用类似的东西filteredData

于 2013-11-05T09:10:41.527 回答