如何使用Chart.js更新折线图时设置全局/特定属性?

时间:2015-06-15 08:39:20

标签: linechart chart.js

这是我的情况http://jsfiddle.net/co3L0bdb/4/

感谢@potatopeelings帮助我现在能够将属性highlightFill设置为我的所有datasets,即使我在图表中显示/隐藏一个系列也是如此。 我补充说:

currentChart.datasets[0].points[8].highlightStroke = "rgba(220,0,0,1)";
currentChart.datasets[1].points[8].highlightStroke = "rgba(0,255,0,1)";
currentChart.datasets[2].points[8].highlightStroke = "rgba(0,0,255,1)";

但我得到的,但我不想,是当我隐藏一个系列时,在2次迭代后它开始绘制隐藏数据并停止删除该系列的第一个数据。 如何在没有描述副作用的情况下设置偶数系列特性,例如highlightStroke

2 个答案:

答案 0 :(得分:0)

不要将dataset属性设置为空对象,而是根本不要将它包含在数据集中。所以

data = {
    labels: chartlabel,
    datasets: [SP, NC, SPA]
};

变为

data = {
    labels: chartlabel,
    datasets: []
};

if (SP.label !== undefined) data.datasets.push(SP)
if (NC.label !== undefined) data.datasets.push(NC)
if (SPA.label !== undefined) data.datasets.push(SPA)

在2个地方

通过循环替换数据插入,点属性设置(而不是为3个数据集对其进行硬编码)。所以

setInterval(function() {
    currentChart.addData([randomScalingFactor(), randomScalingFactor(), randomScalingFactor()], ++latestLabel);
currentChart.datasets[0].points[8].highlightStroke = "rgba(220,0,0,1)";
currentChart.datasets[1].points[8].highlightStroke = "rgba(0,255,0,1)";
currentChart.datasets[2].points[8].highlightStroke = "rgba(0,0,255,1)";

变为

var d = []
currentChart.datasets.forEach(function(e) {
    d.push(randomScalingFactor())
})
currentChart.addData(d, ++latestLabel);
currentChart.datasets.forEach(function(dataset) {
    dataset.points[8].highlightStroke = dataset.points[0].highlightStroke;
})

新点的highlightStroke将从highlightStroke复制到同一系列的第一个点。

小提琴 - http://jsfiddle.net/zs99pw4L/

答案 1 :(得分:0)

currentChart2.datasets.forEach(function(e) {
    e.points[e.points.length - 1].highlightFill=e.points[0].highlightFill;
    e.points[e.points.length - 1].highlightStroke=e.points[0].highlightStroke;
});

Solves the problem too. http://jsfiddle.net/co3L0bdb/5/