javascript - d3 堆积面积图不适用于对数刻度

标签 javascript d3.js data-visualization

我已经能够制作出堆积面积图。 请参阅this fiddle ,它使用虚拟数据。但是,我想将 y 轴实现为对数刻度。但是当我改变线路时

var y = d3.scale.linear()
          .range([HEIGHT, 0]);

var y = d3.scale.log()
          .range([HEIGHT, 0]);

我的图表停止渲染,并出现类似错误

d3.v3.min.js:1 Error: Invalid value for attribute d="M0,NaNQ400,NaN,500,NaNQ600,NaN,1000,NaNL1000,NaNQ600,NaN,500,NaNQ400,NaN,0,NaNZ".

我不知道我哪里出了问题。有人可以帮忙吗?

最佳答案

查看 Log Scales 上的文档:

As log(0) is negative infinity, a log scale must have either an exclusively-positive or exclusively-negative domain; the domain must not include or cross zero.

您需要确保您的域不包含零值。将其设置为一些较小的值就足够了:

y.domain([1e-6, d3.max(data, function(d) { return d.y0 + d.y; })]);

查看更新后的JSFiddle一个工作示例。

关于javascript - d3 堆积面积图不适用于对数刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37412224/

相关文章:

javascript - 获取匹配元素的索引

javascript - jQuery hover fadein/fadeout/slidetoggle

javascript - D3 : Repositioning Pie Chart Labels on Update

javascript - DipleJS - 如何制作图表动画并下载图表

python - Bokeh :如何添加连接点的垂直线

javascript - Action 相关的 Javascript/Jquery - 如何仅在另一个脚本完成后激活命令?

javascript - react 提到文本区域不随文本增长

javascript - D3 路径动画 - 无法读取未定义的属性 'length'

javascript - 在 React 应用程序中使用 D3 渲染元素的价格?

javascript - 在 D3 的一行中添加空格/间隙