图形报表ECharts快速使用--入门

1 ECharts简介

ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用 JavaScript实现的数据可视化工具,可以流畅的运行在 PC 和移动设备上,兼容当前绝大 部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图 形库 ZRender,提供直观、交互丰富、可高度个性化定制的数据可视化图表。

官网:https://echarts.baidu.com/
下载地址:https://echarts.baidu.com/download.html
在这里插入图片描述
下载完成可以得到如下文件:
在这里插入图片描述
解压上面的zip文件:
在这里插入图片描述
我们只需要将dist目录下的echarts.js文件引入到页面上就可以使用了
在这里插入图片描述
5分钟上手ECharts
我们可以参考官方提供的5分钟上手ECharts文档感受一下ECharts的使用方式,地址如 下:
在这里插入图片描述
第一步:
创建html页面并引入echarts.js文件

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <!-- 引入 ECharts 文件 -->
    <script src="echarts.js"></script>
</head>
</html>

第二步:
在页面中准备一个具备宽高的DOM容器。

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

第三步:
通过echarts.init方法初始化一个 echarts 实例并通过setOption方法生成一个简 单的柱状图

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

        // 指定图表的配置项和数据
        var option = {
    
    
            title: {
    
    
                text: 'ECharts 入门示例'
            },
            tooltip: {
    
    },
            legend: {
    
    
                data:['销量']
            },
            xAxis: {
    
    
                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            },
            yAxis: {
    
    },
            series: [{
    
    
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

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

整个页面代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <!-- 引入 ECharts 文件 -->
    <script src="echarts.js"></script>
</head>


<body>
    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
	
	<script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option = {
    
    
            title: {
    
    
                text: 'ECharts 入门示例'
            },
            tooltip: {
    
    },
            legend: {
    
    
                data:['销量']
            },
            xAxis: {
    
    
                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            },
            yAxis: {
    
    },
            series: [{
    
    
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

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

</html>

效果如下:

在这里插入图片描述

3 查看ECharts官方实例
在这里插入图片描述
ECharts提供了很多官方实例,我们可以通过这些官方实例来查看展示效果和使用方法。
官方实例地址:https://www.echartsjs.com/examples/
可以点击具体的一个图形会跳转到编辑页面,编辑页面左侧展示重点部分的源码(js部分源码),右 侧展示图表效果,如下:
在这里插入图片描述
要查看完整代码可以点击右下角的Download按钮将完整页面下载到本地。 通过官方案例我们可以发现,使用ECharts展示图表效果,关键点在于确定此图表所需的 数据格式,然后按照此数据格式提供数据就可以了,我们无须关注效果是如何渲染出来 的。

在实际应用中,我们要展示的数据往往存储在数据库中,所以我们可以发送ajax请求获取 数据库中的数据并转为图表所需的数据即可。

以下就是一个折线图案例

会员数量折线图
会员数量折线图对应的页面为report_member.html。

<body class="hold-transition">
        <div id="app">
            <div class="content-header">
                <h1>统计分析<small>会员数量</small></h1>
                <el-breadcrumb separator-class="el-icon-arrow-right" class="breadcrumb">
                    <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
                    <el-breadcrumb-item>统计分析</el-breadcrumb-item>
                    <el-breadcrumb-item>会员数量</el-breadcrumb-item>
                </el-breadcrumb>
            </div>
            <div class="app-container">
                <div class="box">
                    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
                    <div id="chart1" style="height:600px;"></div>
                </div>
            </div>
        </div>
    </body>
    <!-- 引入组件库 -->
    <script src="../js/vue.js"></script>
    <script src="../js/axios-0.18.0.js"></script>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart1 = echarts.init(document.getElementById('chart1'));

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

        axios.get("/report/getMemberReport.do").then((res)=>{
    
    
            myChart1.setOption(
                          {
    
    
                             title: {
    
    
                                 text: '会员数量'
                              },
                             tooltip: {
    
    },
                                 legend: {
    
    
                                     data:['会员数量']
                                  },
                                 xAxis: {
    
    
                                     data: res.data.data.months
                                  },
                                 yAxis: {
    
    
                                     type:'value'
                                  },
                                 series: [{
    
    
                                     name: '会员数量',
                                     type: 'line',
                                     data: res.data.data.memberCount
                                  }]
                             });
        });
    </script>

根据折线图对数据格式的要求,我们发送ajax请求,页面要求服务端需要返回如下格式的数据:

{
    
    
		"data":{
    
    
		        "months":["2019.01","2019.02","2019.03","2019.04"],  
		        "memberCount":[3,4,8,10] 
		       }, 
		"flag":true, 
		"message":"获取会员统计数据成功" 
}

在这里插入图片描述

res.data.data.memberCount:
res.data:回调函数
res.data.data:拿到回台返回的封装类Result中的data(data属性的类型为Map类型,为了我们可以在返回的数据当中添加给的的类型)
res.data.data.memberCount:map集合中的memberCount数据

我们现在后台controller处模拟返回的数据格式

@RequestMapping("/getMemberReport")
    public Result getMemberReport() {
    
    
        //模拟数据使用map封装数据  String保存属性名,Object保存属性值
        Map<String, Object> map = new HashMap<>();   //map保存 "months":["2019.01","2019.02","2019.03","2019.04"]
        List<String> months = new ArrayList<>();      //months保存 ["2019.01","2019.02","2019.03","2019.04"]
        List<Integer> memberCount = new ArrayList<>();  // memberCount保存  [3,4,8,10]

        //将年份存储到List集合当中,再将List集合对象存储在map当中
        months.add("2019.01");
        months.add("2019.02");
        months.add("2019.03");
        months.add("2019.04");
        map.put("months", months);

        //将数量存储到List集合当中,再将List集合对象存储在map当中
        memberCount.add(100);
        memberCount.add(400);
        memberCount.add(300);
        memberCount.add(400);
        map.put("memberCount", memberCount);

        return new Result(true, MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS, map);
    }
/**
 * 封装返回结果
 */
public class Result implements Serializable{
    
    
    private boolean flag;//执行结果,true为执行成功 false为执行失败
    private String message;//返回结果信息,主要用于页面提示信息
    private Object data;//返回数据
    public Result(boolean flag, String message) {
    
    
        super();
        this.flag = flag;
        this.message = message;
    }

    public Result(boolean flag, String message, Object data) {
    
    
        this.flag = flag;
        this.message = message;
        this.data = data;
    }

    public boolean isFlag() {
    
    
        return flag;
    }
    public void setFlag(boolean flag) {
    
    
        this.flag = flag;
    }
    public String getMessage() {
    
    
        return message;
    }
    public void setMessage(String message) {
    
    
        this.message = message;
    }

    public Object getData() {
    
    
        return data;
    }

    public void setData(Object data) {
    
    
        this.data = data;
    }
}

页面效果
在这里插入图片描述

我们通过观察数据的响应,查看后台返回的数据是否符合官网要求的数据格式
在这里插入图片描述
使用json在线解析工具,就可以更清楚的发现数据正是我们页面要使用的数据格式
https://www.json.cn/
在这里插入图片描述
后台controller方法

/***
 * 统计报表
 * */
@RestController
@RequestMapping("/report")
public class ReportController {
    
    

    @Reference
    private MemberService memberService;
    
    @RequestMapping("/getMemberReport")
    public Result getMemberReport(){
    
    
        Map<String,Object> map = new HashMap<>(); //map保存 "months":["2019.01","2019.02","2019.03","2019.04"]
        List<String> months = new ArrayList();    //months保存 ["2019.01","2019.02","2019.03","2019.04"]

        Calendar calendar = Calendar.getInstance();//获得日历对象,模拟时间就是当前时间
        //计算过去一年的12个月
        calendar.add(Calendar.MONTH,-12);//获得当前时间往前推12个月的时间
        for(int i=0;i<12;i++){
    
    
            calendar.add(Calendar.MONTH,1);//获得当前时间往后推一个月日期
            Date date = calendar.getTime();
            months.add(new SimpleDateFormat("yyyy.MM").format(date));
        }
        map.put("months",months);

        List<Integer> memberCount = memberService.findMemberCountByMonths(months);
        map.put("memberCount",memberCount);
        return new Result(true, MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS,map);
    }


}

service接口

//根据月份查询会员数量
    public List<Integer> findMemberCountByMonths(List<String> months) {
    
    //2018.05
        List<Integer> memberCount = new ArrayList<>();
        for (String month : months) {
    
    
            String date = month + ".31";//2018.05.31
            Integer count = memberDao.findMemberCountBeforeDate(date);
            memberCount.add(count);
        }
        return memberCount;
    }

dao层

public Integer findMemberCountBeforeDate(String date);

xml:

<!--根据日期统计会员数,统计指定日期之前的会员数-->
<select id="findMemberCountBeforeDate" parameterType="string" resultType="int">
    select count(id) from t_member where regTime &lt;= #{value}
</select>

猜你喜欢

转载自blog.csdn.net/qq_44316726/article/details/107675290