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

如何在Chart.js中实现柱状图柱子数值按降序排列

Chart.js柱状图按数值降序排列实现方案

Chart.js本身没有内置的柱形自动排序能力,你最初的合并键值对排序的思路是最优解,具体实现如下:

核心实现逻辑

  • 将公司名称数组和对应数值数组按索引合并为对象数组
  • 对对象数组按数值属性做降序排序
  • 排序完成后再拆分回单独的名称数组、数值数组传入图表即可

代码修改步骤

你只需要修改apiData函数的逻辑即可,修改后的代码如下:

const apiData = (data) => {
    var topGainersNames = []
    var topLosersNames = []
    var topGainersChange = []
    var topLosersChange = []
    for (var i = 0; i < data.gainers.length; i++) {
        topGainersNames.push(data.gainers[i].stock_symbol)
        topLosersNames.push(data.losers[i].stock_symbol)
        topGainersChange.push(Number(data.gainers[i].stock_change)) // 统一转数字避免排序异常
        topLosersChange.push(Number(data.losers[i].stock_change))
    }

    // 处理上涨标的降序排序
    const mergedGainers = topGainersNames.map((name, index) => ({
        name,
        value: topGainersChange[index]
    }))
    mergedGainers.sort((a, b) => b.value - a.value) // 数值从大到小降序
    // 拆分回两个数组
    const sortedGainersNames = mergedGainers.map(item => item.name)
    const sortedGainersChange = mergedGainers.map(item => item.value)

    // 处理下跌标的排序(默认按跌幅从大到小排,即数值从小到大)
    const mergedLosers = topLosersNames.map((name, index) => ({
        name,
        value: topLosersChange[index]
    }))
    mergedLosers.sort((a, b) => a.value - b.value) 
    // 拆分回两个数组
    const sortedLosersNames = mergedLosers.map(item => item.name)
    const sortedLosersChange = mergedLosers.map(item => item.value)

    var ctx = document.getElementById('topContributor').getContext('2d');
    var myChart = new Chart(ctx, {
        // 传入排序后的数组即可
        data: createChart(sortedGainersNames, sortedGainersChange, sortedLosersNames, sortedLosersChange),
        options: chartStyling()
    })
}

如果需要调整下跌标的的排序规则,比如按跌幅绝对值从大到小,就把下跌的排序逻辑改成mergedLosers.sort((a, b) => Math.abs(b.value) - Math.abs(a.value))即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:45:03