【问题标题】:Plot a multi-line graph from grouped JSON object using Charts.js使用 Charts.js 从分组的 JSON 对象绘制多线图
【发布时间】:2019-08-07 17:33:55
【问题描述】:

我对一个 JSON 对象进行了分组,现在我尝试从每个主要来源绘制一个多线图,以便在一个主图上进行比较。提前感谢您提供任何有用的建议。

分组后链接到 JSON 对象https://codepen.io/edwardgnt/post/json-object

var ctx = document.getElementById('leads_source_canvas').getContext('2d');
var dataset = {
  type: 'line',
  data: {
    labels: [],
    datasets: [{
      label: 'SOCIAL MEDIA OUTBOUND',
      backgroundColor: 'rgba(0, 149, 255, 0.70)',
      borderColor: 'rgba(0, 149, 255, 0.75)',
      hoverBackgroundColor: 'rgba(0, 149, 255, 1)',
      hoverBorderColor: 'rgba(0, 149, 255, 1)',
      data: []
    }]
  },
  options: {
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
}


var getData = function(chartdata) {
  $.ajax({
    url: 'http://admin/chart/leads_source_chart',
    success: function(data) {
      console.log(data);

      data.forEach((el, i) => {
        chartdata.data.labels.push(el.CreatedDate);
        chartdata.data.datasets[0].data.push(el.NumLeads);
      });
      var myChart = new Chart(ctx, chartdata);

    }
  });
};
getData(dataset);

我目前拥有的代码来自一个未分组的 json 对象。

【问题讨论】:

标签: javascript jquery json chart.js


【解决方案1】:

这是解决方案。

var ctx = document.getElementById('myChart').getContext('2d');
var dataset = {
  type: 'line',
  data: {
    labels: [],
    datasets: []
  },
  options: {
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
}

function getRandomRgb() {
  var num = Math.round(0xffffff * Math.random());
  var r = num >> 16;
  var g = num >> 8 & 255;
  var b = num & 255;
  return 'rgb(' + r + ', ' + g + ', ' + b + ')';
}



var getData = function(chartdata) {
  $.ajax({
    url: 'https://api.myjson.com/bins/qw7np',
    //url:'https://api.myjson.com/bins/fadwx',
    success: function(data) {

      console.log(data);
      var dates = [];
      Object.keys(data).forEach((k, i) => {
        var obj = {};
        obj['label'] = k;
        obj['fill'] = false;
        obj['data'] = [];
        obj['borderColor'] = getRandomRgb();
        chartdata.data.datasets.push(obj);
        data[k].forEach(el => {
          dates.push(el.CreatedDate);
        });
      });
      dates = [...new Set(dates)].sort();
      chartdata.data.labels = dates;
      Object.keys(data).forEach((k, i) => {


        dates.forEach(d => {
          var mark = true;
          data[k].forEach(el => {
            if (el.CreatedDate === d) {
              mark = false;
              chartdata.data.datasets[i].data.push(el
                .NumLeads);
            }
          });
          if (mark)
            chartdata.data.datasets[i].data.push(0);

        });

      });
      console.log(chartdata);



      var myChart = new Chart(ctx, chartdata);

    }
  });
};
getData(dataset);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.js"></script>
<canvas id="myChart" width="200" height="200"></canvas>

【讨论】:

  • 哇!你救了我。不胜感激。谢谢你。效果很好!
猜你喜欢
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 2016-04-12
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多