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

如何在Chart.js中统计重复数值并生成对应长度的柱状图

解决Chart.js柱状图统计数值出现次数的问题

步骤1:统计1-5数值的出现次数

首先把提取到的字符串数值转成数字,再统计每个数值的出现次数:

// 将提取到的字符串数值转为数字数组
const numericYNav = yNav.map(val => parseInt(val, 10));

// 初始化统计数组,对应1-5的出现次数,初始值都为0
const counts = [0, 0, 0, 0, 0];

// 遍历数组统计次数
numericYNav.forEach(num => {
  // 只统计1-5范围内的数值
  if (num >= 1 && num <= 5) {
    counts[num - 1]++; // 数值1对应索引0,数值2对应索引1,以此类推
  }
});

步骤2:修改Chart.js配置

把图表标签固定为1-5,数据替换为统计好的次数数组:

new Chart("chartnavigation", {
    type: "bar",
    data: {
      labels: ['1', '2', '3', '4', '5'], // 固定显示1-5的数值标签
      datasets: [{
        backgroundColor: barColors,
        barPercentage: 0.5,
        data: counts // 使用统计后的次数数组
      }]
    },
    options: {
      legend: {display: false},
      title: {
        display: true,
        text: "数值出现次数统计"
      },
      scales: {
        y: {
          beginAtZero: true,
          title: {
            display: true,
            text: '出现次数' // 给Y轴加标题,更直观
          }
        },
        x: {
          title: {
            display: true,
            text: '数值' // 给X轴加标题
          }
        }
      }
    }
  });

优化提取数值的代码

原代码中inputValNav未声明,建议添加变量声明,同时用trim()避免空格导致的无效值:

for (let i = 0; i < inputNav.length; i++) {
    if(inputNav[i].innerHTML.trim() !== '') {
        const inputValNav = inputNav[i].innerHTML;
        yNav.push(inputValNav);
   }
}

调整后,图表会显示1-5每个数值的出现次数,出现次数多的柱子对应更长的高度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20