echarts 动态数据交互实例

最近在学习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包,为了手机上显示美观

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

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

<body>
<div id="main"  style="width: 600px;height:400px;"></div>
</body>

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

 	$(function(){
 		var url = '<%=request.getContextPath()%>/ApplyServlet';
		var id = 'main';
		setChartBar(url);
 	});
	
	//设置ajax访问后台填充柱图
	 function setChartBar(url){
		
		 var Chart=echarts.init(document.getElementById("main"));
		 Chart.showLoading(
				 {text: 'Loding...'  }
		);
		 var categories=[];
		 var values=[];
		 $.ajax({
	       	url:url,
	       	dataType:"json",
	       	type:'post',
	       	success:function(json){
	       	
	       		categories = json.categories;  
	            values = json.values; 
            
		       	var option = {  
	       	        tooltip: {  
	       	            show: true  
	       	        },  
	       	        legend: {  
	       	            data: ['销量']  
	       	        },  
	       	        xAxis: [  
	       	            {  
	       	                type: 'category',  
	       	                data: categories  
	       	            }  
	       	        ],  
	       	        yAxis: [  
	       	            {  
	       	                type: 'value'  
	       	            }  
	       	        ],  
	       	        series: [  
	       	            {  
	       	                'name': '销量',  
	       	                'type': 'bar',  
	       	                'data': values  
	       	            }  
	       	        ]  
	       	    };
		        Chart.hideLoading();
		       	Chart.setOption(option);  
		       	}
	       	});
	 } 
	
</script>

2,后台交互

a,新建ApplyServlet

package com.fpp.action;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fpp.util.JsonUtils;

public class ApplyServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String[] categories = {"鞋", "衬衫", "外套", "牛仔裤"};  
	    Integer[] values = {80, 50, 75, 100};  
	    Map<String, Object> json = new HashMap<String, Object>();  
	    json.put("categories", categories);  
	    json.put("values", values);  
	    JsonUtils.writeJson(json, req, resp);  
	}

}
b.配置web.xml


  <servlet>
    <servlet-name>ApplyServlet</servlet-name>
    <servlet-class>com.fpp.action.ApplyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ApplyServlet</servlet-name>
    <url-pattern>/ApplyServlet</url-pattern>
  </servlet-mapping>

c,配置一个工具类JsonUtils

package com.fpp.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class JsonUtils {
	public static void writeJson(Object object,   
            HttpServletRequest request, HttpServletResponse response) {  
        writeJsonByFilter(object, null, null, request, response);  
    }  
      
    public static void writeJsonByIncludesProperties(Object object, String[] includesProperties,  
            HttpServletRequest request, HttpServletResponse response) {  
        writeJsonByFilter(object, includesProperties, null, request, response);  
    }  
      
    public static void writeJsonByExcludesProperties(Object object, String[] excludesProperties,  
            HttpServletRequest request, HttpServletResponse response) {  
        writeJsonByFilter(object, null, excludesProperties, request, response);  
    }  
      
    public static void writeJsonByFilter(Object object, String[] includesProperties,  
            String[] excludesProperties, HttpServletRequest request, HttpServletResponse response) {  
        response.setContentType("text/html;charset=utf-8");  
        response.setHeader("Cache-Control", "no-cache");  
        PrintWriter writer = null;  
        try {  
            writer = response.getWriter();  
            FastjsonPropertyFilter filter = new FastjsonPropertyFilter();  
            if (includesProperties != null && includesProperties.length > 0) {  
                filter.getIncludes().addAll(Arrays.<String> asList(includesProperties));  
            }  
            if (excludesProperties != null && excludesProperties.length > 0) {  
                filter.getExcludes().addAll(Arrays.<String> asList(excludesProperties));  
            }  
            String userAgent = request.getHeader("User-Agent");  
            if (userAgent.indexOf("MSIE") > -1 && (userAgent.indexOf("MSIE 6") > -1)) {  
                writer.write(JSON.toJSONString(object, filter,   
                        SerializerFeature.WriteDateUseDateFormat,   
                        SerializerFeature.DisableCircularReferenceDetect,   
                        SerializerFeature.BrowserCompatible));  
            } else {  
                writer.write(JSON.toJSONString(object, filter,   
                        SerializerFeature.WriteDateUseDateFormat,   
                        SerializerFeature.DisableCircularReferenceDetect));  
            }  
            writer.flush();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (writer != null) {  
                writer.close();  
            }  
        }  
    }  
}
d.FastjsonPropertyFilter,注意,这里需要引入一个包 fastjson-1.2.2.jar

package com.fpp.util;

import java.util.HashSet;
import java.util.Set;

import com.alibaba.fastjson.serializer.PropertyFilter;

public class FastjsonPropertyFilter implements PropertyFilter {  
    
    private final Set<String> includes = new HashSet<String>();  
    private final Set<String> excludes = new HashSet<String>();  
      
    public boolean apply(Object source, String name, Object value) {  
        if (excludes.contains(name)) {  
            return false;  
        }  
        if (excludes.contains(source.getClass().getSimpleName() + "." + name)) {  
            return false;  
        }  
        if (includes.size() == 0 || includes.contains(name)) {  
            return true;  
        }  
        if (includes.contains(source.getClass().getSimpleName() + "." + name)) {  
            return true;  
        }  
        return false;  
    }  
      
    public Set<String> getIncludes() {  
        return includes;  
    }  
      
    public Set<String> getExcludes() {  
        return excludes;  
    }  
      
}  

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





  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
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秒更新一次数据,实现了动态效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值