我正在使用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值。
谢谢,
答案 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,但似乎已经过时了......