formatter
函数给出了每组堆叠条形图的总和,我试图执行datalabels
,如果总和为正,则将其定位在上,如果总和为负,则将其定位在下。请任何帮助将不胜感激。
的数据
datalabels: {
anchor: (context) =>{
const anchor = [];
let sum = ?;
if(parseFloat(sum) >=0){
anchor.push('end');
}else{
anchor.push('start');
}
return anchor;
},
align: (context) =>{
const align = [];
let sum = ?;
if(parseFloat(sum) >=0){
align.push('end');
}else{
align.push('bottom');
}
return align;
},
formatter:(value, context) =>{
const datasetArray = [];
context.chart.data.datasets.forEach((dataset) =>{
if(dataset.data[context.dataIndex] != undefined){
datasetArray.push(dataset.data[context.dataIndex]);
}
});
function totalSum(total, datapoint){
return +total + +datapoint;
}
let sum = datasetArray.reduce(totalSum);
if(context.datasetIndex === datasetArray.length - 1){
return parseFloat(sum).toFixed(2) ;
}else{
return '';
}
},
}
字符串
2条答案
按热度按时间jtoj6r0c1#
目前还不清楚这些酒吧是如何堆叠的-有许多未知的选择。基于图像图表的视觉外观的可能组合可以是以下:
个字符
这背后的想法是为数据集中的所有条启用数据标签,但选择正确定位的一个来表示
formatter
的总和-即最后一个数据集,其值(对于当前dataIndex
)与总和具有相同的符号。如果使用order
选项,情况可能会有所不同。这段代码还使用了这样一个事实,即
context
对象在formatter
、align
和anchor
方法之间是共享的,* 对于同一个datasetIndex
*,formatter
总是第一个--如果formatter
返回null
,则其他方法甚至不会被调用。因此,它将当前datasetIndex
的和保存在context
对象中,以供调用align
和anchor
的唯一一个点(每个datasetIndex
)使用。对于一个更安全的解决方案,即不使用这个未记录的事实,可以重新计算align
和anchor
中的总和,或者使用外部对象缓存总和,这可以是一种通过只计算一次总和来优化计算的解决方案,第一次为数据集调用formatter
。kyks70gy2#
您可以使用
chartjs-plugin-datalabels
,如here所示。字符串
同时检出定位属性。