在chartjs的数据中转储缺失日期

时间:2014-11-05 12:15:42

标签: javascript chart.js

假设我将使用ChartJS的折线图,并且我有'按日期值'数据。 例如:

5   : 05-11-2014
10  : 04-11-2014
55  : 01-11-2014

图表将包含3个点。

是否有任何解决方案,配置让我添加自动添加(转储)缺少日期 value = 0,因此示例的数据将为:

5   : 05-11-2014 
10  : 04-11-2014 
0   : 03-11-2014 
0   : 02-11-2014
55  : 01-11-2014

当然,图表将包含5个点。

我需要一些逻辑来处理这类问题,例如在整年处理几个点时。

1 个答案:

答案 0 :(得分:4)

这可以在实际图形之外完成,方法是预先解析标签以检查它们是否在日期中是连续的。在下面的例子中,我使用了momentjs,因为它只是使日期操作,格式化和解析变得更加容易。

然后只是在找到一个没有顺序日期的日期时将其添加到标签和图表数据中。



var graphData = [55, 10, 5],
  labels = ["01-11-2014", "04-11-2014", "05-11-2014"];


for (var i = 0; i < labels.length; i++) {
  //make sure we are not checking the last date in the labels array
  if (i + 1 < labels.length) {
    var date1 = moment(labels[i], "DD-MM-YYYY");
    var date2 = moment(labels[i + 1], "DD-MM-YYYY");

    
    //if the current date +1 is not the same as it's next neighbor we have to add in a new one
    if (!date1.add(1, "days").isSame(date2)) {
      
      //add the label
      labels.splice(i + 1, 0, date1.format("DD-MM-YYYY"));
      //add the data
      graphData.splice(i + 1, 0, 0);
    }
  }


}


var ctx = document.getElementById("chart").getContext("2d");
var data = {
    labels:labels,
    datasets: [{
        label: "My First dataset",
        fillColor: "rgba(220,220,220,0.5)",
        strokeColor: "rgba(220,220,220,0.8)",
        highlightFill: "rgba(220,220,220,0.75)",
        highlightStroke: "rgba(220,220,220,1)",

        data: graphData
    }]
};


var myLineChart = new Chart(ctx).Line(data);

console.log(labels);
console.log(graphData);
&#13;
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js"></script>
<script src="https://raw.githack.com/leighquince/Chart.js/master/Chart.min.js"></script>
<canvas id="chart" width="500px"></canvas>
&#13;
&#13;
&#13;