You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Chart.js工具提示中显示KB、MB、GB、TB单位

解决Chart.js 2.8.0水平条形图工具提示字节格式化问题

你可以直接复用X轴上的字节转换函数,通过配置tooltip的回调函数实现统一格式,具体步骤如下:


  1. 确认字节转换函数
    先确保你已有一个能将字节转为KB/MB/GB的函数,没有的话可以直接使用这个:
function formatBytes(bytes, decimals = 2) {
    if (bytes === 0) return '0 Bytes';
    const k = 1024;
    const dm = decimals < 0 ? 0 : decimals;
    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
    const i = Math.floor(Math.log(bytes) / Math.log(k));
    return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
  1. 配置Tooltip格式化回调
    在Chart的options中找到tooltips配置,重写callbacks.label方法,调用格式化函数处理原始字节值:
var myChart = new Chart(ctx, {
    type: 'horizontalBar',
    data: {
        labels: ['项目A', '项目B', '项目C'],
        datasets: [{
            label: '存储占用',
            data: [/* 从PHP获取的原始字节数据 */],
            backgroundColor: 'rgba(54, 162, 235, 0.2)',
            borderColor: 'rgba(54, 162, 235, 1)',
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            xAxes: [{
                ticks: {
                    // 你已有的X轴格式化回调
                    callback: function(value) {
                        return formatBytes(value);
                    }
                }
            }]
        },
        tooltips: {
            callbacks: {
                label: function(tooltipItem, data) {
                    let label = data.datasets[tooltipItem.datasetIndex].label || '';
                    if (label) label += ': ';
                    // 水平条形图中,tooltipItem.xLabel对应原始字节值
                    label += formatBytes(tooltipItem.xLabel);
                    return label;
                }
            }
        }
    }
});

原理说明:Chart.js 2.8.0的水平条形图中,tooltipItem.xLabel会返回原始字节数值,和X轴ticks.callback接收的value是同一值,复用格式化函数就能保证单位显示一致。

内容的提问来源于stack exchange,提问作者Ronaldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:30:17