gpt4 book ai didi

javascript - Chart.js 动态数据集和堆叠条上的工具提示

转载 作者:行者123 更新时间:2023-12-02 21:50:20 25 4
gpt4 key购买 nike

我想创建一个堆积条形图。

我看到了sampledocumentation来自 Chart.js,但我没有找到使用动态数据集和工具提示的示例。

我想要实现的效果如下图所示。

enter image description here

因此第一个堆叠条由两个数据表组成; 15 和 30 相加为 45。当用户将鼠标悬停在第一个堆叠栏上时,它将显示工具提示; “15 (1-3)”用于底部栏,“30 (3-6)”用于悬停顶部栏。问题是我不知道如何附加动态数据集(对于一个日期,它将包含 1 到 10 个数据集)并显示相应的工具提示。我可以使用动态数据集生成折线图/条形图,但堆叠条形图对我来说是新的。

我的json数据源是这样的:

[
{
"date":"2020-02-07",
"range":"1-3",
"off":15
},
{
"date":"2020-02-07",
"range":"3-6",
"off":30
},
{
"date":"2020-02-08",
"range":"1-4",
"off":25
},
{
"date":"2020-02-08",
"range":"4-5",
"off":15
},
{
"date":"2020-02-08",
"range":"5-6",
"off":15
}
]

它应该生成以下堆叠条。

enter image description here

您能给我提供一些示例吗?或者我可能错过了文档中已显示我想要的内容的某些部分?

谢谢。

最佳答案

请查看https://stackoverflow.com/a/59658062/2358409了解它的基本工作原理。

从这些信息开始,一些数据处理连同chartjs-plugin-datalabels的使用一起进行。引导您看到以下示例代码。

const data = [
{
"date":"2020-02-07",
"range":"1-3",
"off":15
},
{
"date":"2020-02-07",
"range":"3-6",
"off":30
},
{
"date":"2020-02-08",
"range":"1-4",
"off":25
},
{
"date":"2020-02-08",
"range":"4-5",
"off":15
},
{
"date":"2020-02-08",
"range":"5-6",
"off":15
}
];

const distinctDates = Array.from(new Set(data.map(o => o.date)));
const dataPerDate = distinctDates.map(d => data.filter(o => o.date == d));
const numberOfDatasets = Math.max.apply(null, dataPerDate.map(data => data.length));
const dataSets = [];
for (let i = 0; i < numberOfDatasets; i++) {
dataSets.push({
data: dataPerDate.map(data => i < data.length ? data[i].off : 0),
ranges: dataPerDate.map(data => i < data.length ? data[i].range : ''),
backgroundColor: distinctDates.map(d =>
"rgba(" + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + ", 0.5)"),
categoryPercentage: 1,
barPercentage: 1
});
}

new Chart(document.getElementById("myChart"), {
type: "bar",
data: {
labels: distinctDates,
datasets: dataSets
},
options: {
plugins: {
datalabels: {
display: context => context.dataset.data[context.dataIndex] > 0,
formatter: (value, context) => value + ' (' + context.dataset.ranges[context.dataIndex] + ')'
}
},
legend: {
display: false
},
tooltips: {
enabled: false
},
scales: {
xAxes: [{
stacked: true
}],
yAxes: [{
stacked: true
}]
}
}
});
canvas {
max-width: 300px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
<canvas id="myChart" width="100" height="100"></canvas>

关于javascript - Chart.js 动态数据集和堆叠条上的工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com