Echarts学习笔记

介绍和安装

介绍

Echarts是一个用于绘制可视化图表的工具,包括但不限于多种类型的统计图、树图、关系图、地图等。
官网是https://echarts.apache.org/,有教程、文档、实例等可以查询使用。

安装引入

可通过多种方式引入Echarts,可下载也可在线使用:

  • GitHub
  • npm
  • 在线定制
  • cdn:https://lib.baomitu.com/echarts/4.7.0/echarts.js

绘图步骤

  1. 建立dom容器
  2. 引入Echarts
  3. 实例化Echarts
  4. 建立图表配置项
  5. 显示图表
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 2. 引入 echarts.js -->
    <script src="echarts.min.js"></script>
    <!-- 也可以使用cdn在线引入: 
    <script src="https://lib.baomitu.com/echarts/4.7.0/echarts.js"></script>
    -->
</head>
<body>
    <!-- 1. 建立dom容器 -->
    <!-- 为ECharts准备一个具备大小(宽高)的Dom,不设置宽高不会显示 -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 3. 实例化Echarts
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        // 4. 建立图表配置项
        // 指定图表的配置项和数据
        var option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data:['销量']
            },
            xAxis: {
                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            },
            yAxis: {},
            series: [{
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };
        // 5. 显示图表
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>

echarts 常用组件

组件以对象元素的形式写在option中,以达到配置图标的目的。

标题 title

包含以下属性:

  • 主标题 text
  • 副标题 subtext
  • 位置 left
  • 主标题样式 textStyle
  • 副标题样式 subtextStyle
  • 可见性 show

图例 legend

图例legend 可以对不同系列的数据做标注和过滤,它需要与series 搭配使用。


图例 legend

工具栏 toolbox

一些可以给用户使用的按钮工具:

  • 保存图片 saveAsImage
  • 配置项还原 restore
  • 数据视图工具 dataView
  • 数据区域缩放 dataZoom
  • 动态类型切换 magicType


    工具栏 toolbox

提示框 tooltip

按提示框触发方式 (trigger)分类:

  • item 图形触发,主要在散点图,饼图等无类目轴的图表中使用。
  • axis 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表
  • none 什么都不触发


    提示框 tooltip

坐标轴 xAxis yAxis

主要包含两个属性:

  • name 坐标轴名称 (标注)
  • data 类目数据

y 轴的分割设置:

  • splitNumber 分割段数
  • interval 强制设置坐标轴分割间隔
  • minInterval 坐标轴最小间隔
  • maxInterval 坐标轴最大间隔

系列列表 series

列表类型 type

系列名 name :用于提示tooltip,图例legend 筛选,数据更新

数据 data

标记点 markPoint

data [] 标记的数据数组
标记的数据{}
name 名称
type
最小 min
最大 max
平均值 average
coord [x,y] 坐标位
symbolOffset 标记偏移
symbolSize 标记大小
value 最定制标记内容
symbol 标记图形包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none' ,url

标记线 markLine

data [] 标记的数据数组
标记的数据{}
name 名称
type
最小 min
最大 max
平均值 average
coord [x,y] 坐标位

示例代码:

/*基于准备好的dom,初始化echarts实例*/
    const myChart = echarts.init(document.getElementById('main'));

    /*指定图表的配置项和数据*/
    const option = {
        title:{
            text:'大前端',
            subtext:'前端语言学习人数',
            left:'center',
            // left:300,
            // left:'right', 右对齐
            // center 居中
            textStyle:{
                color:'maroon',
                fontSize:24
            },
            subtextStyle:{
                color:'maroon',
                fontSize:18
            },
            // show:false
        },

        tooltip:{
            // trigger:'item'
            // trigger:'axis'
            // trigger:'none'
        },

        grid:{
        /*绘图区 grid
        *   left right bottom right 绘图区在容器内的边距
        * */
            top:80
        },

        legend:{
// data[] 图例的数据,每一项代表一个系列的 name,与series配合使用
            data:['学习人数','就业人数'],
            left:'left'
        },

        /*工具栏 toolbox
        *   feature{} 工具配置项
        *     saveAsImage{} 保存为图片
        *     dataView{} 数据视图工具
        *     restore{} 配置项还原
        *     dataZoom{} 数据区域缩放
        *     magicType{} 动态类型切换
        *       type[] 动态类型
        *           line 折线图
        *           bar 柱状图
        *           stack 堆叠
        *           tiled 平铺
        * */
        toolbox:{
            feature:{//工具配置项
                saveAsImage:{//保存为图片
                    type:'jpeg'
                },
                dataView:{},//数据视图工具
                restore:{},//配置项还原
                dataZoom:{},//数据区域缩放
                magicType:{//动态类型切换
        /* type[] 动态类型
        *           line 折线图
        *           bar 柱状图
        *           stack 堆叠
        *           tiled 平铺 */
                    type:['line','bar','stack']
                }
            }
        },

        xAxis:{
            name:'前端语言',
            data:['html','css','js']
        },

        yAxis:{
            name:'人数',
            // splitNumber:10,//分割段数
            // interval:20,//强制设置坐标轴分割间隔
            // minInterval:20,//坐标轴最小间隔
            // maxInterval:5//坐标轴最大间隔
        },

        series:[
            {
                name:'学习人数',
                type:'bar',
                data:[30,20,40],
                markPoint:{
                    data:[
                        {type:'max'},
                        {type:'min'},
                        {value:'nnnn……',coord:[1,30]},
                    ],
                    // symbol:'circle'
                }
            },
            {
                name:'就业人数',
                type:'bar',
                data:[40,30,50],
                markLine:{
                    data:[
                        {type:'average'},
                        {type:'max'},
                        {type:'min'},
                        [
                            {coord:[0,0]},
                            {coord:[2,50]},
                        ]
                    ]
                }
            }
        ]

    };

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

echarts 常用图表

series:{type:'',}中写入以下关键词,即可配置相关图表。

  1. 折线图 line
  2. 饼图 pie
  3. 散点图 scatter
  4. K 线 candlestick
  5. 雷达 radar
  6. 仪表盘 gauge
  7. 地图 map

echarts高级应用

多坐标轴

常见应用就是一个图表有左右两个单位长度或标注不同y 轴。

yAxis:[
  {name:'学习人数',min:0,man:50},
  {name:'就业人数',min:0,man:1000},
],
series:[
  {
    name:'',
    type:'bar',
    data:[20,30,40],
    yAxisIndex:0
},{
    name:'',
    type:'',
    data:[330,450,850],
    yAxisIndex:1
}
]

异步数据更新

数据的更新有两种思路:

  1. 请求到数据后,setOption()
  2. 先setOption(),有什么先配置什么。等请求到数据后,再追加配置
myChart.setOption({ // 先
title:{
          text: '示例'
}});
myChart.setOption({ // 后
        series:[
            {
                name:'人数',
                type:'bar',
                data:[30,20,40],
            }
});

注:在数据加载的过程中,还可以使用echarts 实例对象的loading 功能
显示 loading:showLoading()
隐藏 loading:hideLoading()

数据集

dataset 数据集组件是从ECharts 4 开始有的,用于数据管理。
dataset 的优点:

  • 基于原始数据,设置映射关系,形成图表。
  • 数据和配置分离,便于单独管理。
  • 数据可以被多个系列或者组件复用。
  • 支持更多的数据的常用格式,例如二维数组、对象数组等。
    const source=[
        ['大前端','学习人数','就业人数'],
        ['html',  30,       40],
        ['css',  20,       30],
        ['js',  40,       50],
    ]
    /*const source=[
        {'大前端':'html','学习人数':30,'就业人数':40},
        {'大前端':'css','学习人数':20,'就业人数':30},
        {'大前端':'js','学习人数':40,'就业人数':50},
    ]*/
    // 指定图表的配置项和数据
    const option = {
// ...
        /*
        * dataset数据集
        *   source 数据源 []
        * */
        dataset:{
            source
        },
// 二维列表源或是对象源,效果是一样的

数据集还可以自定义行映射、列映射或维度映射。

区域缩放

作用:概览整体,观察细节
区域缩放的方式:

  • 框选型数据区域缩放组件(dataZoomSelect):提供一个选框进行数据区域缩放。即 toolbox.feature.dataZoom,配置项在 toolbox 中。
  • 内置型数据区域缩放组件(dataZoomInside):内置于坐标系中,使用户可以在坐标系上通过鼠标拖拽、鼠标滚轮、手指滑动(触屏上)来缩放或漫游坐标系。
  • 滑动条型数据区域缩放组件(dataZoomSlider):有单独的滑动条,用户在滑动条上进行缩放或漫游。

视觉映射

visualMap 视觉映射的原理

visualMap 视觉映射可以让项目的数据和颜色、大小等属性相关联。
举个例子:
source = [
[1, 1, 5],
[2, 2, 9]
]
数据源source 的第一列和第二列分别对应散点在直角坐标系中的x、y 信息,第三列则默认对应visualMap 。
若果我设置一个从绿色到红色的渐变区间,那么1 就对应绿色,9 就对应红色。

视觉映射

visualMap 的常见属性

  • type 映射方式
    • continuous 连续型
    • piecewise 分段型
  • min、max 映射区间的起始位置和结束位置,对应实际数据
  • range 显示此范围内的项目,百分百类型
  • calculable 是否显示拖拽用的手柄,在连续型的颜色映射器中
  • inRange 自定义选中范围中的视觉元素
    • color[] 颜色映射
    • symbolSize 大小映射

事件监听

ECharts 使用on 绑定事件,事件名称对应 DOM 事件名称,均为小写的字符串。如:
myChart.on('click', function (params) {
// 控制台打印数据的名称
console.log(params.name);
});

监听鼠标事件

ECharts 支持常规的鼠标事件类型,包括 'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout'、'globalout'、'contextmenu' 事件。
所有的鼠标事件包含参数 params,如被点击的图形信息 params.componentType 。

监听组件交互事件

在 ECharts 中基本上所有的组件交互行为都会触发相应的事件。
如图例开关的行为会触发 legendselectchanged 事件:
myChart.on('legendselectchanged', function (params) {
// 获取点击图例的选中状态
let isSelected = params.selected[params.name];
// 在控制台中打印
console.log((isSelected ? '选中了' : '取消选中了') + '图例' + params.name);
// 打印所有图例的状态
console.log(params.selected);
});

代码触发组件行为

ECharts 通过调用 echarts 实例对象的dispatchAction() 方法触发组件行为。
如触发某个元素的highlight 高亮事件:
myChart.dispatchAction({
type: 'highlight',
seriesIndex: 0,
dataIndex: app.currentIndex
});

富文本标签

包含图片、多样式文字等的文本。

用formatter 写文本片段

formatter:
        '{a|文字内容}\n'+
        '{b|文字内容}\n'+
        '默认样式{x|样式 x}'

相当于:

<span class="a">样式a</span>\n
<span class="b">样式b</span>\n
默认样式 <span class="x">x</span>

用rich 设置文本样式

示例代码:

// 基于准备好的dom,初始化echarts实例
    const myChart = echarts.init(document.getElementById('main'));

    // 数据
    const data=[
        {name:'杨戬',value:80,img:'./images/yj.jpg'},
        {name:'鲁班',value:60,img:'./images/lb.jpg'},
        {name:'沈梦溪',value:40,img:'./images/smx.jpg'},
        {name:'诸葛亮',value:30,img:'./images/zgl.jpg'}
    ];
    data.forEach(item=>{
        setRich(item);
    })

    function setRich(item){
        /*自定义标签 label
    *   formatter 文本片段
    *       '{样式名|文字内容}\n 换行'
    *   文本块的样式
    *       textBorderColor 文本描边颜色
    *       textBorderWidth 文本描边宽度
    *       ...
    *   rich 富文本,在其中写入样式
    *       width 宽
    *       height 高
    *       backgroundColor 背景色
    *           image 背景图
    *       fontSize 文字大小
    *       lineHeight 行高
    *       fontWeight 文本加粗
    *       ...
    * */
        item.label={
            textBorderColor:'#fff',
            textBorderWidth:4,
            formatter:'{img|}\n{name|'+item.name+'}\n{val|战力:'+item.value+'}',
            rich:{
                img:{
                    width:60,
                    height:60,
                    backgroundColor:{
                        image:item.img
                    }
                },
                name:{
                    fontSize:18,
                    lineHeight:32
                },
                val:{
                    fontSize:14
                },
            }
        }
    }
    /*配置项*/
    const option = {
        title:{text:'英雄战力'},
        series: {
            type: 'pie',
            data,
            radius:'70%',
        }
    };
    myChart.setOption(option);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345