最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【echars】echarts高级应用总结

    正文概述 掘金(明月何时赵我还)   2021-03-07   525

    1.多坐标轴

    1.1简单多坐标轴

    效果: 【echars】echarts高级应用总结

    const option = {
        /*图例*/
        legend:{data:['学习人数','就业人数']},
        /*提示*/
        tooltip:{},
        /*x 轴*/
        xAxis:{
            data:['html','css','js']
        },
    
        /*y 轴 
        *   yAxis设置为数组,数组中的每个元素存储每个轴的配置
        *   name 坐标轴名称
        *   min 刻度最小值
        *   max 刻度最大值
        * */
        yAxis:[
            {max:100},
            {}
        ],
    
        /*系列列表 series
        *   yAxisIndex 当前系列对应的y 轴的索引位置
        * */
        series:[
            {
                name:'学习人数',
                type:'bar',
                data:[30,20,40],
                yAxisIndex:0
            },
            {
                name:'就业人数',
                type:'bar',
                data:[330,450,850],
                yAxisIndex:1
            }
        ]
    };
    

    1.2复杂多坐标轴

    效果: 【echars】echarts高级应用总结

    主要需要做的事设置每个y轴的min,max和interval值,如下

    /*
    * data1 销售量的系列数据
    * data2 盈利额的系列数据
    */
    const data1=[50, 12, 16, 11, 16, 20];
    const data2=[-150, 120, 160, -110, 160, 1000];
    
    //理想行数(实际行数会有浮动)
    let rowNum=6;
    
    /*数据极值
    *   max1 销售量数据的最大值
    *   max2 盈利额数据的最大值
    *   min1 销售量数据的最小值
    *   min2 盈利额数据的最小值
    * */
    let max1=Math.max(...data1);
    let max2=Math.max(...data2);
    let min1=Math.min(...data1);
    let min2=Math.min(...data2);
    
    /*极值比例*/
    const rat1=min1/max1;
    const rat2=min2/max2;
    
    /*比例大小对比*/
    const ratState=rat1>rat2;
    /*设置极小值
    *   如果系列1的最小比最大大于系列2的最小比最大,让系列1的极小值等于自身的极大值乘以系列2的极值比例
    *   否则,让系列2的极小值等于自身的极大值乘以系列1的极值比例。
    *   因为行数必须相同!
    *  */
    if(ratState){
        min1=rat2*max1;
    }else{
        min2=rat1*max2;
    }
    
    /*
    * inter1 销售量的行高取整
    * inter2 盈利额的行高取整
    * */
    let inter1=Math.ceil((max1-min1)/rowNum);
    let inter2=Math.ceil((max2-min2)/rowNum);
    console.log(inter1,inter2);
    
    /*对极值微调*/
    min1=Math.floor(min1/inter1)*inter1;
    max1=Math.ceil(max1/inter1)*inter1;
    min2=Math.floor(min2/inter2)*inter2;
    max2=Math.ceil(max2/inter2)*inter2;
    
    //法一
    /*求行数*/
    const maxRowNum=Math.max(max1/inter1,max2/inter2);
    const minRowNum=Math.min(min1/inter1,min2/inter2);
    
    /*极值微调*/
    min1=inter1*minRowNum;
    max1=inter1*maxRowNum;
    min2=inter2*minRowNum;
    max2=inter2*maxRowNum;
    
    //法二
    const rowNum1 = (max1-min1)/inter1;
    const rowNum2 = (max2-min2)/inter2;
    rowNum = Math.max(rowNum1,rowNum2);
    
    if(rowNum!=rowNum1){
        //调整1
        max1 = rowNum1*inter1;
    }else if(rowNum!=rowNum2){
        //调整2
        max2 = rowNum2*inter2;
    }
    

    然后分别将min1,max1,inter1,min2,max2,inter2的值赋给两个y轴即可

    2.异步数据

    效果: 【echars】echarts高级应用总结

    2.1 请求到数据后setOption

    const myChart = echarts.init(document.getElementById('main'));
    fetch('./data/China.json')
        .then((res) => res.json())
        .then(data => {
            /*注册地图*/
            echarts.registerMap('china', data);
            /*配置项*/
            const option = {
                title: {
                    text: '中国地图',
                    left:'center'
                },
                series: {
                    type: 'map',
                    map: 'china'
                }
            };
            /*基于配置项显示图表*/
            myChart.setOption(option);
        })
    

    2.2 先setOption有什么先配置什么,请求到数据后追加option

    const myChart = echarts.init(document.getElementById('main'));
    /*有什么先配置什么*/
    myChart.setOption({
        title: {
            text: '中国地图',
            left:'center'
        }
    });
    myChart.showLoading()
    fetch('./data/China.json')
        .then((res) => res.json())
        .then(data => {
            myChart.hideLoading()
            /*注册地图*/
            echarts.registerMap('china', data);
            /*等请求到数据后,追加配置*/
            myChart.setOption({
                series: {
                    type:'map',
                    map:'china',
                }
            });
        })
    

    3.数据集

    3.1 简单使用

    效果: 【echars】echarts高级应用总结

    //基于准备好的dom,初始化echarts实例
    const myChart = echarts.init(document.getElementById('main'));
    //数据源
    const source=[
        ['大前端','学习人数','就业人数'],
        ['html',  30,       40],
        ['css',   20,       30],
        ['js',  40,       50],
    ]
    /*const source=[
        {'大前端':'html','学习人数':30,'就业人数':40},
        {'大前端':'css','学习人数':20,'就业人数':30},
        {'大前端':'js','学习人数':40,'就业人数':50},
    ]*/
    
    // 指定图表的配置项和数据
    const option = {
        /*图例*/
        legend:{},
        /*
        * dataset数据集
        *   source 数据源 []
        * */
        dataset:{source},
    
        /*x轴
        *   type 轴的类型
        *       category 类目轴,离散型数据
        *       value 数值轴,连续性数据
        * */
        xAxis:{
            type:'category',
            // data:['html','css','js']
        },
        yAxis:{
            type:'value'
        },
        /*系列列表*/
        series:[
            {
                // name:'学习人数',
                type:'bar',
                // data:[30,20,40]
            },
            {
                type:'bar'
            },
        ]
    
    };
    
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
    

    3.2行列映射

    效果: 【echars】echarts高级应用总结

    //数据源
    const source=[
        ['大前端','学习人数', '就业人数'],
        ['html',  20,   25],
        ['css',   10,   15],
        ['js',    30,   40]
    ];
    
    // 指定图表的配置项和数据
    const option = {
        legend: {},
        tooltip: {},
    
        /*
        * dataset数据集
        *   source 数据源 []
        *   seriesLayoutBy 行列映射
        *       column 基于列映射
        *       row 基于行映射
        * */
        dataset: {
            source,
        },
    
        /*grid [{},{}] 在一个echarts 实例中建立多个grid,并设置其位置
        *   bottom 下边距,如'55%'
        *   top 上边距,如'55%'
        * */
        grid:[
            {bottom:'55%'},
            {top:'55%'}
        ],
    
    
        /*建立两个x 轴,分属两个网格
        *   type 轴类型,如category
        *   gridIndex 绘图区索引位置
        * */
        xAxis: [
            {type: 'category',gridIndex:0},
            {type: 'category',gridIndex:1}
        ],
        /*建立两个y 轴,分属两个网格*/
        yAxis:[
            {type:'value',gridIndex:0},
            {type:'value',gridIndex:1}
        ],
        /*
        * series系列
        *   type 图表类型
        *   seriesLayoutBy 行列映射
        *       column 列映射,默认
        *       row  行映射
        *   xAxisIndex x轴索引
        *   yAxisIndex y轴索引
        * */
        series: [
            {type: 'bar'},
            {type: 'bar'},
            {
                type: 'bar',
                xAxisIndex:1,
                yAxisIndex:1,
                seriesLayoutBy:'row'
            },
            {
                type: 'bar',
                xAxisIndex:1,
                yAxisIndex:1,
                seriesLayoutBy:'row'
            },
            {
                type: 'bar',
                xAxisIndex:1,
                yAxisIndex:1,
                seriesLayoutBy:'row'
            },
        ]
    };
    

    3.3维度映射

    效果: 【echars】echarts高级应用总结

    //数据源
    const source=[
        ['html',  20,   25],
        ['css',   10,   15],
        ['js',    30,   40]
    ];
    
    //维度映射 dimensions
    const dimensions=[null,{name:'学习人数'}, '就业人数'];
    
    // 指定图表的配置项和数据
    const option = {
        legend: {},
        tooltip: {},
        dataset: {source,dimensions},
        xAxis: {type: 'category'},
        yAxis: {},
        series: [
            {
                // name:'上课人数',
                type: 'bar',
            },
            {
                type: 'bar',
            },
        ]
    };
    

    3.4编码映射

    数据如下,如果只想展示就业人数,可以采用编码映射 效果: 【echars】echarts高级应用总结

    //维度映射
    const dimensions=['大前端','学习人数', '就业人数'];
    //数据源
    const source =[
        ['html',  20,   25],
        ['css',   10,   15],
        ['js',    30,   40],
    ];
    
    // 指定图表的配置项和数据
    const option = {
        title:{
          text:  dimensions[0],
          left:'center'
        },
        legend:{},
        tooltip:{},
        dataset: {dimensions,source},
        /*设置类目轴和数值轴*/
        xAxis:{type:'category'},
        yAxis:{type:'value'},
        /*encode 编码映射
        *   x x轴维度
        *   y y轴维度
        *   seriesName 系列名,n|[n]|[n,m,...]
        *   tooltip 提示信息,n|[n]|[n,m,...]
        * */
        series:{
            type:'bar',
            encode:{
                // seriesName:2,
                // x:0,
                x:'大前端',
                // y:2,
                y:'就业人数',
                tooltip:[1,2]
            }
        }
    };
    

    3.5编码扩展映射

    效果: 【echars】echarts高级应用总结

    //配置项
    let option=null;
    //异步请求数据
    fetch('./lib/table.json')
        .then((res) => res.json())
        .then(data => {
            //显示数据
            show(data);
        });
    
    function show(data){
        let sizeValue = '57%';
        let symbolSize = 5;
        option = {
            //提示
            tooltip:{},
            /*建立四个绘图区*/
            grid: [
                {right: sizeValue, bottom: sizeValue},
                {left: sizeValue, bottom: sizeValue},
                {right: sizeValue, top: sizeValue,bottom:'10%'},
                {left: sizeValue, top: sizeValue,bottom:'10%'}
            ],
            /*x 轴*/
            xAxis: [
                /*
                * type 坐标轴类型
                *   value  数值轴,适用于连续数据
                *   category 类目轴,适用于离散的类目数据
                *   time 时间轴
                *   log 对数轴
                * gridIndex  x 轴所在的 grid 的索引,默认位于第一个 grid
                * name 坐标轴名称
                * axisLabel 坐标轴刻度标签的相关设置
                *   rotate 刻度标签旋转的角度
                *   interval 坐标轴刻度标签的显示间隔。
                *       0 强制显示所有标签
                *       1 隔一个标签显示一个标签
                * boundaryGap 边界间隙
                *   false 无间隙
                *   true 有间隙
                * */
                {type: 'value', gridIndex: 0, name: '收入', axisLabel: {rotate: 50}},
                {type: 'category', gridIndex: 1, name: '国家',  axisLabel: {rotate: 50,}},
                {type: 'category', gridIndex: 2, name: '国家', axisLabel: {rotate: 50}},
                {type: 'value', gridIndex: 3, name: '寿命', axisLabel: {rotate: 50}}
            ],
            yAxis: [
                {type: 'value', gridIndex: 0, name: '寿命'},
                {type: 'value', gridIndex: 1, name: '收入'},
                {type: 'value', gridIndex: 2, name: '人口'},
                {type: 'value', gridIndex: 3, name: '人口'}
            ],
            dataset: {
                /*
                * dimensions 维度映射 []
                *   string,如 'someName',等同于 {name: 'someName'}
                *   Object
                *       name  string
                *       type 类型
                *           number,默认,表示普通数据。
                *           ordinal,对于类目、文本这些 string 类型的数据,如果需要能在数轴上使用,须是 'ordinal' 类型
                *           ...
                * */
                dimensions: ['收入','寿命','人口','国家','年'],
                /*数据源*/
                source: data
            },
            series: [
                /*
                * type 图表类型
                *   scatter 散点图
                *   symbolSize 散点大小
                *   xAxisIndex  x 轴索引位
                *   yAxisIndex  y 轴索引位
                *   encode 编码映射
                *       x  x坐标系的维度映射
                *       y  y坐标系的维度映射
                *       tooltip 提示映射
                *   itemStyle 项目样式
                *       opacity 项目透明度
                *
                * */
                {
                    type: 'scatter',
                    symbolSize: symbolSize,
                    xAxisIndex: 0,
                    yAxisIndex: 0,
                    encode: {
                        x: '收入',
                        y: '寿命',
                        tooltip: [0, 1, 2, 3, 4]
                    },
                    itemStyle:{
                        opacity:0.3
                    }
                },
                {
                    type: 'scatter',
                    symbolSize: symbolSize,
                    xAxisIndex: 1,
                    yAxisIndex: 1,
                    encode: {
                        x: '国家',
                        y: '收入',
                        tooltip: [0, 1, 2, 3, 4]
                    },
                    itemStyle:{
                        opacity:0.3
                    }
                },
                {
                    type: 'scatter',
                    symbolSize: symbolSize,
                    xAxisIndex: 2,
                    yAxisIndex: 2,
                    encode: {
                        // x: '收入',
                        x: '国家',
                        y: '人口',
                        tooltip: [0, 1, 2, 3, 4]
                    },
                    itemStyle:{
                        opacity:0.3
                    }
                },
                {
                    type: 'scatter',
                    symbolSize: symbolSize,
                    xAxisIndex: 3,
                    yAxisIndex: 3,
                    encode: {
                        x: '寿命',
                        y: '人口',
                        tooltip: [0, 1, 2, 3, 4]
                    },
                    itemStyle:{
                        opacity:0.3
                    }
                }
            ]
        };
    

    4.区域缩放

    效果: 【echars】echarts高级应用总结

    //数据源
    const source = [
        //x  y  z
        [2,  1, 5],
        [4,  2, 10],
        [6,  3, 15],
        [8,  4, 20],
        [10, 5, 25],
        [12, 6, 30],
        [14, 7, 35],
        [16, 8, 40],
        [18, 9, 45],
    ];
    const option = {
          tooltip: {},
          /*工具栏 toolbox
          *   feature{} 工具配置项
          *     dataZoom{} 框选型缩放缩放
          * */
          toolbox:{
            feature:{
                dataZoom:{}
            }
          },
    
          /*
          * x 轴
          *   min 最小值
          *       dataMin 取所有数据中的最小值
          *   max 最大值
          *       dataMax 取所有数据中的最大值
          * */
          xAxis: {
              type: 'value',
              min: 'dataMin',
              max: 'dataMax',
          },
          yAxis: {
              type: 'value',
              min: 'dataMin',
              max: 'dataMax',
          },
          /*
          * dataZoom 区域缩放 [{},{}]
          *   type 缩放方式
          *       inside 内置缩放,通过鼠标的平移缩放实现
          *       slider 滑动条缩放
          *   xAxisIndex 缩放作用于哪个x轴
          *   yAxisIndex 缩放作用于哪个y轴
          *   start 起始位,百分百 [0,100]
          *   end 结束位,百分百 [0,100]
          * */
          dataZoom:[
              {
                  type:'inside',
                  // start:50,
                  // end:80
              },
              {
                  type:'slider',
                  yAxisIndex:0
              },
              {
                  type:'slider',
                  xAxisIndex:0
              },
          ],
    
          /*数据集*/
          dataset:{source},
          /*系列列表*/
          series: [
              {
                  type: 'scatter',
                  symbolSize: function (param) {
                        return param[2];
                  },
              },
          ]
      };
    

    5.视觉映射

    效果: 【echars】echarts高级应用总结

    /*
      * visualMap 视觉映射 {}
      *   type 映射方式
      *       continuous 连续型
      *       piecewise 分段型
      *   min 映射区间的起始位置,如0
      *   max 映射区间的接收位置,如90
      *   calculable 是否显示拖拽用的手柄,只适用于连续型
      *   range [] 显示此范围内的项目,只适用于连续型,如[0,100]
      *   dimension 基于哪个维度的数据进行视觉映射
      *   inRange 自定义取色范围
      *       color[] 颜色映射
      *       symbolSize[] 大小映射
      *  举例如下
      * */
    visualMap:{
          type:'continuous',
          min:0,
          max:100,
          calculable:true,
          // range:[1,9],
          // dimension:1,
          inRange:{
              // color:['#00acec','orange','green'],
              symbolSize:[0,100],
              colorHue:[0,360]
          }
      },
    

    6.事件

    6.1 鼠标事件,以click为例

    echarts官网中的定义:

    {
        // 当前点击的图形元素所属的组件名称,
        // 其值如 'series'、'markLine'、'markPoint'、'timeLine' 等。
        componentType: string,
        // 系列类型。值可能为:'line'、'bar'、'pie' 等。当 componentType 为 'series' 时有意义。
        seriesType: string,
        // 系列在传入的 option.series 中的 index。当 componentType 为 'series' 时有意义。
        seriesIndex: number,
        // 系列名称。当 componentType 为 'series' 时有意义。
        seriesName: string,
        // 数据名,类目名
        name: string,
        // 数据在传入的 data 数组中的 index
        dataIndex: number,
        // 传入的原始数据项
        data: Object,
        // sankey、graph 等图表同时含有 nodeData 和 edgeData 两种 data,
        // dataType 的值会是 'node' 或者 'edge',表示当前点击在 node 还是 edge 上。
        // 其他大部分图表中只有一种 data,dataType 无意义。
        dataType: string,
        // 传入的数据值
        value: number|Array,
        // 数据图形的颜色。当 componentType 为 'series' 时有意义。
        color: string,
        // 用户自定义的数据。只在 graphic component 和自定义系列(custom series)
        // 中生效,如果节点定义上设置了如:{type: 'circle', info: {some: 123}}。
        info: *
    }
    
    myChart.on('click',(param)=>{
         console.log(param);
    })
    

    6.2组件交互

    以legendselectchanged为例:

    myChart.on('legendselectchanged',(param)=>{
        console.log(param);
    })
    

    6.3触发图表行为:dispatchAction

    效果: 【echars】echarts高级应用总结

    /*使用dispatchAction 方法高亮并提示一个扇形
    *   type 触发的行为类型
    *       highlight 高亮
    *       showTip 显示提示
    *       downplay 取消高亮
    *       hideTip 取消提示
    *   seriesIndex 系列索引,用于寻找系列列表中的某个系列
    *   dataIndex 数据所有,用于寻找系列中的某个元素
    * */
    myChart.dispatchAction({
            type:'highlight',
            seriesIndex:0,
            dataIndex:3
        })
    // myChart.dispatchAction({
    //     type:'showTip',
    //     seriesIndex:0,
    //     dataIndex:3
    // })
    
    // myChart.dispatchAction({
    //     type:'downplay',
    //     seriesIndex:0,
    //     dataIndex:3
    // })
    // myChart.dispatchAction({
    //     type:'hideTip',
    //     seriesIndex:0,
    //     dataIndex:3
    // })
    

    7.富文本

    效果: 【echars】echarts高级应用总结

    // 数据
    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+'}\n'+'{val|实力:'+item.value+'}',
            rich:{
                img:{
                    width: 50,
                    height: 50,
                    backgroundColor:{
                        image: item.img
                    }
                },
                name:{
                    fontSize: 14,
                    lineHeight: 20,
                }
            }
        }
    })
    
    
    /*配置项*/
    const option = {
        title:{text:'英雄战力'},
        tooltip: {trigger: 'item'}
        series: {
            type: 'pie',
            data,
            radius:'70%',
        }
    };
    

    起源地下载网 » 【echars】echarts高级应用总结

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元