我试图创建一个用对数刻度的彩色刻度的等高线图。
scaleLog().domain([1.8e-7, 0.017]);对于大多数域,它生成5-9个刻度。但是在上面的例子中,它返回了大约70。域通常是未知的,所以我不能硬编码他们。
.nice()和.ticks()似乎都对结果没有影响。是否有一种好的方法来限制蜱的数量,或者直接设置这个数字?


编辑:我最终通过编写一个递归函数来解决我的问题,该函数减少了ticks参数,直到达到最大值以下的数字为止:
const logScale = scaleFunction().domain([domainMin, domainMax]).nice();
const getThreshholds = (requestedTicks: number) => {
const tickscale = logScale.ticks(requestedTicks);
if (tickscale.length <= maxTicks) {
return tickscale;
}
return getThreshholds(requestedTicks - 1);
};
const thresholds = getThreshholds(maxTicks);发布于 2020-09-25 01:24:14
不幸的是你现在看到的..。
const s = d3.scaleLog().domain([1.8e-7, 0.017]);
console.log(s.ticks())<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
...is预期结果(重点是我的):
日志刻度也是特殊的,因为scale.ticks 忽略了指定的计数(来源)。
因此,一个可能的解决方案是使用scale.tickFormat()对滴答进行过滤。例如,保持10条滴答:
const s = d3.scaleLog().domain([1.8e-7, 0.017]);
const format = s.tickFormat(10);
console.log(s.ticks(10).filter(format));<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
https://stackoverflow.com/questions/64051508
复制相似问题