使用d3.scale.log()时,水平图表不可见

时间:2012-08-12 17:41:24

标签: javascript charts scale d3.js

我使用默认线性刻度成功绘制了水平线图,它们看起来很棒。不幸的是,当我尝试使用d3.scale.log()缩放器时,图表永远不会出现;没有错误,只是没有。我原以为输入数据中的问题是零,但即使我的指标返回一个非零值,也会发生这种情况。这是一个例子:

context = cubism.context(), horizon = context.horizon();
horizon.scale(d3.scale.log());
var flatMetric = context.metric(function(start, stop, step, callback) {
  var values = [];

  // convert start & stop to milliseconds
  start = +start;
  stop = +stop;

  while (start < stop) {
    start += step;
    values.push(10);
  }

  callback(null, values);
});
d3.select("body").selectAll(".horizon")
  .data([flatMetric]).enter().append("div")
  .attr("class", "horizon")
  .call(horizon);

如果我只是用线性刻度替换对数刻度,一切正常。

1 个答案:

答案 0 :(得分:2)

区域图(水平图是特殊情况)在对数刻度上没有意义:零在无穷远处。实际上,这表现为渲染误差,因为坐标是±无穷大或NaN。

如果要使用对数刻度,则需要不具有零基线的其他图表类型,例如折线图。比较图表也可能有效。如果您想保留水平线图并且您不想使用线性比例,请尝试使用sqrt(或更一般地,pow)比例。