Как отсортировать столбчатую диаграмму с накоплением по определенному значению бара в диаграммах. js - PullRequest
0 голосов
/ 13 апреля 2020

Я использовал скрипт, который я нашел здесь при переполнении стека, для сортировки гистограммы с накоплением. Единственное, что сгруппированные бары сортируются по сумме общего бара. Я боролся с приведенным ниже сценарием, но не могу найти способ сортировки сгруппированных баров по одному значению стека вместо суммы сгруппированных баров. Это код, который я использую:

Chart.plugins.register({    
    id:"p2",                                                                                                                                                         
    datasets: [],                                                                                                                                                                    
    getData(labels, datasets) {                                                                                                                                                      
        const sum = [];                                                                                                                                                            
        for (i = 0; i < datasets[0].length; i++) {                                                                                                                                   
            sum.push({                                                                                                                                                               
                label: labels[i],                                                                                                                                                    
                data: datasets.map(e => e[i]),                                                                                                                                       
                    get sum() { // ES6 - getter                                                                                                                                      
                        return this.data.reduce((a, b) => a + b);                                                                                                                    
                    }                                                                                                                                                                
            });                                                                                                                                                                      
        }                                                                                                                                                                            
        return sum;                                                                                                                                                                  
    },                                                                                                                                                                               
    beforeUpdate(chart) {                                                                                                                                                              
        chart.data.datasets.forEach((dataset, datasetIndex) => {                                                                                                                     
            this.datasets.push(dataset.data);                                                                                                                                        
        });                                                                                                                                                                          
        const data_store = this.getData(chart.data.labels, this.datasets).sort((a,b) => b.sum - a.sum);                                                                              

        data_store.forEach((d,i) => {                                                                                                                                                
            chart.data.labels[i] = d.label;                                                                                                                                          
            d.data.forEach((v, vi) => {                                                                                                                                              
                chart.data.datasets[vi].data[i] = v;                                                                                                                                 
            });                                                                                                                                                                      
        });                                                                                                                                                                          
    }                                                                                                                                                                                
});   

1 Ответ

0 голосов
/ 13 апреля 2020

Функция сортировки в настоящее время использует сумму:

.sort((a,b) => b.sum - a.sum)

Поэтому замените ее данными, которые вы хотите отсортировать:

.sort((a,b) => b.data[i] - a.data[i])

Где i - строка, которую вы хотите.

...