如何为chart.js(条形图)动态推送数据集?

问题描述 投票:0回答:4

我使用chartjs(条形图)来显示一些数据。 我尝试动态地将数据添加到 datasets 数组,但它不起作用。

例如,假设我在数据集数组中有 2 个对象,我动态创建该对象并尝试将其推入数据集(从 Chrome 控制台) 页面加载后,图表已经出现。

var e = {
                fillColor : "#efefef",
                strokeColor : "#efefef",
                highlightFill: "#efefef",
                highlightStroke: "#efefef",
                data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
            }

然后

barChartData.datasets.push(e)

我也尝试过做

window.myBar.update()
但又什么也没发生。

你知道这个问题吗? 谢谢,

javascript chart.js
4个回答
16
投票

我认为您不能使用 addData 添加系列 - 它用于向现有系列添加点/条。

但是,您可以将新系列直接插入图表对象中。使用图表对象和新数据集,就像这样

var ctx = document.getElementById("chart").getContext("2d");
var myBarChart = new Chart(ctx).Bar(data);

var myNewDataset = {
    label: "My Second dataset",
    fillColor: "rgba(187,205,151,0.5)",
    strokeColor: "rgba(187,205,151,0.8)",
    highlightFill: "rgba(187,205,151,0.75)",
    highlightStroke: "rgba(187,205,151,1)",
    data: [48, 40, 19, 86, 27, 90, 28]
}

插入新数据集的代码是

var bars = []
myNewDataset.data.forEach(function (value, i) {
    bars.push(new myBarChart.BarClass({
        value: value,
        label: myBarChart.datasets[0].bars[i].label,
        x: myBarChart.scale.calculateBarX(myBarChart.datasets.length + 1, myBarChart.datasets.length, i),
        y: myBarChart.scale.endPoint,
        width: myBarChart.scale.calculateBarWidth(myBarChart.datasets.length + 1),
        base: myBarChart.scale.endPoint,
        strokeColor: myNewDataset.strokeColor,
        fillColor: myNewDataset.fillColor
    }))
})

myBarChart.datasets.push({
    bars: bars
})

myBarChart.update();

Fiddle - http://jsfiddle.net/pvak6rkx/(3 秒后插入新数据集)


15
投票

在2.x版本中,您可以直接向图表添加(或删除)数据,然后调用

update()
,例如

barChart.data.datasets.push({
  label: 'label2',
  backgroundColor: '#ff0000',
  data: [1,2,3]
});
barChart.update();

这是一个 jsfiddle 示例


0
投票

您缺少图表实例中的

data
键,即
barChartData.data.datasets.push(e);

不需要任何方法。 js 图表对象
data.datasets
键接受对象数组。因此,在您的情况下使用:

var e = {
         fillColor : "#efefef",
         strokeColor : "#efefef",
         highlightFill: "#efefef",
         highlightStroke: "#efefef",
         data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
            }
barChartData.data.datasets[] = e; // this will append additional data to your chart
barChartData.update();

只需确保

barChartData
是您的 js 图表的实例。


0
投票

在第 3 版本中,您需要使用带有重置模式的更新。

        chart.update('reset');
© www.soinside.com 2019 - 2024. All rights reserved.