tickValues([min, max])
can adjust the tick range while we don't satisfy what d3 automaticaly generate for us.
It sounds we can do something like this to marked each element in data:
tickValues(data.map(function(d){ return d;}))
(Apparently not a good choice in this case.)