CanvasJS动态折线图

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 11:36   179   0

在寻找折线图插件时候,发现了CanvasJS,文档写的很详细,方便易懂。
在写这个时候参照了官网的两个示例,一个是JavaScript Line Charts with Data or Line Markers,另一个是JavaScript Charts & Graphs with Images on top

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
    <!--<script type="text/javascript" src="https://canvasjs.com/assets/script/jquery.canvasjs.min.js"></script>-->
    <script type="text/javascript" src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>

    <title>折线图</title>

    <style>
        .chartContainer{
            width: 850px;
            height: 350px;
        }
    </style>
</head>
<body>
<div id="chartContainer" class="chartContainer"></div>

<script type="text/javascript">
    var chart = new CanvasJS.Chart("chartContainer",
    {
        theme: "theme4",
        animationEnabled: true,
        axisX: {
            valueFormatString: "YYYY.M.DD"

        },
        axisY: {
            title: "数据折线图"
        },
        data: [
            {
                type: "line",
                color: "rgba(103, 148, 239, 1)",
                markerColor: "rgba(103, 148, 239, 1)",
                markerSize: 12,
                dataPoints: [
                    { x: new Date(2017, 5, 8), y: 120, indexLabel: "120",markerType: "rainy"},
                    { x: new Date(2017, 5, 9) , y: 361, indexLabel: "361",markerType: "rainy"},
                    { x: new Date(2017, 5, 10) , y: 125, indexLabel: "125",markerType: "rainy"},
                    { x: new Date(2017, 5, 11) , y: 420, indexLabel: "420",markerType: "rainy"},
                    { x: new Date(2017, 5, 12) , y: 316, indexLabel: "316",markerType: "sunny"},
                    { x: new Date(2017, 5, 13) , y: 200, indexLabel: "200",markerType: "rainy"},
                    { x: new Date(2017, 5, 14) , y: 377, indexLabel: "377",markerType: "rainy"}
                ]
            }
        ]
    });
    chart.render();

    var images = [];
    addImages(chart);

    function addImages(chart) {
        for(var i = 0; i < chart.data[0].dataPoints.length; i++){
            var dpsName = chart.data[0].dataPoints[i].markerType;
            if(dpsName == "rainy"){
                images.push(
                    $('<img>').attr('src', "https://canvasjs.com/wp-content/uploads/images/gallery/gallery-overview/rainy.png")
                );
            }
            else if(dpsName == "sunny"){
                images.push(
                    $('<img>').attr('src', "https://canvasjs.com/wp-content/uploads/images/gallery/gallery-overview/sunny.png")
                );
            }
            images[i].attr("class", dpsName)
                .appendTo($("#chartContainer>.canvasjs-chart-container"));
            positionImage(images[i], i);
        }
    }

    function positionImage(image, index) {
        var imageCenter = chart.axisX[0].convertValueToPixel(chart.data[0].dataPoints[index].x);
        var imageY = chart.axisY[0].convertValueToPixel(chart.data[0].dataPoints[index].y);
        var imageTop =  chart.axisY[0].convertValueToPixel(chart.axisY[0].maximum);
        image.width('20px')
            .css({
                    "position": "absolute",
                    "left": imageCenter - 10 + "px",
                    "top":  imageY - 10 + "px"
                }
            );
    }

    $( window ).resize(function() {
        var rainyCounter = 0, sunnyCounter = 0;
        var imageCenter = 0;
        for(var i=0;i<chart.data[0].dataPoints.length;i++){
            imageCenter = chart.axisX[0].convertValueToPixel(chart.data[0].dataPoints[i].x) - 20;

            if(chart.data[0].dataPoints[i].name == "rainy"){
                $(".rainy").eq(rainyCounter++).css({ "left": imageCenter});
            }
            else if(chart.data[0].dataPoints[i].name == "sunny"){
                $(".sunny").eq(sunnyCounter++).css({ "left": imageCenter});
            }
        }
    });

    function formatter(e) {
        if(e.index === 0 && e.dataPoint.x === 0) {
            return " Low " + e.dataPoint.y[e.index];
        }
        if(e.index == 1 && e.dataPoint.x === 0) {
            return " High " + e.dataPoint.y[e.index];
        }
        else{
            return e.dataPoint.y[e.index];
        }
    }
</script>
</body>
</html>

动态折线图
要注意下:月份是从0开始计数的。
有疑问的可以看下官方文档

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP