amcharts使用总结

  由于业务需要,需要将后台数据使用图表的方式展现在前端。目前关于图表展现的软件比较多,有high chart,JFree charts 等。我们选择的是amcharts。 

    最开始我们使用amcharts1.6版本,其具有较低的学习成本。其在前端的工作量很少,主要写如下代码: 


var uri2="checkSeatQuery01.htm?dep="+dep+"&arr="+arr+"&date="+date+"&time="+Math.random(); 
var so2 = new SWFObject("/static/js/amline.swf", "amline", "100%", "100%", "8", "#FFFFFF"); 
so2.addVariable("path", "/static/js/"); 
so2.addVariable("settings_file", encodeURIComponent("/static/xml/amline_settings_checkSeat2.xml")); 
so2.addVariable("data_file", escape(uri2));//通过url传入动态数据 
so2.write("flashcontent2"); 

    其中amline_settings_checkSeat2.xml为图表配置文件,可以参考http://extra.amcharts.com/editor/line/ ,你实时的调节相关配置参数,就能动态看到效果了,然后他还可以直接帮你生成你所需要的配置文件,非常方便。 
    而uri2则负责在后台将请求数据封装成xml格式,如下: 

@RequestMapping("checkSeatQuery01.htm") 
public void checkSeatQuery01(final HttpServletRequest request, final HttpServletResponse response,ModelMap result) throws IOException 

        
        String dep=UnicodeToString(request.getParameter("dep")); 
        String arr=UnicodeToString(request.getParameter("arr")); 
        String date=request.getParameter("date"); 
        try{ 
                List<Map<String,Object>> resultlist=checkSeatService.selectCheckSeat(dep, arr, date); 
                
                String s=generateDataXmlString(resultlist); 
                PrintWriter writer = response.getWriter(); 
                writer.write(s); 
        } 
        catch(Exception e){ 
                logger.info("check seat service failure",e); 
        } 
        


