最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【echarts】echarts综合应用案例-制作大屏项目

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

    主要是总结大屏制作原理、echarts主题定制、echarts常用图绘制、在echarts中使用百度地图

    效果

    【echarts】echarts综合应用案例-制作大屏项目

    大屏的制作原理

    1. 大屏就是要显示在大屏幕里的网页;
    2. 大屏通常放在公共空间中展示数据;
    3. 大屏的尺寸一般是1920*1080;
    4. 大屏不用考虑浏览器的兼容性,只要谷歌能兼容就行;
    5. 大屏的制作原理是在浏览器中,建立多个echarts容器,将不同的echarts图表放入其中;
    

    大屏的自适应

    www.jianshu.com/p/b2fd58d31…

    实现过程

    1.背景框架

    【echarts】echarts综合应用案例-制作大屏项目 这部分代码略。

    2.echarts主题定制

    echarts.apache.org/zh/theme-bu… 点击左侧的下载主题按钮,即可下载js文件(或json文件) 以js方式为例:

    <!--引入echarts-->
    <script src="https://lib.baomitu.com/echarts/4.7.0/echarts.min.js"></script>
    <!--引入样式-->
    <script src="./js/walden.js"></script>
    

    使用举例:(之后每一个图表都需要进行设置)

    const chart = echarts.init(document.getElementById('chartL1'),'walden');
    

    3.图表实现

    3.1折线图

    /*chartL1 - 折线图*/
    {
        /*数据源*/
        const source=[
            ['年','2014', '2015', '2016', '2017', '2018', '2019', '2020'],
            ['收入',820, 932, 901, 934, 1290, 1330, 1520],
            ['支出',200, 632, 601, 634, 850, 1000, 1100]
        ];
    
        /*实例化echarts*/
        const chart = echarts.init(document.getElementById('chartL1'),'walden');
        /*配置项
        *   title
        *       text '西虹市人民收入增长情况'
        *   dataset 数据集
        *       source 数据源
        *   xAxis
        *       type
        *           category 类目轴
        *       boundaryGap 边界间隙
        *       axisLabel 坐标轴刻度标签的相关设置
        *           rotate 刻度标签旋转的角度
        *   yAxis
        *       type
        *           value 数值轴
        *   series 系列集合
        *       type 系列类型,如line
        *       seriesLayoutBy 行列映射
        *           column 应到 dataset 的列,默认
        *           row 应到 dataset 的行
        *
        * */
        const option = {
            title:{
                text:'西虹市人民收入增长情况',
                left:'center'
            },
            legend:{top:30},
            dataset:{
                source
            },
            xAxis:{
                type:'category'
            },
            yAxis:{
                type:'value',
            },
            series: [
                {type:'line',seriesLayoutBy:'row'},
                {type:'line',seriesLayoutBy:'row'},
            ]
        };
        /*显示图表*/
        chart.setOption(option);
    }
    

    3.2饼图

    /*chartL2 - 饼图*/
    {
        /*数据源*/
        const source=[
            {value:5000,name:'旅游'},
            {value:4500,name:'饮食'},
            {value:6500,name:'服装'},
            {value:3500,name:'电影'},
            {value:2500,name:'其它'}
        ];
    
        /*实例化echarts*/
        const chart = echarts.init(document.getElementById('chartL2'),'walden');
        /*配置项
        *   title
        *       text '西虹市人民衣食住行消费比'
        *   tooltip 提示
        *       formatter 提示信息格式化,如'{d}%'
        *   dataset 数据集
        *       source 数据源
        *   series 系列集合
        *       type 系列类型,如pie
        *       radius 半径
        *       roseType 南丁格尔图
        *       center 圆心位置
        * */
        const option = {
            title:{
                text:'西虹市人民衣食住行支出比',
                left:'center'
            },
            tooltip:{
                // formatter:'{d}%',
                formatter:({percent})=>{
                    return Math.round(percent)+'%'
                },
                // formatter:'{b}%',
            },
            dataset:{source},
            series:{
                name:'支出比',
                type:'pie',
                center:['50%','58%'],
                roseType:'radius',
                radius:['40%','70%']
            }
        };
    
        /*显示图表*/
        chart.setOption(option);
    }
    

    3.3散点图

    /*chartL3 - 散点图*/
    {
        /*实例化echarts*/
        const chart = echarts.init(document.getElementById('chartL3'),'walden');
    
        /*维度*/
        const dimensions=['收入','年龄','人口','住址','时间'];
    
        /*配置项*/
        const option = {
            /*
            * title 标题
            *   text 主标题,如'西虹市人民收入和年龄关系'
            *   left 左对齐方式
            * */
            title:{
                text:'西虹市人民收入和年龄关系',
                left:'center'
            },
            tooltip:{},
            /*
            * 坐标轴
            *   type 坐标轴类型
            *       value  数值轴,适用于连续数据
            *   name 坐标轴名称
            * */
            xAxis:{
                type:'value'
            },
            yAxis:{
                type:'value'
            },
            /*
            * dataset 数据集
            *   dimensions 维度映射 []
            *       string,如 '年龄',等同于 {name: '年龄'}
            *   source 数据源
            * */
            dataset:{
                dimensions
            },
    
            /*
            * series系列集合
            *   type 图表类型
            *       scatter 散点图
            *   symbolSize 散点大小
            *   encode 编码映射
            *       x  x坐标系的维度映射,如1|'年龄'
            *       y  y坐标系的维度映射,如0|'收入'
            *       tooltip 提示映射,如[0, 1]
            *   itemStyle 项目样式
            *       opacity 项目透明度
            * */
            series:{
                type:'scatter',
                encode:{
                    x:1,
                    y:0,
                    tooltip:[0,1,2,3,4]
                },
                symbolSize:3,
                itemStyle:{
                    opacity:0.5
                }
            }
    
        };
    
        /*异步请求数据*/
        fetch('./lib/table.json')
            .then((res) => res.json())
            .then(data => {
                option.dataset.source=data
                chart.setOption(option)
            });
    
    }
    

    3.4雷达图

    /*chartR1 - 雷达图*/
    {
        /*数据*/
        const data=[
            {
                name : '预算分配',
                value : [43000, 45000, 42000, 45000, 40000, 49000],
            },
            {
                name : '实际开销',
                value : [30000, 34000, 55000, 35000, 32000, 31000],
            }
        ];
        /*
        * 雷达坐标系组件 radar
        *   indicator 雷达图的指示器集合 []
        *       name 指示器名称, 也就是标签内容
        *       min、max 数据区间,实际数据会在此区间内计算比值
        *       color 标签颜色
        *   shape 雷达形状
        *       polygon 多边形,默认
        *       circle 圆形
        *
        * */
        const indicator=[
            { name: '销售',min:0,max:60000},
            { name: '管理',min:0,max:60000},
            { name: '信息技术',min:0,max:60000},
            { name: '客服',min:0,max:60000},
            { name: '研发',min:0,max:60000},
            { name: '市场',min:0,max:60000}
        ];
    
        /*实例化echarts*/
        const chart = echarts.init(document.getElementById('chartR1'),'walden');
    
        /*配置项*/
        const option = {
            /*
            * title 标题
            *   text 主标题,如'西虹市财务开销'
            * */
            title:{
                text:'西虹市财务开销',
            },
    
            /*
            * tooltip 提示
            * */
            tooltip:{},
    
    
            /*legend 图例
            *   data 数据,如['预算分配', '实际开销']
            *   orient 排列方式
            *       vertical 竖排
            *       horizontal 横排,默认
            *   left 左边距,如0
            *   top 上边距,如32
            * */
            legend:{
                data:['预算分配', '实际开销'],
                left:'left',
                top:30,
                orient:'vertical'
            },
    
    
            /*
            * 雷达坐标系组件 radar
            *   indicator[] 雷达图的指示器,定义雷达的轴
            * */
            radar:{
              indicator
            },
    
            /*
            * series系列集合
            *   type 图表类型
            *       radar 雷达图
            *   data 数据
            * */
            series:{
                type:'radar',
                data
            }
        };
        // 使用刚指定的配置项和数据显示图表。
        chart.setOption(option);
    }
    

    3.5柱状图

    /*chartR2 - 柱状图*/
    {
        /*数据源*/
        const source=[
            ['时间','小麦','玉米','高粱'],
            [2017,  1000,  800,  900],
            [2018,  500,   650,  800],
            [2019,  800,   900,  1200],
        ];
    
        /*实例化echarts*/
        const chart = echarts.init(document.getElementById('chartR2'),'walden');
    
        /*配置项*/
        const option = {
            /*
            * title 标题
            *   text 主标题,如'西虹市农作物收成'
            * */
            title:{
                text:'西虹市农作物收成',
                left:'center'
            },
            tooltip:{},
            legend:{
                top:30
            },
            grid:{
                top:72,
                bottom:28
            },
            /*
            * dataset 数据集
            *   source 数据源
            * */
            dataset:{source},
    
            /*  xAxis
            *       type
            *           category 类目轴
            *   yAxis
            *       type
            *           value 数值轴
            */
            xAxis:{
                type:'category'
            },
            yAxis:{
                type:'value'
            },
    
            /*
            * series系列集合
            *   type 图表类型
            *       bar 柱状图
            *   color 颜色
            *       image 图像源
            *       repeat 图像的重复方式,如repeat
            * */
            series:[
                {id:'xm',type:'bar'},
                {id:'ym',type:'bar'},
                {id:'gl',type:'bar'},
            ]
    
        };
        chart.setOption(option);
    
        /*图像源*/
        //小麦
        const imgXm=new Image();
        imgXm.src='./images/xm.jpg';
        //玉米
        const imgYm=new Image();
        imgYm.src='./images/ym.jpg';
        //高粱
        const imgGl=new Image();
        imgGl.src='./images/gl.jpg';
    
        //当所有图片都加载成功后再绘图
        Promise.all([imgPro(imgXm),imgPro(imgYm),imgPro(imgGl)]).then(()=>{
            //绘图
            chart.setOption({
                series:[
                    {
                        id:'xm',
                        color:{
                            image:imgXm
                        }
                    },
                    {
                        id:'ym',
                        color:{
                            image:imgYm
                        }
                    },
                    {
                        id:'gl',
                        color:{
                            image:imgGl
                        }
                    },
                ]
            });
        });
        //建立Promise 对象,指定img 加载成功后,执行resolve
        function imgPro(img){
            return new Promise((resolve)=>{
                img.onload=function(){
                    resolve(img);
                }
            });
        }
    
    }
    

    3.6地图(map)

    需要先引入百度地图api和bmap组件 控制台->应用管理->我的应用 【echarts】echarts综合应用案例-制作大屏项目

    <!--引入百度地图api-->
    <script src="https://api.map.baidu.com/api?v=3.0&ak=<你的ak>"></script>
    <!--引入bmap 组件-->
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/extension/bmap.min.js"></script>
    
    /*chartR3 - 百度地图*/
    {
        const chart = echarts.init(document.getElementById('chartR3'),'walden');
    
        const option = {
            /*
            * title 标题
            *   text 主标题,如'西虹市在哪里'
            *   left 左对齐方式
            *   top 上边距,如12
            * */
            title:{
                text:'西虹市的空气质量',
                left:'center',
                top:12,
            },
            /*
            * bmap 百度地图
            *   center[经度,纬度] 地图中心点位,如[121.48, 31.22]
            *   zoom 缩放级别,如6
            *   roam 是否可以拖拽缩放
            *   mapStyleV2 地图样式
            *       styleId 样式id 
            *		在百度地图个性化编辑器((http://lbsyun.baidu.com/customv2/editor/c7162446b3c9506b18bdb9478cb2b0d0))发布样式后的id
            * */
            bmap:{
                center:[121.48, 31.22],
                zoom:6,
                roam:true,
                //mapStyleV2: {
                 //   styleId:<你的styleId>
                //}
            },
    
            /*系列列表
            *   type 系列类型
            *       scatter 散点图
            *       effectScatter 特效散点图
            *   coordinateSystem 坐标类型,bmap
            *   data 数据
            *   symbolSize 尺寸
            * */
            series : [
                {id:'s1',type:'scatter',coordinateSystem:'bmap'},
                {id:'s2',type:'effectScatter',coordinateSystem:'bmap'},
            ]
        };
        chart.setOption(option);
    
        /*获取空气质量质量数据*/
        fetch('./lib/pm.json')
            .then((res) => res.json())
            .then(data => {
                const len=data.length
                const data2=data.splice(len-5,len)
                //绘图
                chart.setOption({
                    series:[
                        {
                            id:'s1',
                            data,
                            symbolSize:(param)=>{
                                return param[2]/10
                            }
                        },
                        {
                            id:'s2',
                            data:data2,
                            symbolSize:(param)=>{
                                return param[2]/10
                            }
                        },
                    ]
                })
            });
    
    
        /*获取百度地图的实例 chart.getModel().getComponent('bmap').getBMap()*/
    
    }
    

    3.7地图(geo)

    注册中国地图

    中国地图数据地址:

    raw.githubusercontent.com/yezongyang/…

    <!--中国地图-->
    <script src='./js/China.js'></script>
    

    china.js文件

    (function (root, factory) {
        if (typeof define === 'function' && define.amd) {
            // AMD. Register as an anonymous module.
            define(['exports', 'echarts'], factory);
        } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
            // CommonJS
            factory(exports, require('echarts'));
        } else {
            // Browser globals
            factory({}, root.echarts);
        }
    }(this, function (exports, echarts) {
        var log = function (msg) {
            if (typeof console !== 'undefined') {
                console && console.error && console.error(msg);
            }
        }
        if (!echarts) {
            log('ECharts is not Loaded');
            return;
        }
        if (!echarts.registerMap) {
            log('ECharts Map is not loaded')
            return;
        }
        echarts.registerMap('china', <访问数据地址获得的对象>);
    }));
    

    绘制地图:

    /*chartC - echarts地图*/
    {
        const chart = echarts.init(document.getElementById('chartC'),'walden');
    
        /*配置项*/
        const option = {
            /*
            * title 标题
            *   text 主标题,如'西虹市不同地区的平均收入'
            *   textStyle 主题样式
            *   left 左对齐方式
            *   top 上边距,如12
            * */
            title:{
                text:'西虹市不同地区的平均收入',
                textStyle:{
                    fontSize:24
                },
                left:'center',
                top:32,
            },
    
            /*
            * tooltip 提示
            *   backgroundColor 背景色,如'rgba(2,177,236,0.6)'
            * */
            tooltip:{},
    
            /*
            *地理坐标系组件 geo
            *   map 地图名称,如'china'
            *   zoom 缩放比例,如1
            *   roam 是否开启鼠标缩放和平移漫游
            *       scale 缩放
            *       move 平移
            *       true 都开启
            *   itemStyle 地图区样式
            *       areaColor 地图区域的颜色,如 rgba(0,29,132,0.8)
            *       borderColor 图形的描边颜色,如 #02c0ff
            *   emphasis 高亮状态下的多边形和标签样式
            *       itemStyle {} 项目样式
            *           shadowColor 投影颜色
            *
            * */
            geo:{
                map:'china',
                zoom:1,
                roam:true,
                itemStyle:{
                    areaColor:'rgba(0,29,132,0.8)',
                    borderColor:'#02c0ff'
                },
                emphasis:{
                    itemStyle:{
                        shadowColor:'#000',
                        shadowOffsetY:30,
                        shadowBlur:30
                    }
                }
            },
    
    
            /*
            * series系列集合
            *   name 名称,如'旅游人数'
            *   type 图表类型
            *       scatter 散点图
            *   coordinateSystem 坐标类型,如'geo'
            *   data 数据
            *   symbolSize 散点大小,可为函数(p)=>{return p[2]}
            *   encode 编码映射
            *       x  x坐标系的维度映射,如'收入'
            *       y  y坐标系的维度映射,如'年龄'
            *       tooltip 提示映射,如[0, 1, 2, 3, 4]
            *   itemStyle 项目样式
            *       color 项目颜色,如'rgba(255,255,255,0.6)'
            *   emphasis 高亮状态
            *       itemStyle 项目样式
            *           color 颜色,如'yellow'
            * */
            series:[
                {
                    id:1,
                    type:'scatter',
                    coordinateSystem:'geo',
                    symbolSize:(param)=>{
                        return param[2]/15
                    },
                    emphasis:{
                        itemStyle:{
                            color:'yellow'
                        },
                    }
                }
            ]
    
        };
        chart.setOption(option);
    
        fetch('./lib/income.json')//收入数据
            .then((res) => res.json())
            .then(data => {
                dataLen = data.length;
                chart.setOption({
                    series:[
                        {
                            id:1,
                            data
                        }
                    ]
                })
                setInterval(anim, 1000);
            });
    
    
    
        let curInd = 0;
        let dataLen = null;
    
        function anim() {
            /*取消之前高亮的图形
            *   type 触发的行为类型,见action
            *   seriesIndex 系列索引,用于寻找系列列表中的某个系列
            *   dataIndex 数据所有,用于寻找系列中的某个元素
            * */
            chart.dispatchAction({
                type: 'downplay',
                seriesIndex: 0,
                dataIndex: curInd
            });
            /*当前索引递增,不能超过系列元素的总数*/
            curInd = (curInd + 1) % dataLen;
    
            /*高亮当前图形*/
            chart.dispatchAction({
                type: 'highlight',
                seriesIndex: 0,
                dataIndex: curInd
            });
            /*显示 tooltip*/
            chart.dispatchAction({
                type: 'showTip',
                seriesIndex: 0,
                dataIndex: curInd
            });
        }
    }
    

    起源地下载网 » 【echarts】echarts综合应用案例-制作大屏项目

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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