ECharts动态实现图表——折线图、条形图、饼图

下载ECharts

Echarts官网:https://echarts.apache.org/zh/index.html
在这里插入图片描述

条形图

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>echarts图表</title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet"
	href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" />
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/echarts.js"></script>
<script type="text/javascript">
	$(function() {
		$("#barBtn").click(function(){
			var myChart1 = echarts.init(document.getElementById('pic_1'));
			 window.onresize = function(){
					myChart1.resize();
				};
			//图表显示提示信息
			myChart1.showLoading();
			//定义图表options
			var options = {
					title : {
						text : "就业城市统计图",
						subtext:'各城市的人数/已就业的总人数*100',
					},
					tooltip : {
						trigger : 'axis'
					},
					legend : {
						data : []
					},
					toolbox : {
						show : true,
						feature : {
							mark : false
						}
					},
					calculable : true,
					xAxis : [ {
						type : 'category',
						data : []
					} ],
					yAxis : [ {
						type : 'value',
						splitArea : {
							show : true
						}, 
					}],
						series : [{
							type: 'bar',
							itemStyle: {
								normal: {
									//定义一个list,然后根据所以取得不同的值,这样就实现了,
									color: function(params) {
										var colorList = [
										      '#FF99CC','#330000','#66CC00','#33CCFF','#999900',
										      '#FF0099','#C1232B','#663333','#E87C25','#FF0033',
										      '#0000FF','#9BCA63','#993333','#FF6600','#7F7F7F',
										      '#660066','#339966','#FF0000','#383838','#336600',
										      '#336666','#990000','#CCCCFF','#FFFF00','#330033',
										      ];
										return colorList[params.dataIndex];
										},
										//以下为是否显示,显示位置和显示格式的设置了
										label: {
											show: true,
											position: 'top',
										}
								}
							},
							//设置柱的宽度,要是数据太少,柱子太宽不美观~
							barWidth : '60%',
							data : []
						}]	
					};
			//通过Ajax获取数据
			$.ajax({
				type: "post",
				url: "cityChart.do",
				data : {
					session: '2018'
				},
				dataType : "json", //返回数据形式为json
				success : function(result) {
					if (result) {
						//将返回的category和series对象赋值给options对象内的category和series
						//因为xAxis是一个数组 这里需要是xAxis[i]的形式
						options.legend.data = result.legend;
						options.xAxis[0].data = result.category;
						options.series[0].data = result.serisData;
						myChart1.hideLoading();
						myChart1.setOption(options);
					}
				},
				error : function(errorMsg) {
					alert("图表请求数据失败啦!");
				}
			});
		})
	});
</script>
</head>
<body>
	<!-- 统计图内容占8份 平板和手机统一占12份 -->
	<div class="col-xs-12 col-sm-12 col-md-9">
		<button type="button" id="barBtn">条形图</button>
		<div class="tab-content">
			<div role="tabpanel" class="tab-pane active" id="k_post_chart">
				<div id="pic_1" style="width: 100%; height: 400px;"></div>
			</div>
		</div>
	</div>
</body>
</html>

折线图

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>echarts图表</title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet"
	href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" />
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/echarts.js"></script>
<script type="text/javascript">
	$(function() {

		$("#lineBtn").click(function(){
			var myChart2 = echarts.init(document.getElementById('pic_2'));
			 window.onresize = function(){
					myChart2.resize();
				};
			//图表显示提示信息
			myChart2.showLoading();
			//定义图表options
			var options = {
					title : {
						text : "就业城市统计图",
						subtext:'各城市的人数/已就业的总人数*100',
					},
					tooltip : {
						trigger : 'axis'
					},
					legend : {
						data : []
					},
					toolbox : {
						show : true,
						feature : {
							mark : false
						}
					},
					calculable : true,
					xAxis : [ {
						type : 'category',
						data : []
					} ],
					yAxis : [ {
						type : 'value',
						splitArea : {
							show : true
						}, 
					}],
						series : [{
							type: 'line',
							itemStyle: {
								normal: {
									//定义一个list,然后根据所以取得不同的值,这样就实现了,
									color: function(params) {
										var colorList = [
										      '#FF99CC','#330000','#66CC00','#33CCFF','#999900',
										      '#FF0099','#C1232B','#663333','#E87C25','#FF0033',
										      '#0000FF','#9BCA63','#993333','#FF6600','#7F7F7F',
										      '#660066','#339966','#FF0000','#383838','#336600',
										      '#336666','#990000','#CCCCFF','#FFFF00','#330033',
										      ];
										return colorList[params.dataIndex];
										},
										//以下为是否显示,显示位置和显示格式的设置了
										label: {
											show: true,
											position: 'top',
										}
								}
							},
							//设置柱的宽度,要是数据太少,柱子太宽不美观~
							barWidth : '60%',
							data : []
						}]	
					};
			//通过Ajax获取数据
			$.ajax({
				type: "post",
				url: "cityChart.do",
				data : {
					session: '2018'
				},
				dataType : "json", //返回数据形式为json
				success : function(result) {
					if (result) {
						//将返回的category和series对象赋值给options对象内的category和series
						//因为xAxis是一个数组 这里需要是xAxis[i]的形式
						options.legend.data = result.legend;
						options.xAxis[0].data = result.category;
						options.series[0].data = result.serisData;
						myChart2.hideLoading();
						myChart2.setOption(options);
					}
				},
				error : function(errorMsg) {
					alert("图表请求数据失败啦!");
				}
			});
		})
	});
