javascript - nvd3 带对数刻度的气泡图

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

我正在使用 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/

相关文章:

javascript - 在 InfoWindow 中调用 JavaScript 函数(谷歌地图)

d3.js - 围绕一个圆圈旋转文本

javascript - 如何在 d3.js 中编写复选框选中/未选中行为的代码

c# - OpenGL - 性能差且标度值高

javascript - 在 iOS 和 Android 上使用 React Native 时,我还能使用原生第三方库吗?

javascript - 根据选项类别而不是值显示不同的内容

javascript - 如何移动 "exit"按钮,使其位于模式框的右上角?

javascript - D3.js 替换段落中的文本

css - Div 在悬停时随比例移动

android - 当我需要使用 scaleType 矩阵时如何在 onCreate 中将图像缩放到 imageview