echarts绘制出你心目中的图表

写在前面

在大三下学期软件项目的实际开发中,往往涉及到系统的审计模块。我们选用echarts作为各类图表的绘制,首先上图(忽略中间的百度地图api):
在这里插入图片描述
ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。这是项目中管理员部分的首页审计界面。下面将进行详细介绍。

echarts基本结构

引入echarts

在web前端通常使用标签的方式引入echarts。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <!-- 引入 ECharts 文件 -->
    <script src="https://cdn.bootcss.com/echarts/4.6.0/echarts.min.js"></script>
</head>
</html>

初始化echarts

在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。

<body>
    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
</body>

然后就可以通过 echarts.init 方法初始化一个 echarts 实例

<script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
<script>

用 option 描述图表

使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。
option中的元素之一:组件(component).如xAxis(直角坐标系 X 轴)、yAxis(直角坐标系 Y 轴)、grid(直角坐标系底板)、dataZoom(数据区缩放组件)、visualMap(视觉映射组件)、tooltip(提示框组件)、toolbox(工具栏组件)等。
系列(series):一组数值以及他们映射成的图,系列也可以称为组件。
option编写示例如下:

var option={
        //图表的标题组件
        title:{
            text:'系统上传视频转码状态'
        },
        //图表的工具栏组件
        toolbox: {
            show : true,//工具栏可显示
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},//可点击查看具体数据
                restore : {show: true},//图表可以刷新
                saveAsImage : {show: true}//图表可以以图片的形式保存
            }
        },
        //图表的y坐标轴
        yAxis:{
        type: 'value',//定义数据类型
        data:[1,2,3,4]//数据
        },
        //图表的x坐标轴
        yAxis:{
        type: 'value',//定义数据类型
        data:[1,2,3,4]//数据
        },
        //series中定义图表的类型,bar说明这是一个柱状图
        series:[{
            name:'视频数量',
            type:'bar',
            data:values //values为需显示的数据列表
        }]
        

显示图表

编写完option后,显示图表:

option && myChart.setOption(option);

echarts图表自适应

用window.onresize = myChart.resize; 可以完成自适应,就是把window的onresize事件赋值为echart的resize事件。当然这是单个图表的情况,要是多个图表,发现会不起作用。多个图表可以使用addEventListener,即

window.addEventListener("resize", () => { 
    this.myChart.resize();  
    this.myChart2.resize();  
    this.myChart3.resize();
});

echarts绘制图表的基本流程

  • 引入echarts.min.js(推荐使用echarts5)
  • 初始化echarts:var myChart = echarts.init(document.getElementById(‘xxx’));
  • 编写option指定显示选项及数据
  • 显示图表:option&&myChart.setOption(option);

饼状图(系统上传视频转码状态)

<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main1'),'dark');
    //从html标签中获取数据
    var initNum=$("#initNum").val();
    var progressNum=$("#progressNum").val();
    var finishNum=$("#finishNum").val();
    var errorNum=$("#errorNum").val();

    var option={
        //图表标题
        title:{
            text:'系统上传视频转码状态'
        },
        //工具选项
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        //视觉组件,用于颜色的映射
        visualMap: {
            show: false,
            //显示的数值大小在0-100之内
            min: 0,
            max: 100,
            inRange: {
                colorLightness: [0, 1]
            }
        },
        //定义饼状图
        series : [
            {
                name: '转码状态',
                type: 'pie',
                radius: '55%',
                data:[
                    {value:initNum, name:'待转码'},
                    {value:progressNum, name:'转码中'},
                    {value:finishNum, name:'转码成功'},
                    {value:errorNum, name:'转码失败'},
                ],
                roseType: 'angle',//设置成南丁格尔图
                //该系列的文本设置
                label: {
                    normal: {
                        textStyle: {
                            color: 'rgba(255,255,255,0.3)'
                        }
                    }
                },
                //饼图的话还要将标签的视觉引导线的颜色设为浅色。
                labelLine: {
                    normal: {
                        lineStyle: {
                            color: 'rgba(255, 255, 255, 0.3)'
                        }
                    }
                },
                //itemStyle的emphasis是鼠标 hover 时候的高亮样式。这个示例里是正常的样式下加阴影
                itemStyle: {
                    normal: {
                        color: '#c23531',
                        shadowBlur: 200,
                        shadowColor: 'rgb(11,11,11)'
                    }
                }
            }
        ]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);

