D3.js 带有对数刻度的轴,如何包含0的刻度?

D3.js 带有对数刻度的轴,如何包含0的刻度?,d3.js,math,D3.js,Math,我需要在图表的y轴上有对数刻度。由于日志比例不能在域中包含0值,我将域的下限设为1。这会导致轴上的刻度从1开始。如何使刻度从0开始 var yScale_for_axis = d3.scaleLog().domain([1,d3.max(vals)]).range ([height,0]); g.append("g") .call(d3.axisLeft(yScale_for_axis).tickFormat( d3.format(".1e"))) 我需要为0打勾,因为我需要绘制

我需要在图表的y轴上有对数刻度。由于日志比例不能在域中包含0值,我将域的下限设为1。这会导致轴上的刻度从1开始。如何使刻度从0开始

var yScale_for_axis = d3.scaleLog().domain([1,d3.max(vals)]).range ([height,0]);    

g.append("g")
  .call(d3.axisLeft(yScale_for_axis).tickFormat( d3.format(".1e")))

我需要为0打勾,因为我需要绘制的数据包括0。我还没有弄清楚如何通过绕过日志sclae来适应0值的绘制。但在此之前,我需要轴上表示的0刻度。

而不是常规的对数刻度(
d3.scaleLog()
),使用符号刻度(
d3.scaleSymlog()
),它允许域中为零

这是一个演示,在域中具有常规、日志比例和零(它将失败,不会显示任何内容):

const svg=d3.选择(“svg”)
常量比例=d3.scaleLog()
.domain([0,1000])
.范围([20480])
const axis=d3.axisBottom(scale)(svg.append(“g”).attr(“transform”,“translate(0,50)”))

使用symlog刻度(
d3.scaleLog()
),而不是常规的日志刻度(
d3.scaleSymlog()
),该刻度允许域中为零

这是一个演示,在域中具有常规、日志比例和零(它将失败,不会显示任何内容):

const svg=d3.选择(“svg”)
常量比例=d3.scaleLog()
.domain([0,1000])
.范围([20480])
const axis=d3.axisBottom(scale)(svg.append(“g”).attr(“transform”,“translate(0,50)”))


Thank@Gerardo…看起来scaleSymLog()是在d3 v5.8中引入的…我必须使用早期版本…所以这不是一个选项Tanks@Gerardo…看起来scaleSymLog()是在d3 v5.8中引入的…我必须使用早期版本…所以这不是一个选项