在轴上显示动态频率

时间:2018-10-05 15:57:14

标签: javascript d3.js

如果我有一个频率列表,所有频率都在同一单位(Hz,MHz等)中,如何使用刻度在x轴上很好地显示它们?我希望将它们标记为Hz / kHz / MHz并适当缩放。

1 个答案:

答案 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>