C#+JQuery+.Ashx+百度Echarts 实现全国省市地图和饼状图动态数据图形报表的统计

在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库。echarts功能强大,界面优美。由于客户是淘宝卖家,因此想要实现每个月全国各个省份各自购力如何,大家可以统计其他的,如果GDP
人口 等等。

百度echarts简介请参考

http://echarts.coding.io/doc/example.html

效果图如下:全部是动态数据

JS代码:

<!-- Charts Layout Stylesheet -->

<link href="assets/css/echartsHome.css" rel="stylesheet"/>

<script src="assets/js/esl.js"></script>

<script src="assets/js/codemirror.js"></script>

HTML代码:(放在中间呈现)

<div id="mapPieCharts" class="main" ></div>

<script src="assets/js/jquery-1.8.2.min.js"></script>

<script src="assets/js/echarts-map.js"></script>

<script src="assets/js/EchartsJson.js"></script>

EchartsJson JS里面的代码如下:

  	 function needMap() {
		  	 	 var href = location.href;
		  	 	 return href.indexOf('map') != -1
						|| href.indexOf('mix3') != -1
						|| href.indexOf('mix5') != -1
						|| href.indexOf('dataRange') != -1;

		  	 }

		  	 var fileLocation = needMap() ? 'assets/js/echarts-map' : 'assets/js/echarts';
		  	 require.config({
		  	 	 paths: {
		  	 	 	 echarts: fileLocation,'echarts/assets/js/pie': fileLocation,
					 'echarts/assets/js/map': fileLocation,
		  	 	 }
		  	 });

		  	 require(
						[
							'echarts','echarts/chart/pie',needMap() ? 'echarts/chart/map' : 'echarts'
						],
						 DrawCharts
			    );
		  	 function DrawCharts(ec) {
		  		  	 	 FunDraw1(ec);
		  	 }

		  	 function FunDraw1(ec) {
		  	 	 //---地图饼状图 ---
		  	 	 var mapChart = ec.init(document.getElementById('mapPieCharts'));
		  	 	 mapChart.showLoading({text: "加载中...请等待" });
		  	 	 mapChart.hideLoading();
		  	 	 var seriesMapData;
		  	 	 var seriesPieData;
		  	 	 var legendData;
		  	 	 $.ajax({
		  	 	 	 type: "post",
		  	 	 	 async: false, //同步执行
		  	 	 	 url: "SearchHandler.ashx?MapPieType=MapPieChart",
		  	 	 	 dataType: "json",
		  	 	 	 success: function (result) {
		  	 	 	 	 seriesMapData = eval('(' + result.split('_')[0] + ')');
		  	 	 	 	 seriesPieData = eval('(' + result.split('_')[1] + ')');
		  	 	 	 	 legendData = eval('(' + result.split('_')[2] + ')');
		  	 	 	 },
		  	 	 	 error: function (errorMsg) {
		  	 	 	 	 alert("全国各省份订单销售量统计数据请求失败。");
		  	 	 	 }
		  	 	 });
		  	 	 mapChart.setOption({
		  	 	 	 title: {
		  	 	 	 	 text: new Date().getFullYear() + '全国各省份订单销售量统计(月/单)',
		  	 	 	 	 subtext: '数据来自WMS统计'
		  	 	 	 },
		  	 	 	 tooltip: {
		  	 	 	 	 trigger: 'item'
		  	 	 	 },
		  	 	 	 legend: {
		  	 	 	 	 x: 'right',
		  	 	 	 	 selectedMode: false,
		  	 	 	 	 data: legendData
		  	 	 	 },
		  	 	 	 dataRange: {
		  	 	 	 	 orient: 'horizontal',
		  	 	 	 	 min: 0,
		  	 	 	 	 max: 200,
		  	 	 	 	 text: ['购买力强', '低'],
		  	 	 	 	 splitNumber: 0,
		  	 	 	 	 color: ['orangered', 'yellow', 'lightskyblue']
		  	 	 	 },
		  	 	 	 animation: false,
		  	 	 	 series: [
								{
				 					name: new Date().getFullYear() + '全国各省份订单销售量',
				 					type: 'map',
				 					mapType: 'china',
				 					mapLocation: {x: 'left'},
				 					selectedMode: 'multiple',
				 					itemStyle: {
				 	 					normal: { label: { show: true } },
				 	 					emphasis: { label: { show: true } }
				 					},
				 					data: seriesMapData
								},
								{
				 					name: new Date().getFullYear() + '全国各省份订单销售量',
				 					type: 'pie',
				 					roseType: 'area',
				 					tooltip: {
				 	 					trigger: 'item',
				 	 					formatter: "{a} <br />{b} : {c} ({d}%)"
				 					},
				 					center: [document.getElementById('mapPieCharts').offsetWidth - 250, 225],
				 					radius: [30, 120],
				 					data: seriesPieData
								}
		  	 	 	 ]
		  	 	 });

		  	 }

