echarts 动态数据交互实例

echarts 动态数据交互实例

原创  2016年01月25日 13:44:43

最近在学习echarts,找到了很多的资料,找起来比较麻烦,为了方便自己以后的使用,特此做个笔记。

首先是echarts如何使用,要先下载echarts相关的包,我这边提供的是echarts3.0的下载地址:http://echarts.baidu.com/download.html</p><p>

之前看到echarts2.0的引入有两种方法:模块化单文件引入和标签式单文件引入,介绍如下,感兴趣的可以看一看:http://study.163.com/course/introduction.htm?

之前在网上找了好多资料,都没有实现,自己整理了各路大神的资料,下面我将介绍一个Demo,实现动态数据交互

1,前台jsp页面</p><p>a.首先引入echarts jar包,我这里还加入了jquery jar包和bootstrap jar包,为了手机上显示美观

[html]  view plain  copy
  1. <!-- 移动设备优先(让项目友好的支持移动设备) -->  
  2. <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0,user-scalable=no">  
  3. <title>echarts动态数据交互</title>  
  4. <link rel="stylesheet" href="<%=request.getContextPath()%>/css/bootstrap.min.css">  
  5. <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-2.1.4.js"></script>  
  6. <script type="text/javascript" src="<%=request.getContextPath()%>/js/bootstrap.min.js"></script>  
  7. <script type="text/javascript" src="<%=request.getContextPath() %>/js/echarts.js"></script>  

b.其次为 ECharts 准备一个具备大小(宽高)的

[html]  view plain  copy
  1. <body>  
  2. <div id="main"  style="width: 600px;height:400px;"></div>  
  3. </body>  

c,下面就是最主要的部分,初始化echarts实例,并配置</p><p></p><pre name="code" class="javascript"><script type="text/javascript">

[java]  view plain  copy
  1. $(function(){  
  2.     var url = '<%=request.getContextPath()%>/ApplyServlet';  
  3. var id = 'main';  
  4. setChartBar(url);  
  5. });  
  6.   
  7. /设置ajax访问后台填充柱图  
  8. function setChartBar(url){  
  9.   
  10.  var Chart=echarts.init(document.getElementById("main"));  
  11.  Chart.showLoading(  
  12.          {text: 'Loding...'  }  
  13. );  
  14.  var categories=[];  
  15.  var values=[];  
  16.  $.ajax({  
  17.         url:url,  
  18.         dataType:"json",  
  19.         type:'post',  
  20.         success:function(json){  
  21.           
  22.             categories = json.categories;    
  23.            values = json.values;   
  24.             
  25.         var option = {    
  26.                 tooltip: {    
  27.                     show: true    
  28.                 },    
  29.                 legend: {    
  30.                     data: ['销量']    
  31.                 },    
  32.                 xAxis: [    
  33.                     {    
  34.                         type: 'category',    
  35.                         data: categories    
  36.                     }    
  37.                 ],    
  38.                 yAxis: [    
  39.                     {    
  40.                         type: 'value'    
  41.                     }    
  42.                 ],    
  43.                 series: [    
  44.                     {    
  45.                         'name''销量',    
  46.                         'type''bar',    
  47.                         'data': values    
  48.                     }    
  49.                 ]    
  50.             };  
  51.         Chart.hideLoading();  
  52.         Chart.setOption(option);    
  53.         }  
  54.         });  
  55. }   
  56.   
  57. t;/script>  

2,后台交互

a,新建ApplyServlet

[java]  view plain  copy
  1. package com.fpp.action;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import com.fpp.util.JsonUtils;  
  13.   
  14. public class ApplyServlet extends HttpServlet {  
  15.   
  16.     /** 
  17.      *  
  18.      */  
  19.     private static final long serialVersionUID = 1L;  
  20.       
  21.     @Override  
  22.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
  23.           
  24.         String[] categories = {"鞋""衬衫""外套""牛仔裤"};    
  25.         Integer[] values = {805075100};    
  26.         Map<String, Object> json = new HashMap<String, Object>();    
  27.         json.put("categories", categories);    
  28.         json.put("values", values);    
  29.         JsonUtils.writeJson(json, req, resp);    
  30.     }  
  31.   
  32. }  
b.配置web.xml


[html]  view plain  copy
  1. <servlet>  
  2.   <servlet-name>ApplyServlet</servlet-name>  
  3.   <servlet-class>com.fpp.action.ApplyServlet</servlet-class>  
  4. </servlet>  
  5. <servlet-mapping>  
  6.   <servlet-name>ApplyServlet</servlet-name>  
  7.   <url-pattern>/ApplyServlet</url-pattern>  
  8. </servlet-mapping>  

c,配置一个工具类JsonUtils

