Echarts-数据可视化工具

一、认识 ECharts

ECharts,缩写来自 Enterprise Charts,商业级数据图表,是百度的一个开源的数据可视化工具,一个纯 Javascript 的图表库,能够在 PC 端和移动设备上流畅运行,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的 Canvas 库 ZRender,ECharts 提供直观,生动,可交互,可高度个性化定制的数据可视化图表。

创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。Echarts在行业内应用特别广泛。

二、ECharts 有哪些特点

1,ECharts 属于开源软件,并且我们提供了非常炫酷的图形界面,特色是地图,另外还提供了柱状图、折线图、饼图、气泡图及四象限图等;
2,ECharts 使用简单,在官网中为我们封装了 JS,只要会引用就会得到完美的展示效果;
3,ECharts 种类多,ECharts 实现简单,各类图形都有;相应的模板,还有丰富的 API 及文档说明,非常详细;
4,ECharts 兼容性好,基于HTML5,有着良好的动画渲染效果;

三、ECharts 官网,很好很详细

四、简单应用

下面通过几个简单的示例直观的了解一下Echarts

  • 柱状图示例
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>bar</title>
        <!-- 【1】引入 echarts.js -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"></script>
    </head>
    <body>
    <!-- 【2】为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 900px;height:600px;"></div>
    <script type="text/javascript">
    // 【3】基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));
    // 【4】指定图表的配置项和数据
    var option = {
        // 标题
        title: {
            text: 'ECharts 入门示例'
        },
        // 工具箱
        toolbox: {
            show: true,
            feature: {
                saveAsImage: {
                    show: true
                }
            }
        },
        // 图例:在某一位置放置,可配置。可以打开或关闭某一项。
        legend: {
            data: ['销量']
        },
        // x轴
        xAxis: {
            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
        },
        yAxis: {},
        // 数据
        series: [{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
        }]
    };
    // 【5】使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
    </script>
    </body>
    </html>
    
    柱状图.png
  • 折线图示例
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>line</title>
        <!-- 引入 echarts.js -->
         <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"></script>
    </head>
    <body>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 900px;height:600px;"></div>
    <script type="text/javascript">
            // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));
    // 指定图表的配置项和数据
    var option = {
        title: {
            text: 'ECharts 入门示例'
        },
        toolbox: {
            show: true,
            feature: {
                saveAsImage: {
                    show: true
                }
            }
        },
        legend: {
            data: ['销量']
        },
        xAxis: {
            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
        },
        yAxis: {},
        series: [{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
        },
            {
            name: '产量',
            type: 'line',  // 【折线图】
            data: [7, 30, 50, 11, 40, 80]
        }]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
    </script>
    </body>
    </html>
    
    折线图.png
  • 可更换不同的主题(theme)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"></script>
    <script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'),'dark'); //【此处可以设置图示的主题】
    </script>
    
    深色主题.png

我们可以看到,这几步里只有 option 这一步比较复杂,有好多配置项,这就是显示图形内容的主要部分了,简单看一下都有哪些配置项以及各个配置项的含义。

  • title(标题组件)
    // 指定图表的配置项和数据
    var option = {
        title: {
            show:true,
            text: 'ECharts 入门示例',  // 【标题】
            subtext:'学习ECharts',  // 【副标题】
            left:'left', // 【数字就是像素值 ,也可以是 center left right这种值】
            borderColor:'red',  // 【边框】
            borderWidth:5,
            textStyle:{
                fontSize:20
            }
        },
        toolbox: {
            show: true,
            feature: {
                saveAsImage: {
                    show: true
                }
            }
        },
        legend: {
            data: ['销量']
        },
        xAxis: {
            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
        },
        yAxis: {},
        series: [{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
        }]
    };
    
    标题.png
  • toolbox(工具箱组件)
    // 指定图表的配置项和数据
    var option = {
        title: {
            text: 'ECharts 入门示例',
        },
        toolbox: {  // 【工具箱】
            show: true,
            feature: {
                dataView:{
                    show:true
                },
                restore:{
                    show:true
                },
                dataZoom:{
                    show:true
                },
                saveAsImage: {
                    show: true
                },
                magicType: {  // 【视图类型切换,柱状图或折线图。。。等之间的切换】
                    type: ['line', 'bar']
                }
            }
        },
        legend: {
            data: ['销量']
        },
        xAxis: {
            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
      },
        yAxis: {},
        series: [{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
        }]
    };
    
    工具箱.png
  • tooltip(弹窗提示组件)
    var option = {
        title: {
            text: 'ECharts 入门示例',
        },
        tooltip: {  // 【根据鼠标移动显示提示,显示更直观】
            trigger: 'axis',
            // formatter: "{a} <br/>{b} : {c}"  // 【字符串模板,a、b、c 分别代表不同的含义,详见官网】
        },
        legend: {
            data: ['销量']
        },
        xAxis: {
            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
        },
        yAxis: {},
        series: [{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
        }]
    };
    
    弹窗提示.png
  • mark(标记)
    var option = {
        title: {
            text: 'ECharts 入门示例',
        },
    tooltip: {
            trigger: 'axis'
        },
        legend: {
            data: ['销量']
        },
        xAxis: {
            data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
        },
        yAxis: {},
        series: [{
            name: '销量',
            type: 'line',
            data: [5, 20, 36, 10, 10, 20],
            markPoint: {  // 【标记点】
                data: [
                    {type: 'max', name: '最大值'},
                    {type: 'min', name: '最小值',symbol:'arrow'}  // 【符号的形状,大小,旋转角度,都可以自己定义】
                ]
            },
            markLine: {  // 【标记线】
                data: [
                   {type: 'average', name: '平均值'}
                ]
            }
        }]
    };
    
    标记.png
  • pie饼状图
    // 指定图表的配置项和数据
    var option = {
        title : {
            text: '某站点用户访问来源',
            subtext: '纯属虚构',
            x:'center'
        },
        tooltip : {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"  // 【字符串模板,a、b、c分别代表不同的含义】
        },
        legend: {  // 【图例:在某一位置放置,可配置。可以打开或关闭某一项。】
            orient: 'vertical',
            left: 'left',
            data: ['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
        },
        series : [
            {
                name: '访问来源',  // 【图例名字】
                type: 'pie',  // 【饼图类型】
                radius : '55%',  // 【半径】
                center: ['50%', '60%'],  // 【圆心坐标】
                data:[
                    {value:335, name:'直接访问'},
                   {value:310, name:'邮件营销'},
                    {value:234, name:'联盟广告'},
                    {value:135, name:'视频广告'},
                    {value:1548, name:'搜索引擎'}
                ]
            }
        ]
    };
    
    饼图.png
  • gauge仪表图
    <script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));
    // 指定图表的配置项和数据
    var option = {
        tooltip : {
            formatter: "{a} <br/>{b} : {c}%"
        },
        toolbox: {
            feature: {
                restore: {},
                saveAsImage: {}
            }
        },
        series: [
           {
                name: '业务指标',
                type: 'gauge',  // 【仪表图】
                detail: {formatter:'{value}%'},
                data: [{value: 32, name: '完成率'}]
            }
        ]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
    setInterval(function () {  // 【模拟动态数据,修改仪表的动态效果】
        option.series[0].data[0].value = (Math.random() * 100).toFixed(2) - 0;
        myChart.setOption(option, true);
    },2000);
    </script>
    
    仪表图.png
  • radar雷达图
    option = {
        title: {
            text: '基础雷达图'
          },
        tooltip: {},
        legend: {
            data: ['预算分配(Allocated Budget)', '实际开销  (Actual Spending)']
        },
        radar: {
            // shape: 'circle',
            indicator: [
               { name: '销售(sales)', max: 6500},
               { name: '管理(Administration)', max: 16000},
               { name: '信息技术(Information Techology)', max: 30000},
               { name: '客服(Customer Support)', max: 38000},
               { name: '研发(Development)', max: 52000},
               { name: '市场(Marketing)', max: 25000}
            ]
        },
        series: [{
            name: '预算 vs 开销(Budget vs spending)',
            type: 'radar',
            // areaStyle: {normal: {}},
            data : [
               {
                    value : [4300, 10000, 28000, 35000, 50000, 19000],
                    name : '预算分配(Allocated Budget)'
              },
                 {
                    value : [5000, 14000, 28000, 31000, 42000, 21000],
                    name : '实际开销(Actual Spending)'
                }
            ]
        }]
    };
    
    雷达图.png
  • 还可配置多个y轴
    option = {
        tooltip: {
            trigger: 'axis'
        },
        toolbox: {
            feature: {
                dataView: {show: true, readOnly: false},
                magicType: {show: true, type: ['line', 'bar']},
                restore: {show: true},
                saveAsImage: {show: true}
            }
        },
        legend: {
            data:['蒸发量','降水量','平均温度']
        },
        xAxis: [
            {
                type: 'category',
                data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
            }
        ],
     yAxis: [
            {  // 第一个y轴
                type: 'value',
                name: '水量',
                min: 0,
                max: 250,
                interval: 50,
                axisLabel: {
                    formatter: '{value} ml'
                }
            },
            {  // 第二个y轴
                type: 'value',
                name: '温度',
                min: 0,
                max: 25,
                interval: 5,
                axisLabel: {
                    formatter: '{value} °C'
                }
            }
        ],
    series: [
            {
                name:'蒸发量',
                type:'bar',
               data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
            },
            {
                name:'降水量',
                type:'bar',
                data:[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
            },
            {
                name:'平均温度',
                type:'line',
                yAxisIndex: 1,
                data:[2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
            }
        ]
    };
    
    多个y轴.png
  • dataZoom:用于区域缩放,x轴数据量大时可配置。
  • dataRange:值域漫游。

还有一些,比如散点图,k线图,地图 等等,就不一一介绍了,用到的时候还是去官网查阅。

五、相对免费的视频资源

  • 还可以结合一些 相关视频官网 辅助我们更好更快地学习并应用Echarts。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345