maw*_*wir 3 javascript legend chart.js
我正在尝试向 chart.js 中的时间序列图添加置信区间。目前我绘制了三个数据集并使用了填充选项。这意味着我最终在图例中有 3 个元素,所有这些元素都可以独立切换(图 1)。
我想要做的是将三个图例元素组合到一个对象中,该对象将同时切换所有三个数据集,例如图 2 中的模型。 [或替代结构我的数据,使单个数据集绘制所有三个行]。
编辑:这是我目前如何实施情节的最小工作示例 - https://jsfiddle.net/r491ge8z/7/
在这个例子中,我想要一个可以切换所有三个数据集的图例元素。
var chartData = {
labels: [1, 2, 3, 4, 5],
datasets: [
{
label: "Set 1",
backgroundColor: 'rgba(55, 173, 221, 0.6)',
data: [8, 18, 48, 38, 28],
borderWidth: 0.1,
fill: false,
pointRadius: 0.0,
},
{
label: "Set 1",
backgroundColor: 'rgba(55, 173, 221, 1)',
data: [10, 20, 50, 40, 30],
borderColor: "#00F",
fill: false,
pointRadius: 0.0,
},
{
label: "Set 1",
backgroundColor: 'rgba(55, 173, 221, 0.6)',
data: [12, 22, 52, 42, 32],
borderWidth: 0.1,
fill: '-2',
pointRadius: 0.0,
},
]
};
var chartOptions = {
responsive: true,
title: {
display: true,
text: 'Bad Confidence Intervals'
},
};
var chartDemo = new Chart($('#demo').get(0), {
type: 'line',
data: chartData,
options: chartOptions
});
Run Code Online (Sandbox Code Playgroud)
我通过将以下内容添加到图表选项中来确定如何执行此操作 - [假设您的置信区间命名为xxx_lo、xxx,xxx_hi并按chartData该顺序出现]
jsfiddle 示例 - https://jsfiddle.net/5fktnv6a/
labels: {
filter: function(item, chart) {
return !item.text.includes('_');
}
},
onClick: function(e, legendItem) { // need to hide index -1 and index +1
let index = legendItem.datasetIndex;
let ci = this.chart;
let alreadyHidden = (ci.getDatasetMeta(index).hidden === null) ? false : ci.getDatasetMeta(index).hidden;
let meta_lo = ci.getDatasetMeta(index - 1);
let meta = ci.getDatasetMeta(index);
let meta_hi = ci.getDatasetMeta(index + 1);
if (!alreadyHidden) {
meta_lo.hidden = true;
meta.hidden = true;
meta_hi.hidden = true;
} else {
meta_lo.hidden = null;
meta.hidden = null;
meta_hi.hidden = null;
}
ci.update();
},
Run Code Online (Sandbox Code Playgroud)