我正在使用 NVD3 散点图/气泡图。这是问题 here 的延续.我正在绘制 y 轴的对数基数 2 值。但我希望 y 轴将原始值作为与对数基数 2 比例对应的标签。我无法理解该怎么做。
编辑
这就是我要绘制的内容
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 值。
谢谢,
最佳答案
不要在创建数据数组时直接计算日志,而是保持原样,然后使用 log scale为你的轴。
要在 NVD3 中使用自定义比例,您将其作为参数传递给 chart.yScale(scale)
或 chart.xScale(scale)
方法。
var chart = nv.models.lineChart()
.yScale( d3.scale.log() );
只是不要尝试在条形图或面积图中对 y 值使用对数刻度,因为它们会自动在域中包含 0(如果您尝试在 log( 0)
!)
一些警告:
刻度格式函数在对数刻度上的工作方式与其他刻度不同;您可能只想将其保留为默认值。有关详细信息,请参阅文档(上面的链接)。
.nice()
方法在对数尺度上似乎不是很有效;当我在 NVD3 实时代码网站上玩耍时,[1,99] 的域导致轴上的最终刻度值为 98.999999999。您可能想要明确检查域是否以整数开始和结束。
另请注意,由于您实际上从未处理过日志的计算值(仅处理刻度上的相对位置),因此无需指定对数的底数。文档提到 logScale.base(number)
method但这似乎已经过时了......
关于javascript - nvd3 带对数刻度的气泡图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474319/