Chart.js v3:工具提示回调无法识别堆叠条形图的点击数据集
Chart.js v3: Tooltip callback doesn't identify clicked dataset of stacked bar chart
在 Chart.js v2 中,ChartTooltipItem[] 的数据集索引 属性 标识了堆叠条形图的哪个部分被单击。这允许为堆叠条形图的每个部分自定义工具提示内容。
在 v3 中,TooltipItem[] 提供数据集但不识别单击了哪个数据集。每个 TooltipItem 都有一个 datasetIndex 字段,但它只是匹配 TooltipItem[] 中的索引,而不是识别被点击的段。
有没有人在 V3 工具提示回调中找到一个字段来识别点击了堆叠条形图的哪一部分?或者这个功能在 v3 重写中丢失了吗?
它工作正常,唯一不同的是它似乎在 v2 中默认为 point
模式,而现在它使用 index
模式,如果您将其更改回来point
它按预期工作:
var options = {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: 'red'
},
{
label: '# of Points',
data: [7, 11, 5, 8, 3, 7],
backgroundColor: 'blue'
}
]
},
options: {
plugins: {
tooltip: {
mode: 'point',
callbacks: {
beforeBody: (ttItems, x) => {
ttItems.forEach((ttItem) => {
console.log('BeforeBody: ', ttItem.datasetIndex, ttItem.dataIndex)
})
},
afterBody: (ttItems, x) => {
ttItems.forEach((ttItem) => {
console.log('AfterBody: ', ttItem.datasetIndex, ttItem.dataIndex)
})
}
}
}
},
scales: {
y: {
stacked: true
},
x: {
stacked: true
}
}
}
}
var ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
<canvas id="chartJSContainer" width="600" height="400"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.4.1/chart.js"></script>
</body>
在 Chart.js v2 中,ChartTooltipItem[] 的数据集索引 属性 标识了堆叠条形图的哪个部分被单击。这允许为堆叠条形图的每个部分自定义工具提示内容。
在 v3 中,TooltipItem[] 提供数据集但不识别单击了哪个数据集。每个 TooltipItem 都有一个 datasetIndex 字段,但它只是匹配 TooltipItem[] 中的索引,而不是识别被点击的段。
有没有人在 V3 工具提示回调中找到一个字段来识别点击了堆叠条形图的哪一部分?或者这个功能在 v3 重写中丢失了吗?
它工作正常,唯一不同的是它似乎在 v2 中默认为 point
模式,而现在它使用 index
模式,如果您将其更改回来point
它按预期工作:
var options = {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: 'red'
},
{
label: '# of Points',
data: [7, 11, 5, 8, 3, 7],
backgroundColor: 'blue'
}
]
},
options: {
plugins: {
tooltip: {
mode: 'point',
callbacks: {
beforeBody: (ttItems, x) => {
ttItems.forEach((ttItem) => {
console.log('BeforeBody: ', ttItem.datasetIndex, ttItem.dataIndex)
})
},
afterBody: (ttItems, x) => {
ttItems.forEach((ttItem) => {
console.log('AfterBody: ', ttItem.datasetIndex, ttItem.dataIndex)
})
}
}
}
},
scales: {
y: {
stacked: true
},
x: {
stacked: true
}
}
}
}
var ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
<canvas id="chartJSContainer" width="600" height="400"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.4.1/chart.js"></script>
</body>