系统了解ECharts的使用

ECharts是一款开源的统计图表框架,ECharts 底层依赖 ZRender,ZRender是一个轻量级的二维绘制库。ECharts的使用也是非常的简单,网上有很多教程,这里再简单的整理一下。

首先,echarts.min.js的引入;
可以去官网或github上下载合适的版本,也可以优雅地使用npm install echarts --save命令下载,这里从github下载最新的版本4.7.0;

第二,在进行统计图的使用之前,还有一点非常重要,那就是主题的设置。
echarts默认有三个主题,第一个是默认的主题,第二个是dark,黑色的背景;第三个是light,白色的背景;统计图表里的颜色,有默认值。

很多同事,包括我自己,一上来就画统计图,还不知道有主题设置这一说,后面在调整统计图里的色调时,费了老大的劲了,而且越调整越不协调,搞得花里胡哨的。通过设置主题可以避免这个繁琐的环节。

先看看效果,有对比,才有差异;主题设置是很重要的一环,选对了主题,后面就不需要手动设置color调整颜色了,调色绝对是个费时费力不讨好的活,毕竟每个人的审美观不同。选对了主题,就不用拘于调色这种小节了,多省事。

就用饼图,做三种主题的的区分吧;


默认主题
dark主题
light主题
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>myProject</title>
    <!-- 引入 lib/echarts.custom.min.js -->
    <script src="lib/echarts.min.js"></script>
</head>
<body>
    <div id="main" style="width: 600px;height:400px;"></div>
    <script>
        // 绘制图表。
        var pieMain = echarts.init(document.getElementById('main'),'light');//使用默认样式、dark、light;
        
        pieMain.setOption({
            series: {
                type: 'pie',
                data: [
                    {name: 'A', value: 1212},
                    {name: 'B', value: 2323},
                    {name: 'C', value: 1919}
                ]
            }
        });
    </script>
</body>
</html>

这三种主题,如果都不满意,那么可以通过 ECharts主题定制 自定义主题,这些主题,有主色调,媚而不妖,太耐看了。

      //设置主题
        $.getJSON('lib/wonderland.json', function (themeJSON) {
            echarts.registerTheme('wonderland',themeJSON)
            var chart = echarts.init(document.getElementById('main'), 'wonderland');
            chart.setOption({
                series: {
                    type: 'pie',
                    data: [
                        {name: 'A', value: 1212},
                        {name: 'B', value: 2323},
                        {name: 'C', value: 1919},
                        {name: 'D', value: 1719},
                        {name: 'E', value: 1519}
                    ]
                }
            });
        });
自定义主题效果图-梦幻仙境

echarts的js文件有三个,需要注意一下,echarts.js体积最大,包含所有的图表和组件;echarts.common.js,体积适中,包含常见的图表和组件;echarts.simple.js,体积较小,仅包含最常用的图表和组件;

做数据统计的目的,是让数据说话,不用看繁多的数据记录,通过一个图表简单明了地把数据的趋势、历史曲线展现出来。既然如此,每个统计图表都有其特别的用途,每个图的用途不同,关注点自然也不同。

在ECharts中有多少统计图形呢,请看下图,仔细数一数,有二十多种,这还是单一的,不算复合的。


图表chart

除了图表,还有坐标系;


坐标系

组件也是很重要的一环,锦上添花的小物件;


组件

折线图,用线条的升降表示事物的发展变化趋势;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>myProject</title>
    <script src="lib/jquery.min.js"></script>   
    <script src="lib/echarts.min.js"></script>
    <!--以引用的方式调用theme,必须放置echarts文件后-->
    <script src="lib/wonderland.js"></script>
</head>
<body>
    <div id="main" style="width: 600px;height:400px;"></div>
    <script>
        var chart = echarts.init(document.getElementById('main'), 'wonderland');            
        var option = {
            legend: {
                left: 'center',
                top: 'top'
            },
            dataset: {
                // 提供一份数据。
                source: [
                    ['product', '橘子', '桃子', '苹果', '西瓜'],
                    ['2012', 43.3, 85.8, 93.7, 65.8],
                    ['2013', 83.1, 73.4, 55.1, 83.4,],
                    ['2014', 86.4, 65.2, 82.5, 75.2,],
                    ['2015', 72.4, 53.9, 39.1, 63.9,]
                ]
            },
            xAxis: {
                type: 'category'
            },
            yAxis: {
                type: 'value',
            },
            series: [
                {type: 'line'},{type: 'line'},{type: 'line'},{type: 'line'}
            ]
        };      
        chart.setOption(option);
    </script>
</body>
</html>
折线效果图