[java]  view plain  copy
  1. package com.fpp.util;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5. import java.util.Arrays;  
  6.   
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. import com.alibaba.fastjson.JSON;  
  11. import com.alibaba.fastjson.serializer.SerializerFeature;  
  12.   
  13. public class JsonUtils {  
  14.     public static void writeJson(Object object,     
  15.             HttpServletRequest request, HttpServletResponse response) {    
  16.         writeJsonByFilter(object, nullnull, request, response);    
  17.     }    
  18.         
  19.     public static void writeJsonByIncludesProperties(Object object, String[] includesProperties,    
  20.             HttpServletRequest request, HttpServletResponse response) {    
  21.         writeJsonByFilter(object, includesProperties, null, request, response);    
  22.     }    
  23.         
  24.     public static void writeJsonByExcludesProperties(Object object, String[] excludesProperties,    
  25.             HttpServletRequest request, HttpServletResponse response) {    
  26.         writeJsonByFilter(object, null, excludesProperties, request, response);    
  27.     }    
  28.         
  29.     public static void writeJsonByFilter(Object object, String[] includesProperties,    
  30.             String[] excludesProperties, HttpServletRequest request, HttpServletResponse response) {    
  31.         response.setContentType("text/html;charset=utf-8");    
  32.         response.setHeader("Cache-Control""no-cache");    
  33.         PrintWriter writer = null;    
  34.         try {    
  35.             writer = response.getWriter();    
  36.             FastjsonPropertyFilter filter = new FastjsonPropertyFilter();    
  37.             if (includesProperties != null && includesProperties.length > 0) {    
  38.                 filter.getIncludes().addAll(Arrays.<String> asList(includesProperties));    
  39.             }    
  40.             if (excludesProperties != null && excludesProperties.length > 0) {    
  41.                 filter.getExcludes().addAll(Arrays.<String> asList(excludesProperties));    
  42.             }    
  43.             String userAgent = request.getHeader("User-Agent");    
  44.             if (userAgent.indexOf("MSIE") > -1 && (userAgent.indexOf("MSIE 6") > -1)) {    
  45.                 writer.write(JSON.toJSONString(object, filter,     
  46.                         SerializerFeature.WriteDateUseDateFormat,     
  47.                         SerializerFeature.DisableCircularReferenceDetect,     
  48.                         SerializerFeature.BrowserCompatible));    
  49.             } else {    
  50.                 writer.write(JSON.toJSONString(object, filter,     
  51.                         SerializerFeature.WriteDateUseDateFormat,     
  52.                         SerializerFeature.DisableCircularReferenceDetect));    
  53.             }    
  54.             writer.flush();    
  55.         } catch (IOException e) {    
  56.             e.printStackTrace();    
  57.         } finally {    
  58.             if (writer != null) {    
  59.                 writer.close();    
  60.             }    
  61.         }    
  62.     }    
  63. }  
d.FastjsonPropertyFilter,注意,这里需要引入一个包 fastjson-1.2.2.jar

[java]  view plain  copy
  1. package com.fpp.util;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import com.alibaba.fastjson.serializer.PropertyFilter;  
  7.   
  8. public class FastjsonPropertyFilter implements PropertyFilter {    
  9.       
  10.     private final Set<String> includes = new HashSet<String>();    
  11.     private final Set<String> excludes = new HashSet<String>();    
  12.         
  13.     public boolean apply(Object source, String name, Object value) {    
  14.         if (excludes.contains(name)) {    
  15.             return false;    
  16.         }    
  17.         if (excludes.contains(source.getClass().getSimpleName() + "." + name)) {    
  18.             return false;    
  19.         }    
  20.         if (includes.size() == 0 || includes.contains(name)) {    
  21.             return true;    
  22.         }    
  23.         if (includes.contains(source.getClass().getSimpleName() + "." + name)) {    
  24.             return true;    
  25.         }    
  26.         return false;    
  27.     }    
  28.         
  29.     public Set<String> getIncludes() {    
  30.         return includes;    
  31.     }    
  32.         
  33.     public Set<String> getExcludes() {    
  34.         return excludes;    
  35.     }    
  36.         
  37. }    

3,最终的效果



源码地址:点击打开链接


学习相关网址:
echarts jar包下载地址:http://echarts.baidu.com/download.html
echarts API :http://echarts.baidu.com/api.html#echarts
echarts 实例:http://echarts.baidu.com/echarts2/doc/example.html
echarts 配置:http://echarts.baidu.com/option.html#series-pie.data

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ECharts是一个基于JavaScript的开源可视化库,用于构建交互式的数据可视化图表。它支持多种图表类型,包括折线图、柱状图、饼图、散点图等,并且可以通过动态数据实现实时更新和交互效果。 要实现ECharts动态数据效果,可以通过以下几个步骤: 1. 初始化ECharts实例:首先需要创建一个ECharts实例,并指定一个DOM元素作为容器。 2. 定义图表配置项:通过配置项可以设置图表的样式、数据交互行为。在配置项中,可以定义一个或多个系列(series),每个系列对应一种图表类型。 3. 更新数据:通过调用ECharts实例的setOption方法,可以更新图表的数据。可以通过定时器、Ajax请求或其他方式获取最新的数据,并将数据更新到配置项中。 4. 刷新图表:调用ECharts实例的方法(如refresh)可以刷新图表,使其显示最新的数据。 下面是一个简单的示例代码,展示了如何使用ECharts实现动态数据效果: ```javascript // 初始化ECharts实例 var myChart = echarts.init(document.getElementById('chartContainer')); // 定义图表配置项 var option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [120, 200, 150, 80, 70, 110, 130], type: 'bar' }] }; // 更新数据 function updateData() { // 模拟获取最新数据 var newData = [150, 180, 200, 90, 120, 160, 140]; option.series.data = newData; // 刷新图表 myChart.setOption(option); } // 每隔一段时间更新数据 setInterval(updateData, 2000); ``` 这段代码创建了一个柱状图,x轴表示星期几,y轴表示某项指标的数值。通过定时器每隔2秒更新一次数据,实现了动态效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值