</script>

显示效果:
在这里插入图片描述

数据异步加载的柱状图

var myChart1 = echarts.init(document.getElementById('main2'),'dark');
    //myChart.showLoading();
    var time=[];
    var values=[];
    //通过ajax异步获取数据
    function fetchData(cb){
        $.ajax({
            type:"post",
            async:false,
            url:"/getNumByDatem",
            data:{},
            dataType:"json",
            success:function(result){
                if(result){
                    for(var i=0;i<result.length;i++)
                    {
                    //将数据写入列表中
                        time.push(result[i].date);
                        values.push(result[i].num);
                    }
                }
            },
            error:function(errorMsg){
                alert("失败!");
                myChart1.hideLoading();
            }
        });
        //定义异步加载时间
        setTimeout(function(){
            cb({
                time:time,
                values:values
            });
        },1000);
    }
    //先初步定义一个option,其中数据为空
    var option={
        title:{
            text:'系统近7天上传视频数量'
        },
        tooltip:{},
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                magicType : {show: true, type: ['line', 'bar']},
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        legend:{
            data:['视频数量']
        },
        xAxis:{
            data:[]
        },
        yAxis:{},
        //series定义图表为柱状图
        series:[{
            name:'视频数量',
            type:'bar',
            data:values
        }]
    };
    //显示加载动画
    myChart1.showLoading();
    //通过fetchData获取从后端传来的数据并重新设置option,写入数据
    fetchData(function(data){
        myChart1.hideLoading();
        myChart1.setOption({
            xAxis:{
                data:data.time
            },
            series:[{
                name:'视频数量',
                data:data.values
            }]
        });
    });
    option&&myChart1.setOption(option);

显示效果:
在这里插入图片描述
在这里插入图片描述

堆叠条形图

<script type="text/javascript">
    var myChart4 = echarts.init(document.getElementById('main5'),'dark');
    var time2=[];
    var pre=[];
    var sub=[];
    var post=[];
    $.ajax({
        type:"post",
        async:false,
        url:"/getNumBytype",
        data:{"type":"preProcess"},
        dataType:"json",
        success:function(result){
            if(result){
                for(var i=0;i<result.length;i++)
                {
                    time2.push(result[i].date);
                    pre.push(result[i].num);
                }

            }
        },
        error:function(errorMsg){

        }
    });
    //...同样以ajax的方式获取合成处理postProcess、字幕处理subProcess的数据,在此省略
    var option={
		//提示框组件
        tooltip: {
            trigger: 'axis',
            axisPointer: {    // 坐标轴指示器,坐标轴触发有效
                type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
            }
        },
        legend: {
            data: ['预处理', '合成处理', '字幕处理']
        },
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        //图表定位
        grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
        },
        xAxis: {
            type: 'value'
        },
        yAxis: {
            type: 'category',
            data: time
        },
        series: [
            {
                name: '预处理',
                type: 'bar',
                stack: '总量',
                label: {
                    show: true,
                    position: 'insideRight'
                },
                data: pre
            },
            {
                name: '合成处理',
                type: 'bar',
                stack: '总量',
                label: {
                    show: true,
                    position: 'insideRight'
                },
                data: post
            },
            {
                name: '字幕处理',
                type: 'bar',
                stack: '总量',
                label: {
                    show: true,
                    position: 'insideRight'
                },
                data: sub
            }
        ]
    };
    option && myChart4.setOption(option);
</script>

显示效果:
在这里插入图片描述

总结

echarts更多特性可参考官方文档:https://echarts.apache.org/zh/index.html

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值