1.簡介
ECharts是百度的一個項目,后來百度把Echart捐給apache,用於圖表展示,提供了常規的折線圖、柱狀圖、散點圖、餅圖、K線圖,用於統計的盒形圖,用於地理數據可視化的地圖、熱力圖、線圖,用於關系數據可視化的關系圖、treemap、旭日圖,多維數據可視化的平行坐標,還有用於 BI 的漏斗圖,儀表盤,並且支持圖與圖之間的混搭。
官方網站:https://echarts.baidu.com/ 使用和highcharts大同小異 ,可見詳細文檔 https://www.cnblogs.com/fqh2020/p/11988458.html
2.基本使用
入門參考:官網->文檔->教程->5分鍾上手ECharts
(1)創建html頁面:柱圖.html
(2)引入ECharts
<script src="echarts.min.js"></script>
(3)定義圖表區域
<div id="main" style="width: 600px;height:400px;"></div>
(4)渲染圖表
<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>
3.vue整合echarts
3.1安裝echarts
npm install --save echarts@4.1.0
3.2 編寫前端圖表頁面
這里以折線圖為例
<template> <div class="app-container"> <!--表單--> <el-form :inline="true" class="demo-form-inline"> <el-form-item> <el-select v-model="searchObj.type" clearable placeholder="請選擇"> <el-option label="學員登錄數統計" value="login_num" /> <el-option label="學員注冊數統計" value="register_num" /> <el-option label="課程播放數統計" value="video_view_num" /> <el-option label="每日課程數統計" value="course_num" /> </el-select> </el-form-item> <el-form-item> <el-date-picker v-model="searchObj.begin" type="date" placeholder="選擇開始日期" value-format="yyyy-MM-dd" /> </el-form-item> <el-form-item> <el-date-picker v-model="searchObj.end" type="date" placeholder="選擇截止日期" value-format="yyyy-MM-dd" /> </el-form-item> <el-button :disabled="btnDisabled" type="primary" icon="el-icon-search" @click="initData()">查詢</el-button> </el-form> <div class="chart-container"> <div id="chart" class="chart" style="height:500px;width:100%" /> </div> </div> </template>
3.3 編寫JavaScript
引入js文件
import echarts from 'echarts' import { getData } from '@/api/sta'
編寫圖表展示方法
export default { data() { return { searchObj: { type: '', begin: '', end: '' }, btnDisabled: false, chart: null, title: '', xData: [], yData: [] } }, created() { }, methods: { initData(){ getData(this.searchObj).then(res=>{ this.yData = res.data.number this.xData = res.data.date this.showChart() }) }, // 設置圖標參數 showChart() { // 基於准備好的dom,初始化echarts實例 this.chart = echarts.init(document.getElementById('chart')) // console.log(this.chart) // 指定圖表的配置項和數據 var option = { // x軸是類目軸(離散數據),必須通過data設置類目數據 xAxis: { type: 'category', data: this.xData }, // y軸是數據軸(連續數據) yAxis: { type: 'value' }, // 系列列表。每個系列通過 type 決定自己的圖表類型 series: [{ // 系列中的數據內容數組 data: this.yData, // 折線圖 type: 'line' }] } this.chart.setOption(option) } } }
請求接口調用
//查詢統計數據 export function getData(searchObj) { return request({ url: `/staservice/statistics-daily/showData/${searchObj.type}/${searchObj.begin}/${searchObj.end}`, method: 'get' }) }
3.4 編寫后台controller
/** * 圖表顯示,返回兩部分數據,日期json數組,數量json數組 */ @GetMapping("showData/{type}/{begin}/{end}") public R showData(@PathVariable String type, @PathVariable String begin, @PathVariable String end){ Map<String ,Object> map = statisticsDailyService.showData(type,begin,end); return R.ok().data(map); }
3.5 后台service實現類
@Override public Map<String, Object> showData(String type, String begin, String end) { QueryWrapper<StatisticsDaily> queryWrapper=new QueryWrapper<StatisticsDaily>(); queryWrapper.between("date_calculated",begin,end); queryWrapper.select("date_calculated",type); List<StatisticsDaily> list = baseMapper.selectList(queryWrapper); List<String> date=new ArrayList<String>();//日期 List<Integer> number=new ArrayList<Integer>();//數量 list.forEach(i->{ String s = i.getDateCalculated(); date.add(s); //封裝對應數量 switch (type){ case "login_num": number.add(i.getLoginNum()); break; case "register_num": number.add(i.getRegisterNum()); break; case "video_view_num": number.add(i.getVideoViewNum()); break; case "course_num": number.add(i.getCourseNum()); break; default: break; } }); Map<String,Object> map=new HashMap<>(); map.put("date",date); map.put("number",number); return map; }
3.6 頁面效果
可點擊按鈕進行查詢
