我有一张有四个标签的皮哈特:
var data = [{
data: [50, 55, 60, 33],
labels: ["India", "China", "US", "Canada"],
backgroundColor: [
"#4b77a9",
"#5f255f",
"#d21243",
"#B27200"
],
borderColor: "#fff"
}];
使用chartjs-plugin-datalabels
插件,我想用下面的代码显示每个饼块的百分比值:
formatter: (value, ctx) => {
let datasets = ctx.chart.data.datasets;
if (datasets.indexOf(ctx.dataset) === datasets.length - 1) {
let sum = 0;
datasets.map(dataset => {
sum += dataset.data[ctx.dataIndex];
});
let percentage = Math.round((value / sum) * 100) + '%';
return percentage;
} else {
return percentage;
}
},
color: '#fff',
}
我得到了所有饼图块的100%值,而不是各自的百分比。
9条答案
按热度按时间7rtdyuoh1#
更新了精度为2位小数的小提琴。
您没有计算总和,而是仅针对每个值将当前值存储在总和中。
这是一把实用的小提琴:https://jsfiddle.net/a1Lvn4eb/55/
rryofs0p2#
我想在公认答案中添加一点,
ctx.chart.data.datasets[0].data
总是给你完整的数据,即使你通过点击图例过滤掉一些数据,这意味着你总是会得到一个国家相同的百分比,即使你过滤掉一些国家。我已经使用
context.dataset._meta[0].total
来获得过滤后的总数。下面是工作片段:
mwyxok5s3#
问题是你如何计算总和。见下文。
Fiddle
tjjdgumg4#
这是针对chart.js〉= 3.x和chartjs-plugin-datalabels〉= 2.x的更新
chartjs-plugin-datalabels
插件不再自动注册自身(docs)你得手动操作
一个二个一个一个
lawou6xi5#
可以将工具提示与阵列缩减器一起使用,以执行百分比计算并显示百分比。
68de4m5k6#
我使用的是ChartJS v3.7.0和chartjs-plugin-datalabels v2.0.0,答案是:
https://stackoverflow.com/a/59403435/6830478
并不适合我,而我只是想保持最新的百分比,当隐藏元素。似乎
ctx.dataset._meta
是不可用了。我想出了一些丑陋的猴子补丁:希望这对任何人都有帮助。干杯。
oxiaedzo7#
如果使用nodejs:请按照以下步骤操作:
1.从“chartjs-plugin-datalabels”导入图表数据标签;
1.图表登记簿(...可登记项、图表数据标签);
1.从注解上方复制代码...
https://chartjs-plugin-datalabels.netlify.app/guide/#table-of-contents
r8xiu3jd8#
正如一些人提到的,
context.dataset._meta[0].total
似乎已经在chart.js版本3和更高版本中被删除,不再起作用了。相反,我使用了context.chart.getDatasetMeta(0).total
,它对我很有效--它在饼图中显示百分比值,当点击图例时,值会根据过滤后的总数更新。ogsagwnx9#
显然,
ChartDataLabels
现在是从另一个包chartjs-plugin-datalabels
导出的。我使用npm i chartjs-plugin-datalabels
安装了这个包,然后修改了我的代码,如下所示。结果