图形通过react和chartjs传输实时数据

问题描述 投票:-1回答:2

我想用此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>
      );
    }
});

可能是什么问题?谢谢!

javascript reactjs chart.js frontend
2个回答
0
投票

没有片段可玩,我想问题出在这里

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()
  });
}

0
投票

您提供的数据格式是错误的,您正在尝试

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>
    );
  }
});

https://codesandbox.io/s/winter-breeze-zvywv

© www.soinside.com 2019 - 2024. All rights reserved.