Tengo este código de inicio y estoy tratando de averiguar cómo puedo ordenar estos datos de mayor a menor. El código puede ordenar correctamente los valores, pero las etiquetas en el eje y son incorrectas.
Lo he intentado yo mismo, pero este código es avanzado para que lo entienda.
Aquí está el fragmento
//after the data is sorted let meta = chart.getDatasetMeta(0); let newMeta = []; let labels = chart.data.labels; let newLabels = []; meta.data.forEach((a, i) => { newMeta[dataIndexes[i]] = a; newLabels[dataIndexes[i]] = chart.data.labels[i]; }); meta.data = newMeta; chart.data.datasets[0].data = dataArray; chart.data.labels = newLabels; } }
El código completo está aquí: https://jsfiddle.net/3seduh9k/
Aquí está la actualización:
if (chart.options.sort) { let labels = chart.data.labels; let dataArray = chart.data.datasets[0].data.slice(); let mapValueLabel = {}; dataArray.forEach((value, index) => { mapValueLabel[value] = labels[index]; }); // sort data array as well dataArray.sort((a, b) => b - a); let meta = chart.getDatasetMeta(0); let newLabels = []; dataArray.forEach((a, i) => { newLabels[i] = mapValueLabel[a]; }); chart.data.datasets[0].data = dataArray; chart.data.labels = newLabels; } }
Demostración: https://jsfiddle.net/woL9ynpv/
Mi cambio es simple. Creo el mapa para guardar valor y etiquetar:
map{value:label}
Después de ordenar el valor, iteramos la nueva matriz de datos de lista y asignamos la base de etiquetas en la clave de valor.