如果我有一个频率列表,所有频率都在同一单位(Hz,MHz等)中,如何使用刻度在x轴上很好地显示它们?我希望将它们标记为Hz / kHz / MHz并适当缩放。
答案 0 :(得分:0)
您真正想要的只是一个带有SI prefix后跟Hz
作为度量单位的数字。
话虽如此,您可以使用线性比例尺和特定的tickFormat
:
const format = d3.format(".0s");
axis.tickFormat(function(d) {
return format(d) + "Hz";
});
axis
是您的轴生成器,无论它是什么。在此,说明符中的".0s"
格式化数字以使用SI前缀,并且不保留小数位。然后,您得到结果字符串,并向其中添加"Hz"
。
这是一个演示,域在[0, 1]
和[0, 100000000000]
之间不断变化:
const svg = d3.select("svg");
const scale = d3.scaleLinear()
.domain([0, 1000])
.range([30, 470]);
const format = d3.format(".0s");
const axis = d3.axisBottom(scale)
.tickFormat(function(d) {
return format(d) + "Hz";
});
const g = svg.append("g")
.attr("transform", "translate(0,50)");
g.call(axis);
d3.interval(function() {
scale.domain([0, Math.pow(10, ~~(Math.random() * 12))]);
g.transition()
.duration(1000)
.call(axis)
}, 2000);
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg width="500" height="100"></svg>