javascript - 如何在 y 轴上将数据显示为 KB、MB、GB、TB

标签 javascript charts d3.js data-visualization

我正在绘制一个图表,显示服务器上的流量。我想在 y 轴上将单位显示为 KB、MB 等。任何意见如何通过 d3 轴刻度来做到这一点。

最佳答案

您可以使用 d3.tickFormat function 来做到这一点: Demo .

var bytesToString = function (bytes) {
    // One way to write it, not the prettiest way to write it.

    var fmt = d3.format('.0f');
    if (bytes < 1024) {
        return fmt(bytes) + 'B';
    } else if (bytes < 1024 * 1024) {
        return fmt(bytes / 1024) + 'kB';
    } else if (bytes < 1024 * 1024 * 1024) {
        return fmt(bytes / 1024 / 1024) + 'MB';
    } else {
        return fmt(bytes / 1024 / 1024 / 1024) + 'GB';
    }
}

var xScale = d3.scale.log()
               .domain([1, Math.pow(2, 40)])
               .range([0, 480]);

var xAxis = d3.svg.axis()
                .scale(xScale)
                .orient('left')
                .tickFormat(bytesToString)
                .tickValues(d3.range(11).map(
                    function (x) { return Math.pow(2, 4 * x); }
                ));

不过,您还需要为 tickValues 使用自己的值。

关于javascript - 如何在 y 轴上将数据显示为 KB、MB、GB、TB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928690/

相关文章:

javascript - 带有模式的 grunt-usemin 仅替换第一个匹配项

javascript - 是什么让 Angular 和 Backbone 与 jQuery 不同?

JavaScript 引用下降

javascript - Jquery 生成的输入值未发布在表单提交上

javascript - 无法在 amcharts v4 中禁用 X 轴标签

d3.js - 将缩放行为从v3更新到v5

javascript - D3js强制布局 - 节点之间的渐变线

javascript - Highcharts:多系列柱形图中的位置散点图

javascript - D3 - 向简单折线图添加网格

javascript - 如何在 d3.js 中自定义事件监听器?