У меня вопрос на понимание библиотеки chart.js. Есть пример постороения графиков https://jsfiddle.net/red_stapler/u5aanta8/1/
var canvas = document.getElementById('myChart');
var data = {
labels: ["January", "February", "March", "April", "May", "June",
"July"],
datasets: [
{
label: "My First dataset",
fill: false,
lineTension: 0.1,
backgroundColor: "rgba(75,192,192,0.4)",
borderColor: "rgba(75,192,192,1)",
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "rgba(75,192,192,1)",
pointBackgroundColor: "#fff",
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(75,192,192,1)",
pointHoverBorderColor: "rgba(220,220,220,1)",
pointHoverBorderWidth: 2,
pointRadius: 5,
pointHitRadius: 10,
data: [65, 59, 0, 56, 55, 40],
},
{
label: "My Second dataset",
fill: false,
lineTension: 0.1,
backgroundColor: "rgba(95,192,192,0.4)",
borderColor: "rgba(95,75,75,1)",
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "rgba(75,75,75,1)",
pointBackgroundColor: "#fff",
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(75,192,192,1)",
pointHoverBorderColor: "rgba(220,220,220,1)",
pointHoverBorderWidth: 2,
pointRadius: 5,
pointHitRadius: 10,
data: [55, 49, 100, 10, 65, 13, 100],
}
]
};
function adddata(){
myLineChart.data.datasets[0].data.push(65)
//myLineChart.data.labels[7] = "Newly Added";
myLineChart.data.labels.push("Newly Added")
myLineChart.update();
}
var option = {
showLines: true
};
var myLineChart = Chart.Line(canvas,{
data:data,
options:option
});
В примере массив labels забит статически и дальше в свойстве datasets заполняется свойство data. Как я понимаю на оси Х располагаются лейблы, а точки проставляются согласно данным data. То есть грубо говоря labels[0] будет соответствовать значение data[0]. Но что делать, если я получаю данные динамически? например я получаю данные с бекенда в виде массива объектов вида:
{
name: "Sam Dow"
date: "2019-02-12T13:57:41.381Z"
summ: 80
}
Я заполню массив labels датами, а как мне знать какой дате соответствует какая сумма? Беда начинается, когда я хочу динамически сформировать два графика, как в примере выше. Грубо говоря какая привязка данных из datasets.data к labels?
Ребята, помогите пожалуйста!
Если данные приходят в виде массива объектов, то соответствие между датами и суммой как раз и определяются этими объектами. Из входного массива данных можно сделать два отдельных массива с датами и суммами, и передавать даты в качестве labels и соответствующие суммы в качестве datasets.data
var inputData=[
{
name: "Sam Dow",
date: "2019-02-10T13:57:41.381Z",
summ: 80,
},
{
name: "Sam Dow",
date: "2019-02-11T13:57:41.381Z",
summ: 40,
},
{
name: "Sam Dow",
date: "2019-02-12T13:57:41.381Z",
summ: 50,
},
{
name: "Sam Dow",
date: "2019-02-13T13:57:41.381Z",
summ: 70,
},
{
name: "Sam Dow",
date: "2019-02-14T13:57:41.381Z",
summ: 80,
}];
var dates=[];
var summs=[];
inputData.forEach(function(item){
dates.push(item.date);
summs.push(item.summ);
});
var canvas = document.getElementById('myChart');
var data = {
labels: dates,
datasets: [
{
label: "My First dataset",
data: summs,
}
]
};
var option = {
showLines: true
};
var myLineChart = Chart.Line(canvas,{
data:data,
options:option
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js"></script>
<canvas id="myChart" width="400" height="250"></canvas>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Моя задача сделать анимацию из спрайтов, они разбиты по на разные png, и я сделал чтобы спрайты менялись, но скорость смены этих спрайтов бешенаяПодскажите...
При клике на кнопку, в блок (с атрибутом contenteditable) помещается имя и оборачивается в элемент b и надо потом печатать после имени, если кликнуть...
Вот так все выглядит, я в js не силен, но работу выполнить нужно