echarts简单入门

前一阵做了一个公众号投放的系统,后端同学做的,后期又出了公众号投放2.0,其中有几个模块交互比较复杂,交给前端来做了,其中一个模块是做一个坐标系,用来表示该公众号广告投放是否值得投放,发现他们项目里本身就引入了echarts,于是决定使用echarts做一个表格,以前没使用过echarts,只是知道有这么一个工具,用过之后发现,天呢,怎么有这么好用的小可爱啊,特意来分享一下

需求是这样的(说实话,虽然是给公司自己人用,需求没有分配UI资源,但是这也太丑啦):

1、 坐标系和函数图像的绘制见“计算逻辑”章节。

2、 坐标系中的数据点包含待审核”“审核通过”“排期中”“投放完成”4种状态的记录,分别用不同颜色展示。样式见上图。

 

在本地,使用echarts写了一个小demo,鼠标移入每一个坐标点都会显示坐标点的详细信息,做出来的效果图如下:

demo的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div id="chartmain" style="600px; height: 400px;margin:20px auto"></div>
</body>
</html>
<script type="text/javascript" src="./echarts.min.js"></script> 
<script type="text/javascript">

    //坐标图渲染函数
    // 传参示例
    // var dataPonit={    
    //     waitCheck:[[-8,490,'待审核1'],[2, 44,'待审核2']],  //待审核
    //     passCheck:[],  //审核通过
    //     bargaining:[], //议价完成
    //     putIn:[],      //投放完成
    // }
    //x的取值范围
    // var xArea=[-10,20]
    function renderPonit(dataPonit,xArea){
        //拟合曲线的函数
        function easingFunc(k){
            if(k>0){
                return Math.pow(k,2.5)
            }else if(k<0){
                return -Math.pow(Math.abs(x),2.3)
            }else if(k=0){
                return 0
            }
        }
        var dataLine = [];
        //根据需要的坐标轴生成拟合曲线的点
        for (var i = xArea[0]; i <= xArea[1]; i=i+0.01) {
            var x = i ;
            var y = easingFunc(x);
            dataLine.push([x, y]);
        }
        option = {
            title: {
                text: '账号质量与流量关系图',
                subtext: '(包含待审核、审核通过、议价通过、投放完成数据)'
            },
            tooltip: {
                //鼠标滑过触发散点展示的内容
                formatter: function (params) { 
                    console.log(params)
                    if (params.value.length > 1) {
                        return "文章:" + params.value[2] +
                        "<br />质量:" + params.value[0] + '<br />流量:'
                        + params.value[1];
                    }
                    else {
                        return params.name + ' : ' + params.value;
                    }
                },
            }, 
            legend: {
                x:'right',
                y:'top',
                data:['待审核','审核通过','议价完成','投放完成']
            },
            xAxis: [
                {
                    // name: '质量',
                    type: 'value',
                },
            ],
            yAxis: [
                {
                    // name: '流量',
                    type: 'value',
                },

            ],
            series: [
                {
                    name:'待审核',
                    type:'scatter',
                    symbolSize: 6, //圆点的size
                    itemStyle: {
                        color: 'red'
                    },
                    data:dataPonit.waitCheck
                },
                {
                    name:'审核通过',
                    type:'scatter',
                    symbolSize: 6,
                    itemStyle: {
                        color: 'green'
                    },
                    data:dataPonit.passCheck
                },
                {
                    name:'议价完成',
                    type:'scatter',
                    symbolSize: 6,
                    itemStyle: {
                        color: '#33FFFF'
                    },
                    data:dataPonit.bargaining
                },
                {
                    name:'投放完成',
                    type:'scatter',
                    symbolSize: 6,
                    itemStyle: {
                        color: 'black'
                    },
                    data:dataPonit.putIn
                },
                {
                    name:'拟合曲线',
                    type:'line',
                    smooth: true,
                    showSymbol: false,  //是否显示圆点
                    data:dataLine
                }
            ]
        };
        //初始化echarts实例
        var myChart = echarts.init(document.getElementById('chartmain'));

        //使用制定的配置项和数据显示图表
        myChart.setOption(option);
    }
    

    //传入每个点的坐标[x,y,'文章名称']
    var dataPonit={    
        waitCheck:[[-8,490,'待审核1文章名称'],[2, 44,'待审核2文章名称'],[2.2, 606,'待审核3文章名称'],[4.4, 250,'待审核4文章名称'],[6.6, 800,'apple文章名称'] ],  //待审核
        passCheck:[[8,-90,'审核通过1文章名称'],[-2, -50,'审核通过2文章名称'],[2.2, -70,'审核通过3文章名称'],[4.4, -40,'审核通过4文章名称'],[-6.6, 300,'apple文章名称'] ],  //审核通过
        bargaining:[[8,900,'议价完成1文章名称'],[2, 50,'议价完成2文章名称'],[2.2, 70,'议价完成3文章名称'],[4.4, 400,'议价完成4文章名称'],[6.6, -30,'apple文章名称'] ], //议价完成
        putIn:[[-8, 400,'投放完成1文章名称'],[11, 300,'投放完成2文章名称'] ],      //投放完成
    }
    //传入x的取值范围
    var xArea=[-10,30]
    renderPonit(dataPonit,xArea)
</script> 

 

 

 

 

原文地址:https://www.cnblogs.com/katydids/p/11399658.html