有没有办法将带有标签的多行动态地插入到ChartJS折线图中?

时间:2015-11-17 00:35:47

标签: javascript chart.js

我希望这是可能的,因为我一直试图找到一种方法来做到这一点,对js和ChartJS有一点了解。我希望调用addData,并填充行,但我还没有找到一种方法来映射每行的相应标签的数据。我的问题是,我通过JSON传递的对象,都有不同的日期,不同的工资;

{
  "details": [
    {
     "user": [
       {
          "amount": "15000",
          "startdate": "01/01/2012",
          "enddate": "01/01/2012",
          "id": "23",
        }, {
          "amount": "21000",
          "startdate": "01/01/2013",
          "end": "01/01/2012",
          "id": "23",
        }],
  "user" : etc etc
}

然后,用js捕捉这个并安排这样的事情(我的实际代码要长得多,所以你可以看到我正在尝试做的事情);

for (var i = 0; i < details.length; i++)
{
   for (int j = 0; j < details[i].length; j++)
   {
       addStuffTodataArray(details[i].user[j]);
   }
    var lineData = {
        labels: labelArray,
        datasets: [
            {
                label: JsonData.user,
                fillColor: "rgba(220,220,220,0.2)",
                strokeColor: "rgba(220,220,220,1)",
                pointColor: "rgba(220,220,220,1)",
                pointStrokeColor: "#fff",
                pointHighlightFill: "#fff",
                pointHighlightStroke: "rgba(220,220,220,1)",
                data: dataArray 
            }
   }

目前,我将手动完成所有工作(即,使用jQuery获取用户指定的时间段,并运行指定的时间范围,计算月份并为每个月份应用标签,然后分配值)。

我的新方式看似很多处理,我确信ChartJS会更好地处理这个问题。

提前致谢。

3 个答案:

答案 0 :(得分:3)

这是一个猜测。我没有尝试过这个,但基于structure of the datasets,我想你可以在数据数组中添加数据集,然后调用update();

//here's the new dataset you want to add
var myNewDataset = {
        label: "My third dataset",
        fillColor: "rgba(151,187,205,0.2)",
        strokeColor: "rgba(151,187,205,1)",
        pointColor: "rgba(151,187,205,1)",
        pointStrokeColor: "#fff",
        pointHighlightFill: "#fff",
        pointHighlightStroke: "rgba(151,187,205,1)",
        data: [28, 48, 40, 19, 86, 27, 90]
    };

//push that onto the datasets array
lineData.datasets.push(myNewDataset);

//call the update method to render the new data
myLineChart.update();

此处描述了更新方法:http://www.chartjs.org/docs/#line-chart-prototype-methods

答案 1 :(得分:1)

您可能想要使用Chart.Scatter扩展名(http://dima117.github.io/Chart.Scatter/)。这也与Chart.js文档(参见http://www.chartjs.org/docs/#advanced-usage-community-extensions

相关联

Chart.Scatter支持日期刻度,它将摆脱

  

此刻,我将手动完成所有工作(即获得   用户使用jQuery指定的句点,并运行时间   指定框架,计算月份并为每个月份应用标签   一,然后分配值。)

您正在做的事情(您仍然需要重新格式化您的数据结构以适应Chart.Scatter所期望的数据结构)

答案 2 :(得分:0)

我最终做了这样的事情;

lineChartData = {}; //declare an object
lineChartData.labels = []; //add 'labels' element to object (X axis)
lineChartData.datasets = []; //add 'datasets' array element to object
var moreData = [[1, 3, 6, 16, 30, 6], [3,2,3,5,1,2], [3,11,23,2,1,9]];
function getLabels()
{
 var labels = ["one", "two", "three", "four", "five", "six"];  
 return labels;
}

for (line = 0; line < moreData.length; line++) {
    y = [];
    lineChartData.datasets.push({}); //create a new line dataset
    dataset = lineChartData.datasets[line]
    dataset.fillColor = "rgba(0,0,0,0)";
    if (moreData[line][0] == 1){
        dataset.strokeColor = "rgba(0,0,205,1)";
    } else {
        dataset.strokeColor = "rgba(200,200,200,1)";
    }
    dataset.data = []; //contains the 'Y; axis data

    for (x = 0; x < getLabels().length; x++) {
        labels = getLabels();
        for (var k = 0; k < moreData[line].length; k++){
        y.push( moreData[line][k]);
        }

        if (line === 0)
            lineChartData.labels.push(labels[x]);
    }

    lineChartData.datasets[line].data = y;
}

ctx = document.getElementById("Chart1").getContext("2d");
myLineChart = new Chart(ctx).Line(lineChartData);