echarts之折线图配置

作者: _信仰zmh | 来源:发表于2017-05-08 23:11 被阅读14685次

    之前自学的时候也使用过echarts来制作柱状图,折线图,地图,现在想想那时候做的简直是太LOW了,就是简单的在官网上,模仿人家的示例代码,改改数据,就可以了,原生态的,样子果然是很丑。

    在我们的项目中,我们自己封装了echarts指令,只用自己定义一下样式,然后调用数据接口,就可以了,这里先不多说封装指令了,现在先说说怎么调整样式

    我自己写的一个代码为例,以折线图为例


    一 . 问题汇总: 折线图问题与解决

    • 折线图中的多条折线,怎么设置?
    • 怎么设置echarts的背景颜色?
    • 怎么设置X轴,Y轴的坐标线的颜色?
    • 怎么将X轴的数据倾斜显示?
    • 怎么让你的折线有弧度?

    初始样式如图,以及要解决的问题:

    我的博客地址 http://blog.zhouminghang.xyz

    二. 前提准备条件

    • 要使用echarts,首先要在你的页面中引入echarts.js
    • 要在.html文件中,设置一个容器,并给它设置宽高属性
      • 再次声明,必须给容器设置宽高,它是用来给画布提供一个空间,否则是不会显示的;
    • 最后就是关于echarts的配置;
      • 可以单独写一个js文件,然后引进来;
      • 也可以直接在index.html中写一个<script> // 相关代码 </script>

    index.html文件代码如下:

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title></title>
            <!--第一步: 引入 ECharts 文件 -->
            <script src="js/node_modules/echarts/dist/echarts.min.js"></script>
        </head>
        <body>
              <!--第二步:指定一个容器用来存放echarts,也就是一个设置宽高属性的 DOM节点 -->
        <div id="box" style="width: 600px;height:400px;"></div>
        </body>
    </html>
    
    
    

    我这里图方便,js就直接写在html文件里了

     
    <script>
    // 获取到这个DOM节点,然后初始化
    
        var myChart = echarts.init(document.getElementById("box"));
    
    // option 里面的内容基本涵盖你要画的图表的所有内容
        var option = {
            // 定义样式和数据
        }
        
    // 一定不要忘了这个,具体是干啥的我忘了,官网是这样写的使用刚指定的配置项和数据显示图表。  
        myChart.setOption(option);
    </script>
    
    
    

    注意:

    你在写myChart.setOption(option);这行代码的时候一定不要忘了这个myChart是要和你上面定义的var 变量名对应起来,比如var myChart = echarts.init(document.getElementById("box"));

    举个栗子吧:

    如果你定义的变量名oMyChart,那你就这样写:

    var oMyChart = echarts.init(document.getElementById("box"));
    var option = {
                // 定义样式和数据
                }
    oMyChart.setOption(option);
    

    关键内容都在option中

             var option = {
                            backgroundColor: '#FBFBFB',
                            tooltip : {
                                trigger: 'axis'
                            },
                            legend: {
                                data:['充值','消费']
                            },
    
                            calculable : true,
    
    
                            xAxis : [
                                {
                                    axisLabel:{
                                        rotate: 30,
                                        interval:0
                                    },
                                    axisLine:{
                                      lineStyle :{
                                          color: '#CECECE'
                                      }
                                    },
                                    type : 'category',
                                    boundaryGap : false,
                                    data : function (){
                                        var list = [];
                                        for (var i = 10; i <= 18; i++) {
                                            if(i<= 12){
                                                list.push('2016-'+i + '-01');
                                            }else{
                                                list.push('2017-'+(i-12) + '-01');
                                            }
                                        }
                                        return list;
                                    }()
                                }
                            ],
                            yAxis : [
                                {
    
                                    type : 'value',
                                    axisLine:{
                                        lineStyle :{
                                            color: '#CECECE'
                                        }
                                    }
                                }
                            ],
                            series : [
                                {
                                    name:'充值',
                                    type:'line',
                                    symbol:'none',
                                    smooth: 0.2,
                                    color:['#66AEDE'],
                                    data:[800, 300, 500, 800, 300, 600,500,600]
                                },
                                {
                                    name:'消费',
                                    type:'line',
                                    symbol:'none',
                                    smooth: 0.2,
                                    color:['#90EC7D'],
                                    data:[600, 300, 400, 200, 300, 300,200,400]
                                }
                            ]
                        };
    
    
    
    
    
    
    

    三. 问题解决

    3.1 怎么给echarts的容器添加背景色?

    这是我碰到的第一个坑,你是不是和我一样,直接给容器添加了background-color属性,但是你会发现并没有什么卵用

    代码如下:

    <div id="box" style="width: 600px; height:400px; background-color: pink;"></div>
    
    

    效果如下:

    我的博客地址 http://blog.zhouminghang.xyz

    你会发现背景色应用不上,这里我自己认为,echarts画折线图什么的,就相当于是使用canvas在画图,它在画图前已经将画布初始化了,所以给容器添加背景色是不行的,那么怎么办呢?

    解决办法:

    • 要在optionecharts图的配置中进行配置,添加background-color属性;
    • 为了区别,看看到底是给容器添加的背景色应用上了,还是option中的背景色应用上了;
    • 我们设置容器背景为粉色,设置echarts中的option为#FBFBFB

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/node_modules/echarts/dist/echarts.min.js"></script>
    </head>
    
    <body>
        <div id="box" style="width: 1000px; height:500px; background-color: pink;"></div>
        <script>
        // 获取到这个DOM节点,然后初始化
    
        var myChart = echarts.init(document.getElementById("box"));
    
        // option 里面的内容基本涵盖你要画的图表的所有内容
        // 定义样式和数据
        var option = {
            // 给echarts图设置背景色
            backgroundColor: '#FBFBFB',                  // -----------> // 给echarts图设置背景色   
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['充值', '消费']
            },
    
            calculable: true,
    
    
            xAxis: [{
                type: 'category',
                // boundaryGap: false,
                data: function() {
                    var list = [];
                    for (var i = 10; i <= 18; i++) {
                        if (i <= 12) {
                            list.push('2016-' + i + '-01');
                        } else {
                            list.push('2017-' + (i - 12) + '-01');
                        }
                    }
                    return list;
                }()
            }],
            yAxis: [{
    
                type: 'value'
            }],
            series: [{
                name: '充值',
                type: 'line',
                data: [800, 300, 500, 800, 300, 600, 500, 600]
            }, {
                name: '消费',
                type: 'line',
                data: [600, 300, 400, 200, 300, 300, 200, 400]
            }]
        };
        
    
        // 一定不要忘了这个,具体是干啥的我忘了,官网是这样写的使用刚指定的配置项和数据显示图表。  
        myChart.setOption(option);
        </script>
    </body>
    
    </html>
    
    
    

    区别以及效果:

    在这里我同时给容器添加背景色,在echarts配置中设置背景色,一会我们看看是哪个背景色作用上了,代码如下:

    我的博客地址 http://blog.zhouminghang.xyz

    很显然,配置里的背景色应用上了,所以直接给容器设置背景是行不通的,效果如图所示:

    我的博客地址 http://blog.zhouminghang.xyz

    3.2 怎么设置多条折线以及每条折线的颜色

    • series中以数组形式添加多组数据即可;
    • 在每条折线里面直接添加color: ['相应的颜色']

    代码如下:

    我的博客地址 http://blog.zhouminghang.xyz

    效果图如下:

    我的博客地址 http://blog.zhouminghang.xyz

    3.3 去掉小圆点

    • 设置symbol: 'none'

    代码对比:

    我的博客地址 http://blog.zhouminghang.xyz

    效果对比:

    我的博客地址 http://blog.zhouminghang.xyz

    3.4 设置折线图的弧度

    • 设置smooth属性
    • 属性值在0-1之间

    代码对比图:

    我的博客地址 http://blog.zhouminghang.xyz

    效果对比图:

    我的博客地址 http://blog.zhouminghang.xyz

    3.5 设置坐标轴的颜色

    为了让效果颜色更加明显,就给坐标轴添加比较显眼的颜色,只做个示范用,项目中肯定不会用这么重的颜色,一般使用灰色系的颜色比较淡的

    • 设置X轴颜色为红色
      • 在xAxis下添加
    axisLine: {
                    lineStyle: {
                        color: 'red'
                     }
                 },
    
    • 同理设置Y轴

    代码:

    我的博客地址 http://blog.zhouminghang.xyz

    效果图:

    我的博客地址 http://blog.zhouminghang.xyz

    3.6 怎么让折线图从X轴0刻度开始

    • 设置boundaryGap: false,

    代码如下:

    我的博客地址 http://blog.zhouminghang.xyz

    效果如下:

    我的博客地址 http://blog.zhouminghang.xyz

    3.7 怎么让X轴的时间这组数据旋转

    有时候我们X轴数据比较长又比较多的时候,水平放置肯定成不下,那我们就让它倾斜着放,这样就可以放更多的数据。

    好了,废话不多说,看代码:

    我的博客地址 http://blog.zhouminghang.xyz

    效果如图:

    我的博客地址 http://blog.zhouminghang.xyz

    四. 突然发现我写的有个小问题,少了一组数据,很尴尬的赶脚

    • 你可以直接在data中添加一组数据
    • 哈哈,我比较懒,就直接修改那个判断条件,将i<=18改成i<18;

    完整的代码如下:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/node_modules/echarts/dist/echarts.min.js"></script>
    </head>
    
    <body>
        <div id="box" style="width: 1000px; height:500px; background-color: pink;"></div>
        <script>
        // 获取到这个DOM节点,然后初始化
    
        var myChart = echarts.init(document.getElementById("box"));
    
        // option 里面的内容基本涵盖你要画的图表的所有内容
        var option = {
            // 定义样式和数据
            backgroundColor: '#FBFBFB',
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['充值', '消费']
            },
    
            calculable: true,
    
    
            xAxis: [{
                axisLabel: {
                    rotate: 30,
                    interval: 0
                },
                axisLine: {
                    lineStyle: {
                        color: 'red'
                    }
                },
                type: 'category',
                boundaryGap: false,
                data: function() {
                    var list = [];
                    for (var i = 10; i < 18; i++) {
                        if (i <= 12) {
                            list.push('2016-' + i + '-01');
                        } else {
                            list.push('2017-' + (i - 12) + '-01');
                        }
                    }
                    return list;
                }()
            }],
            yAxis: [{
    
                type: 'value',
                axisLine: {
                    lineStyle: {
                        color: '#CECECE'
                    }
                }
            }],
            series: [{
                name: '充值',
                type: 'line',
                 symbol: 'none',
                 smooth: 0.3,
                 color: ['#66AEDE'],
                data: [800, 300, 500, 800, 300, 600, 500, 600]
            }, {
                name: '消费',
                type: 'line',
                 symbol: 'none',
                 smooth: 0.3,
                 color: ['#90EC7D'],
                data: [600, 300, 400, 200, 300, 300, 200, 400]
            }]
        };
        
    
        // 一定不要忘了这个,具体是干啥的我忘了,官网是这样写的使用刚指定的配置项和数据显示图表。  
        myChart.setOption(option);
        </script>
    </body>
    
    </html>
    
    
    
    

    效果如图:

    我的博客地址 http://blog.zhouminghang.xyz

    相关文章

      网友评论

      • 2c4fcd6e983d:如果这样设置,那x和y轴的文字也会跟着变色,不能单独设置x和y的文字颜色再单独设置,xy轴的坐标边线的颜色吗
      • 行舟2009:有没有默认选中某个点的方法?
      • JackZhOOOOZ:请问如何调整两点之间的距离? 比如(2016-02-04,500)和(2016-02-03,300),如何调整水平距离呢?
      • 祈澈菇凉:ajax与后台的数据交互怎么写?
        祈澈菇凉:@lzlylxy 嗯嗯,会了
        ZacharyLee:你会了吗?ajax与后台的数据交互
      • 无解_ae90:请问怎么写从后台获取数据显示一条动态数据线
        ZacharyLee:你会了吗?从后台获取数据显示动态数据
      • 孤岛渔夫:请问你div #box 的宽度能用100%么?我最近发现个问题用了100%后整个图片的宽度只有94也不知道怎么计算的,求解
        _信仰zmh:@孤岛渔夫 我不确定是不是这个,你可以看看grid里面设置x、y、x2、y2、top、left、 right的值,它们可以调整echarts画的图在容器中的位置,从而达到铺满整个容器的效果
        孤岛渔夫:@_信仰zmh 谢谢,我试试
        _信仰zmh:刚开电脑,你说的这个问题,1.容器支持设置百分比宽度; 2.前提是代码一上来就 设置 *{margin:0;padding:0;},将所有容器自带的margin、padding初始化掉,这时候canvas的图片宽度就是 (100%实际继承宽度 - 80px)/ 100%实际继承宽度 约= 94.7%,我自己觉得应该是echarts配置中的grid中有个right值,设置画图与容器边框的留白距离,默认值是80px,你可以试试将grid :{right:0} 手动设置为0试试
      • 枫_d646:请问知道怎么设置 y 轴的数据吗,因为我的数据相差不大, 就像 1, 1.3, 0.8,这种的,意思就是出来像一条直线,我想的就是调整 y 轴的数据,然折现看出来幅度大点,而不是一更直线
        枫_d646:@枫_d646 这个好像只能是格式化 y 轴的数值啊,改不了折现的幅度啊
        枫_d646:@_信仰zmh 好吧,我试试,谢了
        _信仰zmh:@枫_d646 在yAxis下添加axisLabel然后用formatter写一个函数,处理每一个放进去的值,然后return出来

      本文标题:echarts之折线图配置

      本文链接:https://www.haomeiwen.com/subject/uzgvtxtx.html