</script>
</head>
<body>
		<!-- 统计图内容占8份 平板和手机统一占12份 -->
	<div class="col-xs-12 col-sm-12 col-md-9">
		<button type="button" id="lineBtn">折线图</button>
		<div class="tab-content">
			<div role="tabpanel" class="tab-pane active" id="k_post_chart">
				<div id="pic_2" style="width: 100%; height: 400px;"></div>
			</div>
		</div>
	</div>
</body>
</html>

饼图

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>echarts图表</title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet"
	href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" />
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/echarts.js"></script>
<script type="text/javascript">
	$(function() {
		$("#pieBtn").click(function(){
			var myChart3 = echarts.init(document.getElementById('pic_3'));
			 window.onresize = function(){
					myChart3.resize();
				};
			//图表显示提示信息
			myChart3.showLoading();
			//定义图表options
			var options = {
					title : {
						text : "就业城市统计图",
						subtext:'各城市的人数/已就业的总人数*100',
					},
					tooltip : {
						trigger : 'axis'
					},
					legend : {
						data : []
					},
					toolbox : {
						show : true,
						feature : {
							mark : false
						}
					},
					calculable : true,
						series : [{
							type: 'pie',
							itemStyle: {
								normal: {
									//定义一个list,然后根据所以取得不同的值,这样就实现了,
									color: function(params) {
										var colorList = [
										      '#FF99CC','#330000','#66CC00','#33CCFF','#999900',
										      '#FF0099','#C1232B','#663333','#E87C25','#FF0033',
										      '#0000FF','#9BCA63','#993333','#FF6600','#7F7F7F',
										      '#660066','#339966','#FF0000','#383838','#336600',
										      '#336666','#990000','#CCCCFF','#FFFF00','#330033',
										      ];
										return colorList[params.dataIndex];
										},
										//以下为是否显示,显示位置和显示格式的设置了
										label: {
											show: true,
											position: 'top',
										}
								}
							},
							//设置柱的宽度,要是数据太少,柱子太宽不美观~
							barWidth : '60%',
							data : []
						}]	
					};
			//通过Ajax获取数据
			$.ajax({
				type: "post",
				url: "cityChart.do",
				data : {
					session: '2018'
				},
				dataType : "json", //返回数据形式为json
				success : function(result) {
					var array=[];
					var arr = result.serisData;
					if (result) {
						for(var i=0;i<arr.length;i++){
							array[i]={
									name:result.category[i],
									value:result.serisData[i]
							};
						}
						console.log(array);
						//将返回的category和series对象赋值给options对象内series
						options.legend.data = result.legend;
						options.series[0].data = array;
						myChart3.hideLoading();
						myChart3.setOption(options);
					}
				},
				error : function(errorMsg) {
					alert("图表请求数据失败啦!");
				}
			});
		})
	});
</script>
</head>
<body>
	<!-- 统计图内容占8份 平板和手机统一占12份 -->
	<div class="col-xs-12 col-sm-12 col-md-9">
		<button type="button" id="pieBtn">饼图</button>
		<div class="tab-content">
			<div role="tabpanel" class="tab-pane active" id="k_post_chart">
				<div id="pic_3" style="width: 100%; height: 400px;"></div>
			</div>
		</div>
	</div>
</body>
</html>

Controller层代码

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String session = request.getParameter("session");
		Map<String, Object> map= empService.getChartData(session);
		// 解决json中文乱码
		response.setContentType("text/json;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		JSONObject jsonObject =  JSONObject.fromObject(map);
		System.out.println(jsonObject);
		out.print(jsonObject);
		out.flush();
		out.close();
	}

Service层代码

public Map<String, Object> getChartData(String session) {
		Map<String, Object> map = null;
		try {
			List<Chart> chartList = empDao.selectChartCity(session);
			Chart chartOther = empDao.selectOther(session);
			Chart chartCount = empDao.selectCount(session);
			List<String> category = new ArrayList<String>();
			List<String> serisData=new ArrayList<String>();
			DecimalFormat df = new DecimalFormat("#.00"); 
			for (Chart chart : chartList) {
				category.add(chart.getObtaincity());
				serisData.add(df.format(((double)chart.getNum()/chartCount.getCount())*100));
			}
			category.add("其它");
			serisData.add(df.format(((double)chartOther.getNum()/chartCount.getCount())*100));
		    List<String> legend = new ArrayList<String>(Arrays.asList(new String[] { "百分比" }));// 数据分组
		    map= new HashMap<String, Object>();
		    map.put("category", category);
		    map.put("serisData", serisData);
		    map.put("legend", legend);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return map ;
		
	}

欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位指点,在此表示感激不尽。文章持续更新中…

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐小侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值