热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ECharts初识(基于MVC+jQuery+Angularjs)

一、背景:我们这行做web开发的,很多时候都需要做数据统计报表,现在我所使用的是来自百度团队的ECharts。官方网址:http:echarts.baidu.com我们知道,很多时

一、背景:

     我们这行做web开发的,很多时候都需要做数据统计报表,现在我所使用的是来自百度团队的ECharts。官方网址:http://echarts.baidu.com/

     我们知道,很多时候我们需要一些吸引眼球的能力。先上一张稍微有一点点炫的图给大家看看。

技术分享

 

二、代码栗子

     1.在页面直接使用静态数据进行显示

     步骤:

          (1)先建一个空的MVC项目,并将它命名为EChartsDemo

          (2)再建一个空的控制器HomeController,并创建一个Index视图



技术分享技术分享

1 namespace EChartsDemo.Controllers
2 {
3 public class HomeController : Controller
4 {
5 ///


6 /// 首页--柱状图(使用静态数据)
7 ///

8 ///
9 public ActionResult Index()
10 {
11 return View();
12 }
13 }
14 }

HomeController.cs

技术分享技术分享

1 DOCTYPE html>
2 <head>
3 <meta charset="utf-8">
4 <title>EChartstitle>
5 head>
6 <body>
7
8 <div id="main" style="height: 400px">div>
9
10
11 <script src="http://echarts.baidu.com/build/dist/echarts.js">script>
12
13 <script>
14 // 路径配置
15 require.config({
16 paths: {
17 echarts: http://echarts.baidu.com/build/dist
18 }
19 });
20
21 // 使用
22 require(
23 [
24 echarts,
25 echarts/chart/bar // 使用柱状图就加载bar模块,按需加载
26 ],
27 function (ec) {
28 // 基于准备好的dom,初始化echarts图表
29 var myChart = ec.init(document.getElementById(main));
30
31 var option = {
32 tooltip: {
33 show: true
34 },
35 legend: {
36 data: [销量]
37 },
38 xAxis: [
39 {
40 type: category,
41 data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] //--①--
42 }
43 ],
44 yAxis: [
45 {
46 type: value
47 }
48 ],
49 series: [
50 {
51 "name": "销量",
52 "type": "bar",
53 "data": [5, 20, 40, 10, 10, 20] //--②--
54 }
55 ]
56 };
57
58 // 为echarts对象加载数据
59 myChart.setOption(option);
60 }
61 );
62 script>
63 body>


Index.cshtml

 

技术分享  运行后的效果图:

技术分享

      我们可以在Index.cshtml代码中的--①②--处自己学习加下数据。

      对于它的使用,我们可以简单的总结为:

        a.准备一个Dom  -->  b.引入js  -->  c.配置路径  -->  d.动态加载图表

 

  2.这次我们弄个饼图(MVC+jQuery),上次我们引入的是网上中的js,现在我们换成本地的js。文件需要自己到官方下载。

  步骤:

    (1)在Models文件夹添加两个类

技术分享技术分享

1 namespace EChartsDemo.Models
2 {
3 public class PieMapViewModel
4 {
5 ///


6 /// 图例数据
7 ///

8 public List<string> LegendData { get; set; }
9
10 ///
11 /// 图表数据
12 ///

13 public List SeriesData { get; set; }
14 }
15 }

PieMapViewModel

技术分享技术分享

1 namespace EChartsDemo.Models
2 {
3 public class VisitSource
4 {
5 public string value { get; set; }
6
7 public string name { get; set; }
8 }
9 }


VisitSource

    (2)在HomeController中添加两个名为PieMap的方法

技术分享技术分享

1 namespace EChartsDemo.Controllers
2 {
3 public class HomeController : Controller
4 {
5 ///


6 /// 首页--柱状图(使用静态数据)
7 ///

8 ///
9 public ActionResult Index()
10 {
11 return View();
12 }
13
14
15 ///
16 /// 饼图(jq获取动态数据)
17 ///

18 ///
19 public ActionResult PieMap()
20 {
21 return View();
22 }
23
24
25 ///
26 /// 饼图(jq获取动态数据)
27 ///

28 ///
29 [HttpPost]
30 public ActionResult PieMap(string id)
31 {
32 var pie = new PieMapViewModel()
33 {
34 LegendData = new List<string>()
35 {
36 "直接访问",
37 "邮件营销",
38 "联盟广告",
39 "视频广告",
40 "搜索引擎"
41 },
42 SeriesData = new List()
43 {
44 new VisitSource() {name = "直接访问", value = "335"},
45 new VisitSource() {name = "邮件营销", value = "310"},
46 new VisitSource() {name = "联盟广告", value = "234"},
47 new VisitSource() {name = "视频广告", value = "135"},
48 new VisitSource() {name = "搜索引擎", value = "1548"}
49 }
50 };
51
52 return Json(new { status = 1, result = pie });
53 }
54 }
55 }

HomeController.cs

    (3)前端代码

技术分享技术分享

1
2
3 "utf-8">
4
5
6
7
8

"main" color: #800000;">"height: 800px">

9
10
11 @**@
12
13
14
15
16
103

PieMap.cshtml

技术分享  运行后的效果图:

 