private static String generateDataXmlString(List<Map<String,Object>> list) { 
        if (list == null || list.size() == 0){ 
                return "<chart><series></series><graphs></graphs></chart>"; 
        } 
        StringBuffer series = new StringBuffer("<chart><series>"); 
        StringBuffer graphs=new StringBuffer("<graphs>"); 
        for(int i=0;i<list.size();i++){ 
                Iterator it = list.get(i).keySet().iterator(); 
                int j=0; 
                graphs.append("<graph gid=\""+i+"\">"); 
                if(!it.hasNext()){ 
                        series.append("<value xid=\"0\">0</value>"); 
                        graphs.append("<value xid=\"0\">0</value>"); 
                } 
                while(it.hasNext()){ 
                        String key=(String)it.next(); 
                        if(i==0){ 
                                series.append("<value xid=\""+j+"\">"+key+"</value>"); 
                        } 
                        graphs.append("<value xid=\""+j+"\">"+list.get(i).get(key)+"</value>"); 
                        j++; 
                } 
                if(i==0) 
                series.append("</series>"); 
                graphs.append("</graph>"); 
                
                
        } 
        series.append(graphs).append("</graphs></chart>"); 
        return series.toString(); 





    以上使用十分简单,但是由于是url主动去请求数据,当在一个页面上画多图,同时应用在存在多机器的时候,页面上的图展示的可能是不同机器的数据(而不是同一机器上的,不符合需求)。 
    随后,我们使用ancharts2.2版本,将数据一次性传到前端,用js解析,然后交给amcharts画图,主要的工作集中到前端JS如下: 


<script type="text/javascript"> 
var chart1; 
var chart2; 
var chart3; 
jQuery(document).ready(function(){ 
var request_rate;//后台传入的数据集 
var success_percent;//后台传入的数据集 
var request_rate;//后台传入的数据集 
//var chartData=[{data:1000,price:125},{data:1230,price:100},{data:1250,price:150},{data:1500,price:140},{data:900,price:80}] 
//一共画三张图; 
amchartDisplay(chart1,parseData(collect_performance),"chartdiv0"); 
amchartDisplay(chart2,parseData(success_percent),"chartdiv1"); 
amchartDisplay(chart3,parseData(request_rate),"chartdiv2"); 
}); 
//数据解析函数,以满足amcharts输入要求。 
function parseData(data){ 
//alert(data); 
var dataProvider=[]; 
var rows = data.split(";"); 
for (var i = 0; i < rows.length; i++){ 
if (rows[i]) {                    

var column = rows[i].split(":"); 
var time = column[0]; 
var value = column[1]; 
var dataObject = {data:time, price:value}; 
dataProvider.push(dataObject); 

}  
//alert(dataProvider); 
return dataProvider;  

//amcharts画图函数 
function amchartDisplay(chart,chartData,div){ 
chart = new AmCharts.AmSerialChart(); 
//chart.pathToImages = "/lib/samples/javascript/images/"; 
chart.panEventsEnabled = true; 
chart.zoomOutButton = { 
backgroundColor: "#000000", 
backgroundAlpha: 0.15 
}; 
chart.dataProvider = chartData; 
chart.validateData(); 
chart.categoryField = "data"; 

//设置横坐标; 
var categoryAxis = chart.categoryAxis; 
// categoryAxis.parsedatas = true; // as our data is data-based, we set parsedatas to true 
// categoryAxis.minPeriod = "DD"; // our data is daily, so we set minPeriod to DD 
//categoryAxis.dashLength = 1; 
categoryAxis.gridAlpha = 0; 
// categoryAxis.axisColor = "#DADADA"; 
// categoryAxis.gridCount = 15; 
//categoryAxis.autoGridCount = false; 

// 设置纵坐标value                
var valueAxis = new AmCharts.ValueAxis(); 
valueAxis.axisColor = "#DADADA"; 
valueAxis.dashLength = 1; 
//valueAxis.logarithmic = true; // this line makes axis logarithmic 
chart.addValueAxis(valueAxis); 

// GRAPH 
var graph = new AmCharts.AmGraph(); 
graph.type = "smoothedLine"; 
graph.bullet = "round"; 
graph.bulletColor = "#FFFFFF"; 
graph.bulletBorderColor = "#00BBCC"; 
graph.bulletBorderThickness = 2; 
graph.bulletSize = 7; 
graph.title = "Price"; 
graph.valueField = "price"; 
graph.lineThickness = 2; 
graph.lineColor = "#00BBCC"; 
chart.addGraph(graph); 
// CURSOR 
var chartCursor = new AmCharts.ChartCursor(); 
chartCursor.cursorPosition = "mouse"; 
chart.addChartCursor(chartCursor); 
// SCROLLBAR 
var chartScrollbar = new AmCharts.ChartScrollbar(); 
chart.addChartScrollbar(chartScrollbar); 
// WRITE 
var parent=document.getElementById(div); 
while(parent.hasChildNodes())    //注意,此处需要清空div内容,以避免浏览器缓存上次的图形信息。 

parent.removeChild(parent.firstChild); 

chart.write(div);//画图到指定的div上 

}   

</script> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xml <!-- [xml] (xml / csv) 数据类型xml/csv--> ; <!-- 如果使用csv作为数据的话,需要使用这个属性;表示文件数据分隔符,(平常以";"和","为主) [;] (string) csv file data separator (you need it only if you are using csv file for your data) --> 1 <!-- 如果使用的是csv数据,可以设置跳过几行再显示数据,默认为0表示csv中的数据全部显示,大于n(n>0);表示前面n行都不显示[0] (Number) if you are using csv data type, you can set the number of rows which should be skipped here --> <!-- 设置系统中的字体[Arial] (font name) use device fonts, such as Arial, Times New Roman, Tahoma, Verdana... --> <!-- 设置所有文本的大小,默认为11,具体的文本的字体大小也可以在下面的设置中设置[11] (Number) text size of all texts. Every text size can be set individually in the settings below --> <!-- 同上[#000000] (hex color code) main text color. Every text color can be set individually in the settings below--> . <!-- 小数分隔符,默认为[,]注:该属性只是用来显示,而在csv数据文件中,必须使用[.] (string) decimal separator. Note, that this is for displaying data only. Decimals in data xml file must be separated with a dot --> <!-- 千位分隔符,默认为空[ ] (string) thousand separator. use "none" if you don't want to separate --> 3 <!-- 如果百分数格式的数字,后面的小数位小于该属性的值,则在小数后面加0补充。如54.2%,该属性设置为3,那么显示的效果为54.200%。[] (Number) if your value has less digits after decimal then is set here, zeroes will be added --> <!--设置科学记数法的最小值 [0.000001] If absolute value of your number is equal or less then scientific_min, this number will be form

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值