如何使Nvd3在y轴上使用对数刻度

Dou*_*ger 2 javascript d3.js nvd3.js python-nvd3

如何在nvd3 lineChartY轴上使用对数刻度?我正在绘制包含大量数字的这些系列:

ydata1 = [13947989924.43, 13944328607.2, 13936012870.52, 13792849748.97, 13756681531.69]
ydata2 = [10031442377.14, 10026457857.22, 10013108551.11, 9995581772.15, 9989728780.19]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

而且由于Y轴犯规从开始0ydata1ydata2期待相距甚远很。如何调整它并使用对数刻度?

And*_*eid 5

我的NVD3有点生锈,但是我想我可以帮忙。

您的系列也将与对数刻度相距甚远(如您建议的那样),这正是NVD3放置事物的方式,因此更改轴的范围将有所帮助。您可以如下更改y轴的比例类型和域:

日志轴的创建如下:

chart.yScale( d3.scale.log() );
Run Code Online (Sandbox Code Playgroud)

您可以这样设置基准:

chart.yScale( d3.scale.log().base(2) );
Run Code Online (Sandbox Code Playgroud)

您还可以通过使用强制y域包括特定范围(请记住:“对数刻度必须具有异或正或异域;该域不得包含或跨越零。”(d3文档)):

chart.forceY([1000000000,50000000000]);
Run Code Online (Sandbox Code Playgroud)

这可以帮助您将数据居中放置在远离顶部和底部边缘的位置。我不知道有任何NVD3方法可让您自动执行此操作,但是您可以根据数据集中的最大值/最小值动态设置这些值。

以下代码段使用y轴的对数刻度和强制域:

chart.yScale( d3.scale.log() );
Run Code Online (Sandbox Code Playgroud)
chart.yScale( d3.scale.log().base(2) );
Run Code Online (Sandbox Code Playgroud)
chart.forceY([1000000000,50000000000]);
Run Code Online (Sandbox Code Playgroud)