• 作图组件react-plotly.js和数据统计组件simple-statistics


    simple-statistics官网:https://simplestatistics.org/docs/#median

      demo结构:

      package.json

    {
      "name": "react-blank",
      "version": "0.1.0",
      "private": true,
      "dependencies": {
    "plotly.js": "^1.52.1", "react": "^16.12.0", "react-dom": "^16.12.0", "react-plotly.js": "^2.4.0", "react-scripts": "3.3.0", "simple-statistics": "^7.0.7" }, "scripts": { "start": "react-scripts --max_old_space_size=4096 start", "build": "react-scripts --max_old_space_size=4096 build", "test": "react-scripts test", "eject": "react-scripts eject" },
    ...
    }

      Figure.jsx

    import React from 'react'
    import PropTypes from 'prop-types'
    import Plot from 'react-plotly.js'
    import * as ss from 'simple-statistics'
    
    export default class Figure extends React.PureComponent {
        render() {
            let median = ss.median(this.props.y)
            let quantile20 = ss.quantile(this.props.y, 0.2)
            let quantile80 = ss.quantile(this.props.y, 0.8)
    
            let median_list = []
            let quantile20_list = []
            let quantile80_list = []
    
            for (var i = this.props.x.length - 1; i >= 0; i--) {
                median_list.push(median)
                quantile20_list.push(quantile20)
                quantile80_list.push(quantile80)
            }
    
            return (
                <div>
                    <Plot
                        data={[
                            {
                                x: this.props.x,
                                y: this.props.y,
                                type: 'scatter',
                                mode: 'markers',
                                name: 'spread',
                            },
                            {
                                x: this.props.x,
                                y: median_list,
                                type: 'scatter',
                                mode: 'line',
                                name: 'median',
                            },
                            {
                                x: this.props.x,
                                y: quantile20_list,
                                type: 'scatter',
                                mode: 'line',
                                name: 'quantile20',
                            },
                            {
                                x: this.props.x,
                                y: quantile80_list,
                                type: 'scatter',
                                mode: 'line',
                                name: 'quantile80',
                            },
                        ]}
                        layout={{  1500, title: 'Plot' }}
                    />
                </div>
            )
        }
    }
    
    Figure.propTypes = {
        x: PropTypes.array,
        y: PropTypes.array,
    }

      index.js

    import React from 'react'
    import ReactDOM from 'react-dom'
    
    import App from './components/App.jsx'
    
    ReactDOM.render(<App />, document.getElementById('root'))

      App.jsx

    import React from 'react'
    import Figure from './Figure.jsx'
    
    export default class App extends React.Component {
        constructor(props) {
            super(props)
            this.state = {}
        }
    
        render() {
            const figureDateKeys = Object.keys(figureData)
            return (
                <div>
                    {figureData && figureDateKeys.length > 0 && <Figure x={figureDateKeys} y={Object.values(figureData)} />}
                </div>
            )
        }
    }
    
    const figureData = {
        "2020-01-20 17:20:00": -0.0027,
        "2020-01-20 17:25:00": -0.0034,
        "2020-01-20 17:30:00": -0.0038,
        "2020-01-20 17:35:00": -0.004,
        "2020-01-20 17:40:00": -0.0041,
        "2020-01-20 17:45:00": -0.0017,
        "2020-01-20 17:50:00": -0.002,
        "2020-01-20 17:55:00": -0.0017,
        "2020-01-20 18:00:00": -0.0014,
        "2020-01-20 18:05:00": -0.0006,
        "2020-01-20 18:10:00": -0.0016,
        "2020-01-20 18:15:00": -0.0025,
        "2020-01-20 18:20:00": -0.003,
        "2020-01-20 18:25:00": -0.0028,
        "2020-01-20 18:30:00": -0.0029,
        "2020-01-20 18:35:00": -0.0031,
        "2020-01-20 18:40:00": -0.0024,
        "2020-01-20 18:45:00": -0.0026,
        "2020-01-20 18:50:00": -0.0021,
        "2020-01-20 18:55:00": -0.0007,
        "2020-01-20 19:00:00": -0.0014,
        "2020-01-20 19:05:00": -0.0018,
        "2020-01-20 19:10:00": -0.0021,
        "2020-01-20 19:15:00": -0.0013,
        "2020-01-20 19:20:00": -0.0015,
        "2020-01-20 19:25:00": -0.002,
        "2020-01-20 19:30:00": -0.0029,
        "2020-01-20 19:35:00": -0.0028,
        "2020-01-20 19:40:00": -0.0034,
        "2020-01-20 19:45:00": -0.004,
        "2020-01-20 19:50:00": -0.0042,
        "2020-01-20 19:55:00": -0.004,
        "2020-01-20 20:00:00": -0.0059,
        "2020-01-20 20:05:00": -0.005,
        "2020-01-20 20:10:00": -0.0055,
        "2020-01-20 20:15:00": -0.0045,
        "2020-01-20 20:20:00": -0.0068,
        "2020-01-20 20:25:00": -0.0009,
        "2020-01-20 20:30:00": -0.0029,
        "2020-01-20 20:35:00": -0.0023,
        "2020-01-20 20:40:00": -0.0035,
        "2020-01-20 20:45:00": 0.0003,
        "2020-01-20 20:50:00": -0.0006,
        "2020-01-20 20:55:00": -0.0024,
        "2020-01-20 21:00:00": -0.002,
        "2020-01-20 21:05:00": -0.0049,
        "2020-01-20 21:10:00": -0.0059,
        "2020-01-20 21:15:00": -0.0087,
        "2020-01-20 21:20:00": -0.0066,
        "2020-01-20 21:25:00": -0.0079,
        "2020-01-20 21:30:00": -0.0051,
        "2020-01-20 21:35:00": -0.0019,
        "2020-01-20 21:40:00": -0.0044,
        "2020-01-20 21:45:00": -0.0018,
        "2020-01-20 21:50:00": 0.0017,
        "2020-01-20 21:55:00": 0.0033,
        "2020-01-20 22:00:00": 0.0005,
        "2020-01-20 22:05:00": 0.0026,
        "2020-01-20 22:10:00": 0.0015,
        "2020-01-20 22:15:00": 0.0017,
        "2020-01-20 22:20:00": 0.0002,
        "2020-01-20 22:25:00": 0.0031,
        "2020-01-20 22:30:00": 0.0026,
        "2020-01-20 22:35:00": -0.0022,
        "2020-01-20 22:40:00": -0.0017,
        "2020-01-20 22:45:00": -0.0028,
        "2020-01-20 22:50:00": -0.0026,
        "2020-01-20 22:55:00": -0.0021,
        "2020-01-20 23:00:00": -0.0025,
        "2020-01-20 23:05:00": -0.0033,
        "2020-01-20 23:10:00": -0.0021,
        "2020-01-20 23:15:00": -0.0012,
        "2020-01-20 23:20:00": -0.0001,
        "2020-01-20 23:25:00": -0.0017,
        "2020-01-20 23:30:00": -0.002,
        "2020-01-20 23:35:00": -0.0008,
        "2020-01-20 23:40:00": -0.0006
    }

      npm start或npm run build时报错:<--- Last few GCs --->

    "scripts": {
        "start": "react-scripts --max_old_space_size=4096 start",
        "build": "react-scripts --max_old_space_size=4096 build"
    }

      渲染效果:

       ---

  • 相关阅读:
    三、视频操作
    C# SendKeys使用方法介绍
    3.如已交60%档,现想交提高缴费档次该怎么办?
    四、答疑解惑
    C# 获取当前网页HTML
    (二)灵活就业人员养老保险和医疗保险
    字符编码(转)
    .NET跨页面传值的方法
    正则表达式之匹配关系(转)
    javascript对DOM的常用操作
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/12222686.html
Copyright © 2020-2023  润新知