1 回答
TA贡献1884条经验 获得超4个赞
您看到的问题是 Symlog 音阶的一个持续存在的问题:https://github.com/d3/d3-scale/issues/162
您可以在这个简单的演示中看到它:
const svg = d3.select("svg");
const scale = d3.scaleSymlog()
.domain([0, 100000])
.range([140, 10]);
const axis = d3.axisLeft(scale).ticks(4)(svg.append("g").attr("transform", "translate(50,0)"));
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>
以下是可能的解决方案:
更改 D3 源代码,如 GitHub 链接中所述;
为自己设置一个足够刻度值的数组,您将传递给
axis.tickValues
;使用 Log 刻度,其中域从 1 开始而不是从零开始。
最后一个选项似乎是一个黑客,但它是迄今为止最简单的,并且鉴于您的最高价值如此之大,从视觉上讲,它不会对dataviz产生任何影响。在这里:
const svg = d3.select("svg");
const scale = d3.scaleLog()
.domain([1, 100000])
.range([140, 10]);
const axis = d3.axisLeft(scale).ticks(4).tickFormat(d => d3.format("")(d))(svg.append("g").attr("transform", "translate(50,0)"));
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>
添加回答
举报