技术分享

 

  3.依然是这个饼图,只不过这次我们将前端换成Angularjs+jQuery的形式

    (1)在HomeController内添加方法PieMapS【因为手机升级版常常在尾端加上S】

技术分享技术分享

1 namespace EChartsDemo.Controllers
2 {
3 public class HomeController : Controller
4 {
5 ///


6 /// 首页--柱状图(使用静态数据)
7 ///

8 ///
9 public ActionResult Index()
10 {
11 return View();
12 }
13
14
15 ///
16 /// 饼图(jq获取动态数据)
17 ///

18 ///
19 public ActionResult PieMap()
20 {
21 return View();
22 }
23
24
25 ///
26 /// 饼图(jq获取动态数据)
27 ///

28 ///
29 [HttpPost]
30 public ActionResult PieMap(string id)
31 {
32 var pie = new PieMapViewModel()
33 {
34 LegendData = new List<string>()
35 {
36 "直接访问",
37 "邮件营销",
38 "联盟广告",
39 "视频广告",
40 "搜索引擎"
41 },
42 SeriesData = new List()
43 {
44 new VisitSource() {name = "直接访问", value = "335"},
45 new VisitSource() {name = "邮件营销", value = "310"},
46 new VisitSource() {name = "联盟广告", value = "234"},
47 new VisitSource() {name = "视频广告", value = "135"},
48 new VisitSource() {name = "搜索引擎", value = "1548"}
49 }
50 };
51
52 return Json(new { status = 1, result = pie });
53 }
54
55 ///
56 /// 饼图(angularjs)
57 ///

58 ///
59 public ActionResult PieMapS()
60 {
61 return View();
62 }
63
64 }
65 }

HomeController.cs

    (2)准备好视图和js文件(pieMapS.js为自定义的脚本)

技术分享技术分享

DOCTYPE html>
<head>
<meta charset="utf-8">
<title>EChartstitle>
head>
<body>

<div id="main" ng-app="myApp" ng-controller="myCtrl" style="height: 400px">
div>

<script src="http://echarts.baidu.com/build/dist/echarts.js">script>
<script src="~/Scripts/angular.js">script>
<script src="~/Scripts/jquery-2.1.4.min.js">script>
<script src="~/assets/scripts/pieMapS.js">script>
body>


PieMapS.cshtml

技术分享技术分享

1 var legendData;
2 var seriesData;
3
4 var app = angular.module("myApp", []);
5
6 app.controller("myCtrl", function ($scope, $http) {
7 $http
8 .post("/Home/PieMap")
9 .success(function (response) {
10 legendData = response.result.LegendData;
11 seriesData = response.result.SeriesData;
12 })
13 .error(function () {
14 alert("系统发生异常");
15 });
16
17 // 路径配置
18 require.config({
19 paths: {
20 echarts: ‘http://echarts.baidu.com/build/dist‘
21 }
22 });
23
24 // 使用
25 require(
26 [
27 "echarts",
28 "echarts/chart/pie" // 使用饼状图就加载pie模块,按需加载
29 ],
30 function (ec) {
31 // 基于准备好的dom,初始化echarts图表
32 var myChart = ec.init($("#main")[0]);
33
34 var option = getOption();
35
36 // 为echarts对象加载数据
37 myChart.setOption(option);
38 }
39 );
40
41 });
42
43 function getOption() {
44 return {
45 title: {
46 text: ‘某站点用户访问来源‘,
47 subtext: ‘纯属虚构‘,
48 x: ‘center‘
49 },
50 tooltip: {
51 trigger: ‘item‘,
52 formatter: "{a}
{b} : {c} ({d}%)"
53 },
54 legend: {
55 orient: ‘vertical‘,
56 x: ‘left‘,
57 data: legendData
58 },
59 toolbox: {
60 show: true,
61 feature: {
62 mark: { show: true },
63 dataView: { show: true, readOnly: false },
64 magicType: {
65 show: true,
66 type: [‘pie‘, ‘funnel‘],
67 option: {
68 funnel: {
69 x: ‘25%‘,
70 width: ‘50%‘,
71 funnelAlign: ‘left‘,
72 max: 1548
73 }
74 }
75 },
76 restore: { show: true },
77 saveAsImage: { show: true }
78 }
79 },
80 calculable: true,
81 series: [
82 {
83 name: ‘访问来源‘,
84 type: ‘pie‘,
85 radius: ‘55%‘,
86 center: [‘50%‘, ‘60%‘],
87 data: seriesData
88 }
89 ]
90 };
91 }


pieMapS.js

技术分享  运行后的效果图:参考上图

 

  【注意】js 的路径配置;

      如果没有显示出对应图形,可能是漏加载对应模块("echarts/chart/pie":表示饼图;‘echarts/chart/bar‘:表示柱状图;具体参考官方文档);

      获取Dom时不要写成 $("#main"),$("#main")[0] 才等同于 document.getElementById(‘main‘);

 

技术分享

 

  一切以官方文档为基准:http://echarts.baidu.com/doc/doc.html

  Demo下载:http://files.cnblogs.com/files/liqingwen/EChartsDemo.7z


推荐阅读
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
author-avatar
mobiledu2502876293
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有