我想用此plugin实时流式传输数据。但是目前,我的图表显示了相同的数据集,并保持静态。即使我正在遵循此website的react示例,以下也是我使用的代码:
import React from 'react';
import {Line} from 'react-chartjs-2';
import 'chartjs-plugin-streaming';
var createReactClass = require('create-react-class');
const data = {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [
{
label: 'Price',
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: 1,
pointHitRadius: 10,
data: [65, 59, 80, 81, 56, 55, 40]
}
]
};
export default createReactClass({
displayName: 'LineExample',
render() {
return (
<div>
<Line
data={data}
options={{
scales: {
xAxes: [{
realtime: {
onRefresh: function(chart) {
data.dataset.data.push({
x: Date.now(),
y: Math.random()
});
},
delay: 2000
}
}]
}
}}
/>
</div>
);
}
});
可能是什么问题?谢谢!
没有片段可玩,我想问题出在这里
onRefresh: function(chart) {
data.dataset.data.push({
x: Date.now(),
y: Math.random()
});
}
您已将新数据推送到初始数据集,但是您可能需要将其推送到图表本身。查看以下示例:
https://nagix.github.io/chartjs-plugin-streaming/samples/bar-horizontal.html
似乎您应该将数据直接传递到图表
chart.config.data.datasets.forEach(function(dataset) {
dataset.data.push({
x: Date.now(),
y: randomScalingFactor()
});
});
或者,(再次,我只是猜测没有mvp示例可播放的新数据的位置,console.log在onRefresh回调中找到图表变量以找到正确的位置),如果您在像stackblitz这样的地方,我/某人可以更新此答案。
onRefresh: function(chart) {
chart.dataset.data.push({
x: Date.now(),
y: Math.random()
});
}
您提供的数据格式是错误的,您正在尝试
data.dataset.data.push,但您提供的数据只有X值。您需要重新格式化,数据应具有以下格式:
{x:$(value),y:$ {value}}] >>
import React from "react";
import { Line } from "react-chartjs-2";
import "chartjs-plugin-streaming";
var createReactClass = require("create-react-class");
const data = {
datasets: [
{
label: "Dataset 1",
borderColor: "rgb(255, 99, 132)",
backgroundColor: "rgba(255, 99, 132, 0.5)",
lineTension: 0,
borderDash: [8, 4],
data: []
}
]
};
const options = {
scales: {
xAxes: [
{
type: "realtime",
realtime: {
onRefresh: function() {
data.datasets[0].data.push({
x: Date.now(),
y: Math.random() * 100
});
},
delay: 2000
}
}
]
}
};
export default createReactClass({
displayName: "LineExample",
render() {
return (
<div>
<Line data={data} options={options} />
</div>
);
}
});