我想用这个 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>
);
}
});
可能是什么问题? 谢谢!
最佳答案
您提供的数据格式错误,您正在尝试
data.dataset.data.push
但您提供的数据只有 X 值。您需要重新格式化它,数据应具有如下格式:{x:$(value), y:${value}}
打开CodeSandbox中下面的代码片段
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>
);
}
});
关于javascript - 使用 React 和 ChartJS 进行图形流实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382572/