根据 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) })
这样可以避免结束值为零 - 但是如何过滤掉初始值可能接近零的元素?
在创建柱线时,您可以做同样的事情,即
svg.selectAll("rect").data(freq).filter(...)
.enter().append("rect");
在这一点上,在将数据传递给 D3 之前对其进行预过滤实际上是有意义的,即使用 var filteredData = data.filter(...)
之类的东西并使用 filteredData
.