【发布时间】:2020-03-11 04:12:45
【问题描述】:
我正在制作一个图表,我每 5 秒更新一次图表,数据进入。我可以设法从数据库中获取信息并非常容易地更新它,但我只是遇到了一个问题with 涉及设置图表一部分的路径,在这种情况下:options->tootltips->callbacks->afterTitle 并在其中创建一个数组并将数组从 JSON 传递到回调内的数组。
我需要做的,简而言之,因为我已经创建了一个函数来更新我的数据和标签中的信息,所以我需要在 inside this function,指向 afterTitle 的路径,然后我将能够发送第五个数组,其中存储数据。正如您在我的函数中看到的那样,我可以设法为数据和标签做到这一点。
我不能有另一个更新的函数,所以基本上我不能有 2 个 loadData(),因为它使 Chart 每次更新时都会闪烁,而事实并非如此我的目标是什么(图表不能闪烁)。
在这个补丁里面,我做了一个不起作用的例子,就是 //:
$.getJSON('loadchart.php', function(response) {
myLineChart.data.datasets[0].data = response[0];
myLineChart.data.datasets[1].data = response[1];
myLineChart.data.datasets[2].data = response[2];
myLineChart.data.datasets[3].data = response[3];
myLineChart.data.labels = response[4];
//The response array that I need is response[5];
//myLineChart.options.tooltips.callbacks[1] = return response[tooltipItem[0]['index']];
myLineChart.update();
});
我所有的图表,所以你可以看到路径:
<script>
function loadData() {
$.getJSON('loadchart.php', function(response) {
myLineChart.data.datasets[0].data = response[0];
myLineChart.data.datasets[1].data = response[1];
myLineChart.data.datasets[2].data = response[2];
myLineChart.data.datasets[3].data = response[3];
myLineChart.data.labels = response[4];
myLineChart.update();
});
}
loadData();
setInterval(loadData, 5000);
var lbl = [];
var ctx1 = document.getElementById('mychart1').getContext('2d');
var myLineChart = new Chart(ctx1, {
type: 'line',
data: {
labels: lbl,
datasets: [
{
label: "Corrente 1",
data: [],
borderWidht: 6,
borderColor: 'red',
backgroundColor: 'transparent'
},
{
label: "Corrente 2",
data: [],
borderWidht: 6,
borderColor: 'blue',
backgroundColor: 'transparent'
},
{
label: "Corrente 3",
data: [],
borderWidht: 6,
borderColor: 'green',
backgroundColor: 'transparent'
},
{
label: "Corrente Total",
data: [],
borderWidht: 6,
borderColor: 'black',
backgroundColor: 'transparent'
},
]
},
options: {
animation:{
update: 0
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}],
xAxes: [{
gridLines: {
display: false
}
}]
},
title: {
display: true,
fontSize: 20,
text: "Gráfico das Correntes"
},
labels: {
fontStyle: "bold",
},
layout: {
padding: {
left: 0,
right: 0,
top: 0,
bottom: 0
}
},
tooltips: {
enabled: true,
mode: 'single',
responsive: true,
backgroundColor: 'black',
titleFontFamily: "'Arial'",
titleFontSize: 14,
titleFontStyle: 'bold',
titleAlign: 'center',
titleSpacing: 4,
titleMarginBottom: 10,
bodyFontFamily: "'Mukta'",
bodyFontSize: 14,
borderWidth: 2,
borderColor: 'grey',
callbacks:{
title: function(tooltipItem, data) {
return data.labels[tooltipItem[0].index];
},
afterTitle: function(tooltipItem, data) {
var tempo = [];
return tempo[tooltipItem[0]['index']];
},
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label || '';
if (label) {
label += ': ';
}
label += (tooltipItem.yLabel)+"A";
return label;
}
}
},
aspectRatio: 1,
maintainAspectRatio: false
}
});
</script>
我需要的是这个:
afterTitle: function(tooltipItem, data) {
var tempo = [];
return tempo[tooltipItem[0]['index']];
【问题讨论】:
-
您的响应“5”将要求您获取或创建一个包含如此多条目的数据数组。您只有 4 个。 myLineChart.options.tooltips.callbacks[1] 将不起作用,因为这是一个对象,您使用数组的语法。所以我建议检查你的 php 以产生你需要的数据结构。 JSON 驴桥 [I AM A ARRAY] {我是一个对象}。
-
问题是,我将如何每 5000 秒更新一次这些数据,我已经创建了所有路径等,如果我从那里找到方法会更容易
-
我需要更新这个数组,并在我有 chart.update() 时发送它
标签: javascript arrays json chart.js