nvd3气泡图与对数刻度

时间:2014-05-05 13:56:59

标签: javascript d3.js scale scatter-plot nvd3.js

我正在使用NVD3散点图/气泡图。这是问题here的延续。我正在绘制y轴的log base 2值。但是我希望y轴将原始值作为对应于log base 2 scale的标签。我无法理解如何这样做。

修改

这就是我用于绘图的内容

data[i].values.push({
    x: random()
  , y: log2(yValue)
  , size: Math.random()
  });

function log2(val) {
console.log("val = " + val + " : " + Math.log(val) / Math.LN2)
    return Math.log(val) / Math.LN2;
}

现在,y轴刻度具有log2值。我想更改y轴刻度以显示原始值而不是log2值。

谢谢,

1 个答案:

答案 0 :(得分:2)

不是在创建数据数组时直接计算日志,而是保持原样,然后使用log scale作为轴。

要在NVD3中使用自定义比例,请将其作为参数传递给chart.yScale(scale)chart.xScale(scale)方法。

var chart = nv.models.lineChart()
      .yScale( d3.scale.log() );

请勿尝试在条形图或区域图表中使用y值的对数比例,因为这些值在域中自动包含0(如果您尝试在{处绘制任何内容,则会出现错误) {1}}!)

一些警告:

  • 蜱形成功能在对数尺度上的工作效果与其他尺度不同;你可能只想把它作为默认值。有关详细信息,请参阅文档(上面的链接)。

  • log(0)方法似乎在日志规模上非常有效;当我在NVD3实时代码网站上玩游戏时,[1,99]的域导致轴上的最终刻度值为98.999999999。您可能希望明确检查域是否以整数开头和结尾。

另请注意,由于您实际上从未真正处理过日志的计算值(仅使用比例上的相对位置),因此您不需要指定对数的基数。文档提到logScale.base(number) method,但似乎已经过时了......