Echarts高级应用学习笔记

239 阅读4分钟

Echarts高级应用

多坐标轴

多坐标轴即是在一个图表中有两个Y轴

设置方法:

  • 在Yaxis中写入两个对象:{},{},同时根据算法(min,max,行高)保持两个y轴数据一致

  • 在series中设置数据时,适应YaxisIndex属性设置系列与哪个y轴相关联

异步数据

数据的更新有两种思路,

  • 先请求到数据后,在加载配置

  • 先加载部分配置,例如title,等到加载数据成功后,在加载配置

数据集

数据集的优点:

  • 基于原视数据,设置映射关系,行成图表。

  • 数据和配置分离开,便于单独管理。

数据集与图表的映射方式

第一列:前端:html,css,js 为映射的类目轴

第二列:为第一系列的数据

第三列:为第二系列的数据

 const source = [     ['前端','学习人数','就业人数'],
     ['html',20,30],
     ['css',40,60],
     ['js',40,70]   
 ]

数据集的行映射

第一行:前端:学习人数,就业人数:为映射的类目轴

第二行:为第一系列的数据

第三行:为第二系列的数据

 seriesLayoutBy:row   // 基于行映射

数据集的维度映射

数据集的维度指的就是每个系列的名称name。 维度映射作用:对数据的维度信息统一定义和管理。 ECharts 默认会从 dataset.source 的第一行中获取维度信息。 但是,如果在dataset 里指定了 dimensions,那么 ECharts 不再会自动从 dataset.source 中获取维度信息。

数据集的编码映射

encode可以指定某一系列对应某各维度的数据,默认series里第一个系列的就是数据源里第二列的数据,

区域缩放

作用:放大数据,便于观察细节。缩小数据,便于观察整体

dataZoom组件类型:

  • 框选型数据区域缩放组件(dataZoomSelect):提供一个选框进行数据区域缩放。即 toolbox.feature.dataZoom,配置项在 toolbox 中。

  • 内置型数据区域缩放组件(dataZoomInside):内置于坐标系中,使用户可以在坐标系上通过鼠标拖拽、鼠标滚轮、手指滑动(触屏上)来缩放或漫游坐标系。

  • 滑动条型数据区域缩放组件(dataZoomSlider):有单独的滑动条,用户在滑动条上进行缩放或漫游。

视觉映射

visualMap 视觉映射可以让项目的数据和颜色、大小等属性相关联。

实际效果如下:

visualMap 的常见属性

  • type 映射方式

    • continuous 连续型

    • piecewise 分段型

  • min、max 映射区间的起始位置和结束位置,对应实际数据

  • range 显示此范围内的项目,百分百类型

  • calculable 是否显示拖拽用的手柄,在连续型的颜色映射器中

  • inRange 自定义选中范围中的视觉元素

    • color[] 颜色映射

    • symbolSize 大小映射

    ...

echarts事件

Echarts如何监听事件

和canvas类似,echarts同样以"on"关键字监测事件

 myChart.on('click', function (opt) {
     //事件相关配置
     console.log(opt);
 });

常见鼠标事件

click:单击

doubleclick:双击

mousedown:鼠标按下

mousemove:鼠标移动

mouseup:鼠标抬起

所有的鼠标事件包含参数params如被点击的图形信息params.componentType.

组件交互事件的监听

   /*
     * 使用on 方法绑定 legendselectchanged 图例开关点击事件
     * */
     myChart.on('legendselectchanged',function(opt){
         console.log(opt);
     })

富文本标签

富文本标签即是把文字和图片结合在一起,更直观形象的展示数据之间的关系

富文本的实现步骤

  // 基于准备好的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=>{
         /*自定义标签 label
     *   formatter 文本片段
     *       '{样式名|文字内容}\n 换行'
     *   文本块的样式
     *       textBorderColor 文本描边颜色
     *       textBorderWidth 文本描边宽度
     *       ...
     *   rich 富文本,在其中写入样式
     *       width 宽
     *       height 高
     *       backgroundColor 背景色
     *           image 背景图
     *       fontSize 文字大小
     *       lineHeight 行高
     *       fontWeight 文本加粗
     *       ...
     * */
         item.label={
             formatter:'{img|}\n{name|'+item.name+'}',
             textBorderColor:'yellow',
             textBorderWidth:3,
             rich:{
                 img:{
                     width:60,
                     height:60,
                     backgroundColor:{
                         image:item.img
                     }
                 },
                 name:{
                     lineHeight:30,
                     fontSize:18
                 }
             }
         }
     })
   /*配置项*/
     const option = {
         title:{text:'英雄战力'},
         series: {
             type: 'pie',
             data,
             radius:'70%',
         }
     };
     myChart.setOption(option);