javascript - 绘制条形图后Chartjs条形顺序调整

标签 javascript chart.js

chartjs document ,您可以使用 update() 方法重绘条形图的值更改,但不能更改条形图标签或更改条形图顺序。

我想要做的是在通过 myBarChart.addData() 将新柱添加到图表后按标签对柱顺序进行排序。

这是我尝试解决失败的问题:

        this.myBarChart.addData([1], tickString);
        // TODO: need to sort here by tick string when adding new one!
        this.myBarChart.datasets[0].bars = _.sortBy(bars, function(bar){

            return parseFloat(bar.label); // label example: '1.223', '1.44'
        });

问题: 如果可能的话,绘制条形图后如何按图表标签对条形图进行排序?

最佳答案

以下是如何使用单独的函数来完成此操作。改编自How can I sort, insert in between and update full dataset in chartjs?

var MyBarChartMethods = {
    // sort a dataset
    sortByLabel: function (chart) {
        // get data from chart elements (instead of messing up the actual data object)
        var data = []
        chart.datasets.forEach(function (dataset, i) {
            dataset.bars.forEach(function (bar, j) {
                if (i === 0) {
                    data.push({
                        label: parseFloat(chart.scale.xLabels[j]),
                        values: [bar.value]
                    })
                } else
                    data[j].values.push(bar.value)
            });
        })

        // sort the data based on label
        data.sort(function (a, b) {
            if (a.label > b.label)
                return 1;
            else if (a.label < b.label)
                return -1;
            else
                return 0;
        })

        // update the chart elements using the sorted data
        chart.datasets.forEach(function (dataset, i) {
            dataset.bars.forEach(function (bar, j) {
                if (i === 0)
                    chart.scale.xLabels[j] = data[j].label;
                bar.label = data[j].label;
                bar.value = data[j].values[i];
            })
        });
        chart.update();
    },
}

你这样调用它

MyBarChartMethods.sortByLabel(myBarChart)
<小时/>

fiddle - http://jsfiddle.net/jk1k0g5u/

关于javascript - 绘制条形图后Chartjs条形顺序调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910960/

相关文章:

javascript - 如何创建队列以便等待 5 秒执行函数

javascript - JQuery UI 选项卡 - 居中

javascript - 如何使用chartJs中的折线图减小三 Angular 形的底部宽度?

javascript - 如何在 ChartJS 中单击时获取事件标签元素?

charts - 如何在 chart.js 上配置我的 y 轴?

node.js - Chartjs-node 安装失败

javascript - 将所有具有不同名称的单选按钮分组

javascript - 在代码镜像中显示行错误?

graph - 在图表js中设置最小步长

javascript - Node.js 控制台中的 `undefined` 是什么意思?