D3 не будет этого делать, если у вас нет разных шкал за период.
Я бы создал значения тиков вручную, например, так:
var tickValues = [
{"lower": 1.01, "upper": 2, "interval": 0.01},
{"lower": 2, "upper": 3, "interval": 0.02},
{"lower": 3, "upper": 4, "interval": 0.05},
{"lower": 4, "upper": 6, "interval": 0.1},
{"lower": 6, "upper": 10, "interval": 0.2},
{"lower": 10, "upper": 20, "interval": 0.5},
{"lower": 20, "upper": 30, "interval": 1},
{"lower": 30, "upper": 50, "interval": 2},
{"lower": 50, "upper": 100, "interval": 5},
{"lower": 100, "upper": 1000, "interval": 10}
]
let tickArray = []
let currentTickValue = 0
tickValues.forEach(function(t){
currentTickValue = t.lower
for (var i = t.lower; i < t.upper; i = i + t.interval) {
currentTickValue = currentTickValue + t.interval
currentTickValue = (Math.floor(currentTickValue * 100))/100
tickArray.push(currentTickValue)
}
})
let yScale = d3.scaleLinear()
//etc
let yAxis = d3.axisRight(yScale)
.tickValues(tickValues)