zoukankan      html  css  js  c++  java
  • chartjs 曲线图 纪要

    数据采集中各个终端的数据时间是不固定和数量也不固定的,所以不能用统一的x轴 标上固定数量的值区间的方式的 ,我简单发现百度的echart 没有具体的例子.

    还是返回使用echarjs 尽管花样组合上可能少了点,但是却也够用

    官网:https://www.chartjs.org/

    源码是开源的.

    1:在html代码中加入这段:

    <canvas id="myChart"></canvas>

    2:   灰色地方labels 是可以去掉的, 在不固定具体时间的x轴坐标值的情况下,labels 可以去掉, 然后

    datasets内的data 需要写成下边红色字体的样式 是一个json 格式的数组,当然data内数值数据多了需要一个一个push进去, 直接用json格式怼上似乎无效
    var config = {
                type: 'line',
                data: {
                    labels: [ // Date Objects
                        newDate(0),
                        newDate(1),
                        newDate(2),
                        newDate(3),
                        newDate(4),
                        newDate(5),
                        newDate(6)
                    ],
                    datasets: [{
                        label: 'My First dataset',
                        backgroundColor: color(window.chartColors.red).alpha(0.5).rgbString(),
                        borderColor: window.chartColors.red,
                        fill: false,
                        data: [
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor()
                        ],
                    }, {
                        label: 'My Second dataset',
                        backgroundColor: color(window.chartColors.blue).alpha(0.5).rgbString(),
                        borderColor: window.chartColors.blue,
                        fill: false,
                        data: [
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor(),
                            randomScalingFactor()
                        ],
                    }, {
                        label: 'Dataset with point data',
                        backgroundColor: color(window.chartColors.green).alpha(0.5).rgbString(),
                        borderColor: window.chartColors.green,
                        fill: false,
                        data: [{
                            x: newDateString(0),
                            y: randomScalingFactor()
                        }, {
                            x: newDateString(5),
                            y: randomScalingFactor()
                        }, {
                            x: newDateString(7),
                            y: randomScalingFactor()
                        }, {
                            x: newDateString(15),
                            y: randomScalingFactor()
                        }],
                    }]
                },
                options: {
                    title: {
                        text: 'Chart.js Time Scale'
                    },
                    scales: {
                        x: {
                            type: 'time',
                            time: {
                                parser: timeFormat,
                                // round: 'day'
                                tooltipFormat: 'll HH:mm'
                            },
                            scaleLabel: {
                                display: true,
                                labelString: 'Date'
                            }
                        },
                        y: {
                            scaleLabel: {
                                display: true,
                                labelString: 'value'
                            }
                        }
                    },
                }
            };
    到这儿会存在一个问题,x 轴的时间值x的格式 问题, 这里的格式chartjs 绑定的moment.js 中设置的格式一样
      var timeFormat = 'YYYY/MM/DD HH:mm:ss'; 服务器传过来的数值也要转换成这种格式,我是在服务器上直接把datetime 直接转换成字符串的方式 , 因为不转的话 传到前端就是date(12342423423) 类似这个字样的东西

    前端js完整代码

    <script>
        var timeFormat = 'YYYY/MM/DD HH:mm:ss';
    
        function newDate(days) {
          //  console.log(moment().add(days, 'h').toDate())
            return moment().add(days, 'h').toDate();
        }
    
        function newDateString(days) {
         //   console.log(moment().add(days, 'h').format(timeFormat))
            return moment().add(days, 'h').format(timeFormat);
        }
        var color = Chart.helpers.color;
        var config = {
            type: 'line',
            data: {
               @* labels: [
                    newDateString(0),
                    newDateString(1),
                    newDateString(2),
                     newDateString(3),
                    newDateString(4),
                    newDateString(5),
                     newDateString(6),
                    newDateString(7),
                    newDateString(8)
                ],*@
                datasets: [ @*{
                    label: '终端1',
                        backgroundColor: color('rgb(75, 192, 192)').alpha(0.5).rgbString(),
                        borderColor: color('rgb(75, 192, 192)').alpha(0.5).rgbString(),
                    fill: false,
                    data: [{
                        x: newDateString(0),
                        y: 25
                    }, {
                        x: newDateString(1),
                        y: 19
                    }, {
                        x: newDateString(2),
                        y: 18
                    }, {
                        x: newDateString(3),
                        y: 23
                    }],
                },
                {
                        label: '终端2',
                        backgroundColor: color('rgb(75, 192, 192)').alpha(0.5).rgbString(),
                        borderColor: color('rgb(75, 192, 192)').alpha(0.5).rgbString(),
                        fill: false,
                        data: [{
                            x: newDateString(0),
                            y: 36
                        }, {
                            x: newDateString(1),
                            y: 25
                        }, {
                            x: newDateString(2),
                            y: 13
                        }, {
                            x: newDateString(3),
                            y: 26
                        }],
                    
                    },
                    {
                        label: '终端3',
                        backgroundColor: color('rgb(75, 192, 196)').alpha(0.5).rgbString(),
                        borderColor: color('rgb(75, 102, 192)').alpha(0.5).rgbString(),
                        fill: false,
                        data: [{
                            x: newDateString(0),
                            y: 20
                        }, {
                            x: newDateString(1),
                            y: 30
                        }, {
                            x: newDateString(2),
                            y: 40
                        }, {
                            x: newDateString(3),
                            y: 26
                        }],
                    }*@
    
                ]
            },
            options: {
                title: {
                    text: 'Chart.js Time Scale'
                },
                scales: {
                    xAxes: [{
                        type: 'time',
                        time: {
                            parser: timeFormat,
                         //    round: 'day',
                          //  quarter: 'MMM YYYY'
                            tooltipFormat: 'll h:mm:ss a'
                        },
                        scaleLabel: {
                            display: true,
                            labelString: 'Date'
                        }
                    }],
                    yAxes: [{
                        scaleLabel: {
                            display: true,
                            labelString: 'value'
                        }
                    }]
                },
            }
        };
    
        window.onload = function () {
            var ctx = document.getElementById('myChart').getContext('2d');
            window.myLine = new Chart(ctx, config);
    
        };
    
        var colorNames = Object.keys({
            red: 'rgb(255, 99, 132)',
            orange: 'rgb(255, 159, 64)',
            yellow: 'rgb(255, 205, 86)',
            green: 'rgb(75, 192, 192)',
            blue: 'rgb(54, 162, 235)',
            purple: 'rgb(153, 102, 255)',
            grey: 'rgb(201, 203, 207)', 
            SaddleBrown: 'rgb(139 69 19)',
            DarkCyan:'rgb(0 139 139)'
        });
        $('#addDataset').click(function () {
            $.ajax({
                type: "GET",
                url: "/AutoNetwork/ChartsLocations/LocationData",
                //   data: { username: $("#username").val(), content: $("#content").val() },
              //  data: { lastvalue: JsLastDatetime, terminal: jsvalues.terminal },
                dataType: "json",
                success: function (data1) {
               //     console.log(data1);
    
                    //根据数量新建datasets
                    var termlist = data1.Terminal_lst;                
                 //   console.log(termlist);
                    for (var i = 0; i < termlist.length; i++) {
                        var colorName = colorNames[config.data.datasets.length % colorNames.length]                
    
                        var newColor = window.chartColors[colorName];
                        var newDataset = {
                            label: '终端:' + termlist[i].DataIMEI,
                            borderColor: newColor,
                            backgroundColor: color(newColor).alpha(0).rgbString(),
                            data: [],
                        };
      
                        var tvlst = termlist[i].TimeAndValue_lst
                        for (var j = 0; j < tvlst.length; j++) {
                          //  console.log(tvlst[i])
                            newDataset.data.push(tvlst[j]);
                        }
                      //  console.log(da);  
                        config.data.datasets.push(newDataset);
                        window.myLine.update();
    
                    }
                }
                , error: function (err) {
                   // console.log(err.statusText);
                    console.log('异常');
                }
            });
        });
        window.chartColors = {
            red: 'rgb(255, 99, 132)',
            orange: 'rgb(255, 159, 64)',
            yellow: 'rgb(255, 205, 86)',
            green: 'rgb(75, 192, 192)',
            blue: 'rgb(54, 162, 235)',
            purple: 'rgb(153, 102, 255)',
            grey: 'rgb(201, 203, 207)'
        };
    </script>

     

  • 相关阅读:
    MySQL计算月份间隔的函数
    《认知天性:让学习轻而易举的心理学规律》
    Ubuntu通过iptables配置 ip 代理转发
    Ubuntu开启/var/log/messages
    Ubuntu通过Nginx安装Webdav
    Ubuntu通过iptables防止ssh暴力破解
    frp内网穿透
    Vim配置
    Linux为STDOUT的关键字设置颜色
    Maven项目中在properties 中使用 ${} 来引用pom文件中的属性
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/13278921.html
Copyright © 2011-2022 走看看