我有一个使用Chart.js库构建的堆积条形图,JavaScript
我希望它的排序如下:条形顶部具有最高值的元素,条形底部具有最低值的元素.bottom,即降序排列。
我想它可以使用一些插件来完成Chart.js
,但我仍然无法弄清楚。
以下是我正在生成的图表,它是乱序生成的:
以下是我用来构建图表的代码片段:
myNewChart = new Chart(ctx, {
type: 'horizontalBar',
data: { labels, datasets },
options: {
maintainAspectRatio: false,
showAllTooltips: true,
scales: {
xAxes: [
{
stacked: true,
display: true,
ticks: {
beginAtZero: true,
}
}
],
yAxes: [
{
stacked: true,
display: true,
reverse: false,
ticks: { }
}
]
},
legend: {
position: 'bottom',
padding: 5,
labels: {
pointStyle: 'circle',
usePointStyle: true
}
},
plugins: {
datalabels: {
color: "#333333",
font: {
weight: 'bold',
size: 16,
}
}
},
},
});
版本: Chart.js
v2.8.0
更新:
我添加对象datasets
和datasetsObject
const datasetsObject = data.DashboardTicketList.reduce((obj, item) => {
obj[item.TicketsClasificationType] = obj[item.TicketsClasificationType] || {};
obj[item.TicketsClasificationType][item.TicketsAsignedTo] = item.TicketsCount;
return obj;
}, {});
const datasets = Object.keys(datasetsObject).map((name) => ({
label: name,
backgroundColor: colors[name],
data: labels.map((l) => datasetsObject[name][l])
}));
更新 2:
的价值观datasets
const colors = {
"ABIERTO": "#F76363",
"ASIGNADO": "#F7A65C",
"EN PROCESO": "#F2CB5F",
"EN ESPERA USUARIO": "#B283ED",
"TERMINADO": "#4285f4",
"CERRADO": "#6CE5CE",
};
更新 3:
执行sort
其中一个答案中指示的排序算法时,它不再代表图中的任何数据
const datasets = Object.keys(datasetsObject).map((name) => ({
label: name,
backgroundColor: colors[name],
data: labels.map((l) => datasetsObject[name][l]).sort
}));
我看到你正在使用我给你一段时间的逻辑来生成
datasets
andlabels
。好吧,使用我当时给你的相同片段,我将改变它以将它们labels
从最高到最低排序,同时考虑到它们的值的总和。为此,其中一个解决方案是,不是以以前的方式生成它们,而是可以用总数生成一个对象,用所述对象label
创建一个,从最高到最低组织它,然后从中提取它们,因此它们将考虑到其所有值的总和,从最高到最低排序。我将逐步解释它:array
array
labels
array
给定以下
array
查询:1 - 通过以下方式创建总计对象
label
:上面将返回一个对象,如下所示:
labels
2 - 创建一个包含y 个总数的数组:这将返回
array
如下所示:3 -
array
考虑到财产,从高到低排序value
:它将
array
按如下方式返回命令:labels
4 -从array
订购中提取那些:它将返回什么:
5 - 使用它
array
来labels
生成图表:排序算法
排序算法:在java脚本数组中实现,允许你自动组织值。
示例:
在这种情况下,我们的变量是:
GroupValores
按数据量从小到大排列图表:A:
[[2,1],[2,5,3],[10,3,6,2]]
GroupValores
:A:
[[2,3,5],[1,2],[2,3,6,10]]
在构建数据集的地方,您必须使用 Javascript 数组的 Sort() 函数对每个值进行排序
这样,数组的值
data
应该从小到大排序