饼图,以一个圆的面积表示总体,用扇形的面积表示部分在总体中所占的百分比;展示部分与总体的关系,部分相对于总数的大小。上面已有例子,这里忽略。

柱形图,条图,也是很常用的统计图,现在柱形图的展示方式也多了花样;

        var chart = echarts.init(document.getElementById('main'), 'wonderland');
        var option = {
            legend: {},
            tooltip: {},
            dataset: {
                source: [
                    ['product', '2012', '2013', '2014', '2015'],
                    ['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
                    ['Milk Tea', 86.5, 92.1, 85.7, 83.1],
                    ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]
                ]
            },
            xAxis: [
                {type: 'category', gridIndex: 0},
                {type: 'category', gridIndex: 1}
            ],
            yAxis: [
                {gridIndex: 0},
                {gridIndex: 1}
            ],
            grid: [
                {bottom: '55%'},
                {top: '55%'}
            ],
            series: [
                // 这几个系列会在第一个直角坐标系中,每个系列对应到 dataset 的每一行。
                {type: 'bar', seriesLayoutBy: 'row'},
                {type: 'bar', seriesLayoutBy: 'row'},
                {type: 'bar', seriesLayoutBy: 'row'},
                // 这几个系列会在第二个直角坐标系中,每个系列对应到 dataset 的每一列。
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
                {type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
            ]
        }
        chart.setOption(option);
多坐标多系列

饼图和折线图的完美结合;

var chart = echarts.init(document.getElementById('main'), 'wonderland');
        var option = {
                legend: {},
                tooltip: {
                    trigger: 'axis',
                    showContent: false
                },
                dataset: {
                    source: [
                        ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
                        ['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
                        ['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
                        ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
                        ['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
                    ]
                },
                xAxis: {type: 'category'},
                yAxis: {gridIndex: 0},
                grid: {top: '55%'},
                series: [
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {type: 'line', smooth: true, seriesLayoutBy: 'row'},
                    {
                        type: 'pie',
                        id: 'pie',
                        radius: '30%',
                        center: ['50%', '25%'],
                        label: {
                            formatter: '{b}: {@2012} ({d}%)'
                        },
                        encode: {
                            itemName: 'product',
                            value: '2012',
                            tooltip: '2012'
                        }
                    }
                ]
            };

            chart.on('updateAxisPointer', function (event) {
                var xAxisInfo = event.axesInfo[0];
                if (xAxisInfo) {
                    var dimension = xAxisInfo.value + 1;
                    chart.setOption({
                        series: {
                            id: 'pie',
                            label: {
                                formatter: '{b}: {@[' + dimension + ']} ({d}%)'
                            },
                            encode: {
                                value: dimension,
                                tooltip: dimension
                            }
                        }
                    });
                }
            });
        chart.setOption(option);
饼图与折线的完美组合

基础概念一览
echarts 实例,一个网页中可以有多个实例;
系列(series),一个实例里有多个系列,每个系列的type可以是line(折线图)、bar(柱状图)、pie(饼图)、scatter(散点图)、graph(关系图)、tree(树图)等其中的一种;
组件(component):xAxis(直角坐标系 X 轴)、yAxis(直角坐标系 Y 轴)、grid(直角坐标系底板)、angleAxis(极坐标系角度轴)、radiusAxis(极坐标系半径轴)、polar(极坐标系底板)、geo(地理坐标系)、dataZoom(数据区缩放组件)、visualMap(视觉映射组件)、tooltip(提示框组件)、toolbox(工具栏组件)、series(系列)这些都属于组件;
option 描述图表:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。
组件之间的定位需要靠坐标系,坐标系又有直角坐标系(grid)、极坐标系(polar)、地理坐标系(GEO)、单轴坐标系(singleAxis)、日历坐标系(calendar);

一句话的概括:
一个页面上可以有多个echarts 实例,一个echarts 实例中包含多个系列(series),系列需要运行在坐标系上,还有零零碎碎的很多组件(component),系列、组件都被装在option容器里面,通过最后的设置option,就渲染成了图表。

更多精彩,请参考以下文档
github下载地址:https://github.com/apache/incubator-echarts/releases
EChats下载地址:https://echarts.apache.org/zh/download.html
EChats文档:https://echarts.apache.org/zh/tutorial.html
主题的设定:https://echarts.baidu.com/theme-builder/
官网: https://echarts.baidu.com/index.html
常见问题: https://www.echartsjs.com/zh/faq.html
菜鸟教程: https://www.runoob.com/echarts/echarts-tutorial.html
统计效果实现的参考: http://www.zi-han.net/theme/hplus/

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