根据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) })
这可以避免最终值为零 - 但是如何过滤掉初始值可能接近零的那些元素呢?
答案 0 :(得分:0)
当您创建条形图时,您可以执行相同的操作,即
svg.selectAll("rect").data(freq).filter(...)
.enter().append("rect");
此时,在将数据传递给D3之前预先过滤数据实际上是有意义的,即使用var filteredData = data.filter(...)
之类的内容并使用filteredData
。