Графики chart.js

110
02 октября 2019, 06:40

У меня вопрос на понимание библиотеки 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?

Ребята, помогите пожалуйста!

Answer 1

Если данные приходят в виде массива объектов, то соответствие между датами и суммой как раз и определяются этими объектами. Из входного массива данных можно сделать два отдельных массива с датами и суммами, и передавать даты в качестве 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>

READ ALSO
Как изменить скорость смены спрайтов canvas html5

Как изменить скорость смены спрайтов canvas html5

Моя задача сделать анимацию из спрайтов, они разбиты по на разные png, и я сделал чтобы спрайты менялись, но скорость смены этих спрайтов бешенаяПодскажите...

137
Как вставить курсор в нужное место?

Как вставить курсор в нужное место?

При клике на кнопку, в блок (с атрибутом contenteditable) помещается имя и оборачивается в элемент b и надо потом печатать после имени, если кликнуть...

114
Заголовок у DataTables не правильного размера

Заголовок у DataTables не правильного размера

Вот так все выглядит, я в js не силен, но работу выполнить нужно

97
Подключение стилей style против link

Подключение стилей style против link

Доброе время сутокЕсть достаточно важный вопрос

121