e-charts_(绚丽canvas)
Posted 辉常努腻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了e-charts_(绚丽canvas)相关的知识,希望对你有一定的参考价值。
E-charts
导读模块
在我们快速发展的现在的科技行业,已经正在悄悄的发生这转变,众所周知数据一直是软件行业的最重要的核心,而我们的广大用户他们并不是真正的计算机行业的人才,所以对于使用者来说,数据可视化就变的很有必要了,也许有人会说以表格形式呈现不是很好嘛,那还想怎么着,诚然表格展示数据固然很好,但是还不是很直接,为此就诞生了用图来展示数据,这也是广大软件公司所推崇和追求的
-
那么我们该怎么展示呢?
- Jfreechart:免费,功能一般,效果一般(不怎么绚丽),但是是之前的产物,以前用的比较多,现在用的比较少了,建议了解
- e-charts:免费,百度出产的,功能强大,效果(绚丽),近几年的产物,现在国内的众多软件公司用的比较多,推荐学习
- Hight-charts:国外产生,功能强大,效果绚丽,据说XX是抄袭他的,在国内用的比较少,建议了解
-
用图表工具意思/作用:
- 清晰直观的使得数据可视化
- 结和后台技术真正做到数据的实时变化,例如可以实现k线图,因为有js定时器
- 提升软件产品的用户体验
-
使用图表工具的原则:
- 既然是工具就是正常使用即可,不能偏离方向,切记不要主次不分
- 既然是工具就不能随便的去更改软件本身的源代码和功能,但是可以基于它实现拓展或者自定义开发
1.引出e-charts(canvas框架)
-
e-charts:是百度出产一个免费的用于图表展示的工具,因其强大的功能和简易上手深受广大程序员喜爱,同时因其绚丽多彩的效果在同类软件中不断深受好评
-
先导知识:要想学习和使用E-ctarts必须要具备的技能:html ,CSS,JS,Jquery ,Json等
-
官网:http://echarts.baidu.com/,现在是隶属于apache了,所以网址也变了:https://echarts.apache.org/
-
进行商业开发的软件版本为:
- 2.x:e-charts2.x版本的底层更多是依赖底层zrender
- 3.x :不再强制使用 AMD 的方式按需引入,引入方式简单了很多,只需要像普通的 javascript 库一样用 script 标签引入
- 补充:AMD:Asynchronous Module Definition,意思为:异步模块定义
-
官网的使用和介绍:
- 文档:可以下载和查看相关的API和教程
- 下载:可以下载软件,可以下载主题数据,地图数据,扩展数据,这里所谓的数据其实就是一些.js文件或者json文件,详细可以去参考下载数据文件夹
- 实例:下载官方给出的实例,甚至可以在线编辑在线预览
- 社区:可以讨论和参考下载别人例子的地方
- 工具:在线生成一些数据,例如可以生成某个省份或者市区的数据的.js文件
- 关于:项目介绍和版权归属的信息的公布
2.e-charts应用举例
e-charts最原始的单条柱状图代码 (json串)
option = {
xAxis: {
type: 'category', //坐标轴类型,取值为 'value':意思为数值轴,适用于连续数据;'category':意思为类目轴,适用于离散的类目数据例如星期几,且常配合data属性
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']//x轴上显示的数据
},
yAxis: {
type: 'value'//y轴显示的类型为数值轴
},
series: [{
data: [120, 200, 150, 80, 70, 110, 130],//y轴显示的数据的具体指,其实也就是柱状图的高度
type: 'bar'//显示的图形的类型为柱状图
}]
};
改进的两条柱状图代码(json串)
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
tooltip: {},
legend: {//显示策略
data:['已处理','在处理']//显示两条柱状图
},
xAxis: {
data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
},
yAxis: {
},
series: [
{
name: '已处理',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
},
{
name: '在处理',
type: 'bar',
data: [1, 10, 16, 10, 14, 10]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
在改进显示三条柱状图代码(json串)
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
title: {
//主标题文本,'\\n'指定换行
text: 'XX公司2018年的财务统计报告',
//主标题文本超链接
link: 'http://www.baidu.com',
//副标题文本,'\\n'指定换行
//subtext: 'www.stepday.com',
//副标题文本超链接
// sublink: 'http://www.stepday.com/myblog/?Echarts',
//水平安放位置,默认为左侧,可选为:'center' | 'left' | 'right' | {number}(x坐标,单位px)
x: '180px',
//垂直安放位置,默认为全图顶端,可选为:'top' | 'bottom' | 'center' | {number}(y坐标,单位px)
y: '20px'
},
tooltip: {
//触发类型,默认('item')数据触发,可选为:'item'(数据触发,其实就是提示窗显示数据) | 'axis'(轴线触发,其实就是提示窗显示轴线)
trigger: 'axis'
},
legend: {
//显示策略,可选为:true(显示) | false(隐藏),默认值为true
show: true,
//水平安放位置,默认为全图居中,可选为:'center' | 'left' | 'right' | {number}(x坐标,单位px)
x: 'center',
//垂直安放位置,默认为全图顶端,可选为:'top' | 'bottom' | 'center' | {number}(y坐标,单位px)
y: 'top',
data:['收入','预算','支出']
},
xAxis: {
type: 'category',
data: ["第一季度","第二季度","第三季度","第四季度"],
name:'季度'
},
yAxis: {
show: true, //是否显示 y 轴,默认显示,但是设置为false就不显示了
type: 'value',坐标轴类型。'value' 数值轴,适用于连续数据。'category' 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据
name:'金额(元)'
},
series: [
{
name: '收入',
type: 'bar',
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
},
data: shouruData
},
{
name: '预算',
type: 'bar',
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
},
data: yusuanData
},
{
name: '支出',
type: 'bar',
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
},
data: zhichuData
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
2.1柱状图的MVC层
M层
package com.turing.manage.manager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import com.turing.dao.Dao;
import com.turing.dao.DaoImpl;
/**
* E-charts的 M层 实现类
* @author Li Ya Hui
* @time 2021年6月15日 下午8:45:49
*/
public class TuServiceImpl implements ITuService {
Dao dao=new DaoImpl();
@Override
public List<Map<String, Object>> queryShouRu() throws ClassNotFoundException, SQLException {
return dao.executeQueryForList(" SELECT QUARTER(riqi) jidu,SUM(shouRuJinEr) jiner FROM shouru GROUP BY QUARTER(riqi) ");
}
@Override
public List<Map<String, Object>> queryZhiChu() throws ClassNotFoundException, SQLException {
return dao.executeQueryForList(" SELECT QUARTER(riqi) jidu,SUM(zhiChuJinEr) jiner FROM zhichu GROUP BY QUARTER(riqi) ");
}
@Override
public List<Map<String, Object>> queryYuSuan() throws ClassNotFoundException, SQLException {
return dao.executeQueryForList(" SELECT QUARTER(riqi) jidu,SUM(yuSuanJinEr) jiner FROM yusuan GROUP BY QUARTER(riqi) ");
}
@Override
public List<Map<String, Object>> queryXueLi() throws ClassNotFoundException, SQLException {
return dao.executeQueryForList(" select count(*) renshu ,xueli from yuangongxinxi GROUP BY xueli ");
}
@Override
public List<Map<String, Object>> queryZheXian() throws ClassNotFoundException, SQLException {
return dao.executeQueryForList(" select * from zuoye ");
}
@Override
public List<Map<String, Object>> queryFenbu() throws ClassNotFoundException, SQLException {
return dao.executeQueryForList(" SELECT LEFT(stu_native, LOCATE('#',stu_native)-1) shengfen,COUNT(*)renshu FROM xuesheng GROUP BY LEFT(stu_native, LOCATE('#',stu_native)-1)");
}
}
C层
package com.turing.manage.manager;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @desc C层
* @author Li Ya Hui
* @time 2021年6月15日 下午8:41:33
*/
@SuppressWarnings("serial")
public class TuServlet extends HttpServlet {
ITuService tuService=new TuServiceImpl();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String method=request.getParameter("method");
try {
if (method.equals("zhuTu")) {
this.zhuTu(request,response);
}
else if (method.equals("bingTu")) {
this.bingTu(request,response);
}
else if (method.equals("zheXianTu"))
{
this.zheXianTu(request,response);
}
else if (method.equals("fenBuTu"))
{
this.fenBuTu(request,response);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @desc 4.分布图
* @param request
* @param response
* @throws IOException
* @throws ServletException
* @throws SQLException
* @throws ClassNotFoundException
*/
private void fenBuTu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {
List<Map<String, Object>> list_fenbu=tuService.queryFenbu();
request.setAttribute("list_fenbu", list_fenbu);
request.getRequestDispatcher("/qxt/fb.jsp").forward(request, response);
}
/**
* @desc 3.折线图
* @param request
* @param response
* @throws IOException
* @throws ServletException
* @throws SQLException
* @throws ClassNotFoundException
*/
private void zheXianTu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {
List<Map<String, Object>> list_zhexian=tuService.queryZheXian();
request.setAttribute("list_zhexian", list_zhexian);
request.getRequestDispatcher("/jsps/tu/zheXian.jsp").forward(request, response);
}
/**
* @desc 2.饼图
* @param request
* @param response
* @throws IOException
* @throws ServletException
* @throws SQLException
* @throws ClassNotFoundException
*/
private void bingTu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {
List<Map<String, Object>> list_xueli=tuService.queryXueLi();
request.setAttribute("list_xueli", list_xueli);
request.getRequestDispatcher("/jsps/tu/bingTu.jsp").forward(request, response);
}
/**
* @desc 1.柱状图
* @param request
* @param response
* @throws SQLException
* @throws ClassNotFoundException
* @throws IOException
* @throws ServletException
*/
private void zhuTu(HttpServletRequest request, HttpServletResponse response) throws ClassNotFoundException, SQLException, ServletException, IOException {
//1.取出数据
//收入
List<Map<String, Object>> list_shouru=tuService.queryShouRu();
//支出
List<Map<String, Object>> list_zhichu=tuService.queryZhiChu();
//预算
List<Map<String, Object>> list_yusuan=tuService.queryYuSuan();
//2.存入request作用域中
request.setAttribute("list_shouru",list_shouru );
request.setAttribute("list_zhichu",list_zhichu );
request.setAttribute("list_yusuan", list_yusuan);
//3.转向
request.getRequestDispatcher("/jsps/tu/zhuTu.jsp").forward(request, response);
}
}
V层(柱状图) json有注释,不懂也可以在百度
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<%
String base = request.getContextPath()+"/";
String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+base;
%>
<base href="<%=url%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="./js/echarts/echarts.js"></script>
<script type="text/javascript" src="./js/jquery/jquery.js"></script>
<title>e-charts应用举例之通过柱状图显示公司的全年--季度财务统计报告</title>
</head>
<body>
<div id="main" style="width: 600px;heightcanvas基础绘制-绚丽倒计时