C#代码如下:

   #region// 地图和饼状图组合查询
			   if (!string.IsNullOrEmpty(context.Request["MapPieType"]))
			   {
					//图例名称
					var legend = string.Empty;
					//饼状图数据 省份及统计的数据
					StringBuilder sbPieData = new StringBuilder();
					sbPieData.Append("[");
					//地图数据 省份及统计的数据
					StringBuilder sbMapData = new StringBuilder();
					sbMapData.Append("[");

					using (PortalSearchDataContext db = new PortalSearchDataContext())
					{
						 List<SeriesMapPieData> getMapPieDataList =
							  (from province in
									(
											  (from t in db.DOC_Order_Header
											   where
													t.C_Address1 != "" && t.SOStatus == "99" &&
													t.OrderTime >= startMonth.Date.Date && t.OrderTime
<= DateTime.Parse(endMonth.Date.ToString("yyyy-MM-dd 23:59"))
											   group t by new
											   {
													t.C_Address1,
													t.OrderTime
											   } into g
											   select new
											   {
													ProName = g.Key.C_Address1.Substring(0, 3).Replace("省", "").Replace("壮", "")
.Replace("回", "").Replace("维", ""),
													Number = g.Count(),
													OrderTime = g.Key.OrderTime
											   }))
							   group province by new
							   {
									province.ProName
							   } into g
							   orderby
									g.Sum(p => p.Number)
							   select new SeriesMapPieData
							   {
									name = g.Key.ProName,
									value = g.Sum(p => p.Number)
							   }).ToList<SeriesMapPieData>();
						 for (int i = 0; i < getMapPieDataList.Count; i++)
						 {
							  sbMapData.Append("{name:'" + getMapPieDataList[i].name + "',value:" + getMapPieDataList[i].value + "},");
						 }
						 //取得排名前十条的legendname数据
						 List<SeriesMapPieData> legendName =
getMapPieDataList.OrderByDescending(x => x.value).Take(10).ToList<SeriesMapPieData>();
						 for (int i = 0; i < legendName.Count(); i++)
						 {
							  legend += "'" + legendName[i].name + "',";
							  sbPieData.Append("{name:'" + legendName[i].name + "',value:" + legendName[i].value + "},");
						 }
					}
					var getPieData = sbMapData.ToString().TrimEnd(',') +"]_" + sbPieData.ToString().TrimEnd(',') + "]_[" + legend.TrimEnd(',') + "]";
					context.Response.Write(getPieData.ToJson());
			   }
			   #endregion

			   context.Response.End();

其他参考地址:

http://www.stepday.com/topic/?906

http://www.shaoqun.com/a/93673.aspx

http://suchso.com/catalog.asp?tags=Echarts%E4%BD%BF%E7%94%A8

http://www.it165.net/pro/html/201310/7515.html

http://baigungun.blog.51cto.com/6736785/1312743/

http://www.cnblogs.com/zhangxl/p/chart.html

http://www.aiuxian.com/article/p-282551.html

整理好的Echarts文件地址如下:

http://files.cnblogs.com/kongwei521/Echarts%E8%A6%81%E7%94%A8%E5%88%B0%E7%9A%84js_css_dll.zip

时间: 2025-01-04 05:57:30

C#+JQuery+.Ashx+百度Echarts 实现全国省市地图和饼状图动态数据图形报表的统计的相关文章

Echarts生成饼状图、条形图以及线形图 JS封装

1.在我们开发程序中,经常会用到生成一些报表,比方说饼状图,条形图,折线图等.不多说了,直接上封装好的代码,如下Echarts.js所示 以下代码是封装在Echarts.js文件中 /** * Created by Administrator on 2015/8/7. */ var charec; // 路径配置 require.config({ paths: { echarts: 'http://echarts.baidu.com/build/dist' } }); // 按需加载所需图表 r

ECharts 报表事件联动系列四:柱状图,折线图,饼状图实现联动

代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ECharts</title> <!-- <script src="http://echarts.baidu.com/dist/echarts.min.j

jquery和highcharts折线图、柱形图、饼状图-模拟后台传參源代码

js代码: <script type="text/javascript"> $(function(){ showLine(); showColumn(); showPie(); }); function showPie(){ jQuery.ajax({ type: "get", url: "csylLine.json", async: false, dataType: "json", success:functio

一款基于jQuery饼状图比例分布数据报表

今天给大家带来一款基于jQuery饼状图比例分布数据报表.这款报表插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div style="width: 600px; margin: 0 auto;"> <table id='myTable5'> <caption> 会员地区分布</caption> <th

ECharts学习(2)--饼状图之南丁格尔图

1.上一篇中讲了如何绘制一个简单的柱状图,这次要画的是饼图,饼图主要是通过扇形的弧度表现不同类目的数据在总和中的占比,它的数据格式比柱状图更简单,只有一维的数值,不需要给类目.因为不在直角坐标系上,所以也不需要xAxis,yAxis. 2.itemStyle都会有normal和emphasis两个选项,normal选项是正常展示下的样式,emphasis是鼠标 hover 时候的高亮样式.也可以把阴影的效果设置在hover的时候. 3.背景色是全局的,所以直接在 option 下设置backgr

jquery和highcharts折线图、柱形图、饼状图-模拟后台传参源码

js代码: <script type="text/javascript"> $(function(){ showLine(); showColumn(); showPie(); }); function showPie(){ jQuery.ajax({ type: "get", url: "csylLine.json", async: false, dataType: "json", success:functio

图表echarts折线图,柱状图,饼状图

总体就是有折线图相关图标的设置,x,y轴的设置,x,y轴或者数据加上单位的设置.饼状图如何默认显示几个数据中的某个数据 折线图:legend(小标题)中间默认是圆圈 改变成直线 在legend设置的时候就改变icon的形状 legend: { data:[ { name:'访问次数', icon:'line' }, { name:'访', icon:'line' }, { name:'访问', icon:'line' }, ], textStyle:{ color:'#fff' }, right

echarts 饼状图调节 label和labelLine的位置

原理 使用一个默认颜色为透明的,并且只显示labelLine的饼状图 然后通过调节这个透明的饼状图 以达到修改labelLine的位置 echarts地址 https://gallery.echartsjs.com/editor.html?c=x6VnXPfxlx echarts源码: option = { backgroundColor: "#03141c", title: { text: "84%", subtext: '完成部门占比', x: 'center'

Echarts饼状图

<head> <meta charset="utf-8"> <title>ECharts</title> <script src="js/esl.js"></script></head><body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="height: