使用图表.js从分组的 JSON 对象绘制多线图



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

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

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 对象。

这是解决方案。

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>

最新更新