FusionChart

                                                                                      Fusioncharts 报表工具


1. Fusioncharts 介绍:
Fusioncharts是一个基于Flash的图表组件,可以用来提供数据驱动的动态图标,fusioncharts可用于任何网页脚本语言如, HTML格式,JSP技术等等。提供交互式和强大的动态图标,fusioncharts充分利用流体美丽的Flash为模板,使用XML作为其数据接口,创造紧凑,互动和真正的动态图表。
2. 数据接口XML:
Fusioncharts是以XML为数据接口而成图表。提供XML两种形式:直接以XML文件提供数据。基于数据库数据动态生成XML。
3. 使用前的准备工作(基于java的Web工程为例):
 3.1拷贝所有的flash文件(所有的图标文件在下载包中Charts 包中)到工程WebRoot\FusionCharts目录下,这些flash文件作为生成报表的模板图标。也可以需要画什么图,就拷贝那种类型的swf
 3.2拷贝FusionCharts.jsp(FusionChart\FusionCharts\Code\JSP\Includes)文件到WebRoot\jsp下(可以将其放在WebRoot下的某个文件夹中),这个文件包含将生成的flash图标嵌入到jsp或者HTML文件中。
 3.3拷贝FusionCharts.js(下载包JSClass包中),这个文件提供了createChartHTML函数是我们轻松的创建图表。


在第三节的基础上我们已经有了基于FusionCharts的开发环境。如下

 

4. 创建第一个Chart:
在第三节的基础上我们已经有了基于FusionCharts的开发环境。基于第三节的内容来分析FusionCharts的特性。
? 以静态的XML为数据接口创建柱状图或者曲线图。在WebRoot\data创建XML文件data.xml此文件的格式为

<chart caption='Business Results 2006' xAxisName='Month' yAxisName='Revenue' showValues='0' 
  numberPrefix='$' decimalPrecision='0' bgcolor='F3f3f3' bgAlpha='70' showColumnShadow='1'
  divlinecolor='c5c5c5' divLineAlpha='60' showAlternateHGridColor='1' alternateHGridColor='f8f8f8' alternateHGridAlpha='60' > 

   <set name='Jan' value='27400' color='AFD8F8'/>
   <set name='Feb' value='29800' color='F6BD0F' />
   <set name='Mar' value='25800' color='8BBA00'/>
   <set name='Apr' value='26800' color='FF8E46'/>
   <set name='May' value='29600' color='008E8E' />
   <set name='Jun' value='32600' color='D64646'/>
   <set name='Jul' value='31800' color='8E468E'/>
   <set name='Aug' value='36700' color='588526'/>
   <set name='Sep' value='29700' color='B3AA00'/>
   <set name='Oct' value='31900' color='008ED6'/>
   <set name='Nov' value='34800' color='9D080D'/>
   <set name='Dec' value='24800' color='A186BE' />
</chart>

Chart标签中属性:以上结构的xml可以创建单一的柱状和曲线图。每个XML以<chart>为跟标签开始</chart>结束。介绍chart标签中的属性:caption设置图片的标题。xAxisName设置横坐标的标题,yAxisName纵坐标标题(注意:纵坐标的标题只能为英文),showValues值为boolen型0为在柱子或者曲线上不显示数据,“1”为显示数据。
以上XML<set>子标签:label为横坐标的元素, value为每个很坐标元素对应的值。
当我们了解了XML文件的内容就可以生成图片了:创建一个JSP文件。将FusionCharts.jsp文件包含进来。编辑JSP文件

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">  <title>FusionCharts - Simple Column 3D Chart</title>  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
 </head>
 <%@ include file="FusionCharts.jsp"%>
 <body>
   <%
   String chartHTMLCode = createChartHTML("FusionCharts/Column3D.swf",
     "data/data.xml" ,"", "myFirst", 600, 300, false);
  %>  <%=chartHTMLCode%>
 </body>
</html>

FusionCharts.jsp文件提供了createChartHTML()函数来创建图片方法中的共有七个参数,一次介绍:

1:要引用flash文件的的路径不同的图片引用不同的flash文件,2:为xml文件的路径,3当动态的生成XMl文件时要传的参数,在此如果物理路径中有XMl文件的话第二个参数传文件路径,第三个参数为空,当物理路径中没有xml文件 而是程序生成的话,第二个参数为空,第三个参数为程序生成xml的字符串。4:生成图片的id,5,6为图片的 width hight。7:图片是否为调试模式。通过以上的代码就可以生成简单的chart图了。现在运行web服务器可以看到图片
 
5. FusionCharts提供多样式图:
在我们的实际应用当中会涉及到复合图标,以及柱状图和曲线图的混合。那这些主要是XML文件的结构的差异以及应用不同的flash文件

data.xml

<chart legendBorderAlpha="0" useRoundEdges="1" numberPrefix="$"
	decimals="0" showvalues="0" shownames="1" caption="Country Comparison"
	palette="2">
	
	<categories>
		<category label="Austria" />
		<category label="Brazil" />
		<category label="France" />
		<category label="Germany" />
		<category label="USA" />
	</categories>
	
	<dataset showValues="0" color="AFD8F8" seriesName="1996">
		<set value="25601.34" />
		<set value="20148.82" />
		<set value="17372.76" />
		<set value="35407.15" />
		<set value="38105.68" />
	</dataset>
	
	<dataset showValues="0" color="F6BD0F" seriesName="1997">
		<set value="57401.85" />
		<set value="41941.19" />
		<set value="45263.37" />
		<set value="117320.16" />
		<set value="114845.27" />
	</dataset>
	
	<dataset showValues="0" color="8BBA00" seriesName="1998">
		<set value="45000.65" />
		<set value="44835.76" />
		<set value="18722.18" />
		<set value="77557.31" />
		<set value="92633.68" />
	</dataset>
</chart>

index.jsp(createChartHTML第一个参数类型必须以MS开头的swf   multiply Series的缩写)

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">  <title>FusionCharts - Simple Column 3D Chart</title>  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
 </head>
 <%@ include file="FusionCharts.jsp"%>
 <body>
   <%
   String chartHTMLCode = createChartHTML("FusionCharts/MSColumn3D.swf",
     "data/data1.xml" ,"", "myFirst", 600, 300, false);
  %>  <%=chartHTMLCode%>
 </body>
</html>

第二个复合图的例子:data2.xml

<chart formatNumberScale="0" areaOverColumns="0" slantLabels="1"
 rotateNames="1" showValues="0" lineThickness="2" palette="1"
 caption="Hits per hour">
 
 <categories>
  <category label="00:00" />
  <category label="01:00" />
  <category label="02:00" />
  <category label="03:00" />
  <category label="04:00" />
  <category label="05:00" />
  <category label="06:00" />
  <category label="07:00" />
  <category label="08:00" />
  <category label="09:00" />
  <category label="10:00" />
  <category label="11:00" />
  <category label="12:00" />
  <category label="13:00" />
  <category label="14:00" />
  <category label="15:00" />
  <category label="16:00" />
  <category label="17:00" />
  <category label="18:00" />
  <category label="19:00" />
  <category label="20:00" />
  <category label="21:00" />
  <category label="22:00" />
  <category label="23:00" />
 </categories>
 
 <dataset plotBorderColor="0372ab" showPlotBorder="1" alpha="60"
  renderAs="Area" seriesName="Expected">
  <set value="498" />
  <set value="512" />
  <set value="592" />
  <set value="619" />
  <set value="664" />
  <set value="782" />
  <set value="665" />
  <set value="833" />
  <set value="1259" />
  <set value="1623" />
  <set value="1867" />
  <set value="2198" />
  <set value="1112" />
  <set value="1192" />
  <set value="1219" />
  <set value="2264" />
  <set value="2282" />
  <set value="2365" />
  <set value="2433" />
  <set value="2559" />
  <set value="2823" />
  <set value="2867" />
  <set value="2867" />
  <set value="2867" />
 </dataset>
 
 <dataset seriesName="Actuals  Monday">
  <set value="336" />
  <set value="371" />
  <set value="485" />
  <set value="592" />
  <set value="601" />
  <set value="716" />
  <set value="864" />
  <set value="880" />
  <set value="992" />
  <set value="1062" />
  <set value="1119" />
  <set value="1089" />
  <set value="1212" />
  <set value="904" />
  <set value="1215" />
  <set value="1358" />
  <set value="1482" />
  <set value="1666" />
  <set value="1811" />
  <set value="2051" />
  <set value="2138" />
  <set value="2209" />
  <set value="2247" />
  <set value="2301" />
 </dataset>
 
 <dataset seriesName="Actuals  Tuesday">
  <set value="854" />
  <set value="965" />
  <set value="1175" />
  <set value="1190" />
  <set value="1212" />
  <set value="1241" />
  <set value="1308" />
  <set value="1401" />
  <set value="1481" />
  <set value="1851" />
  <set value="1250" />
  <set value="2415" />
  <set value="2886" />
  <set value="3252" />
  <set value="3673" />
  <set value="4026" />
  <set value="4470" />
  <set value="4813" />
  <set value="4961" />
  <set value="5086" />
  <set value="5284" />
  <set value="5391" />
  <set value="5657" />
  <set value="5847" />
 </dataset>
 
 <dataset lineThickness="4" renderAs="Line" seriesName="Average"
  color="0372AB">
  <set value="511" />
  <set value="520" />
  <set value="628" />
  <set value="640" />
  <set value="746" />
  <set value="757" />
  <set value="890" />
  <set value="1050" />
  <set value="1099" />
  <set value="1191" />
  <set value="1252" />
  <set value="1448" />
  <set value="1771" />
  <set value="2316" />
  <set value="2763" />
  <set value="3149" />
  <set value="3637" />
  <set value="4015" />
  <set value="4262" />
  <set value="4541" />
  <set value="4837" />
  <set value="5016" />
  <set value="5133" />
  <set value="5278" />
 </dataset>
 
 <trendLines>
  <line color="359A35" valueOnRight="1" displayvalue="Good"
   startValue="4500" />
 </trendLines>
</chart>

jsp中代码改动成MSCombi2D.swf

<%
   String chartHTMLCode = createChartHTML("FusionCharts/MSCombi2D.swf",
     "data/data6.xml" ,"", "myFirst", 600, 300, false);
  %>

结果如下图所示

6. FusionCharts的高级特性: 热点FusionCharts也支持获取给每个数据元素的热点数据。在<set >标签提供属性link可以解决热点的问题,在上面XML文档结构中也看到了关于link的信息。

如果你想在一个新的窗口打开页面,只需要在连接的前面加上“n-”,

传递多个参数时,在FCF 里显示“&”,你需要用转义字符“&amp;”来替换它。

data.xml

<chart legendBorderAlpha="0" useRoundEdges="1" numberPrefix="$"
 decimals="0" showvalues="0" shownames="1" caption="Country Comparison"
 palette="2" >
 
 <categories>
  <category label="Austria" />
  <category label="Brazil" />
  <category label="France" />
  <category label="Germany" />
  <category label="USA" />
 </categories>
 
 <dataset showValues="0" color="AFD8F8" seriesName="1996">
  <set value="1000" />
  <set value="2000" />
  <set value="3000" />
  <set value="4000" />
  <set value="5000" />
 </dataset>
 
 <dataset showValues="0" color="F6BD0F" seriesName="1997"  renderAs='Line'>
  <set value="1000" link='n-jsp/link.jsp?value=1000&name=1997'/>
  <set value="2000" link='jsp/link.jsp?value=2000'/>
  <set value="3000" link='jsp/link.jsp?value=3000'/>
  <set value="4000" link='jsp/link.jsp?value=4000'/>
  <set value='408' link='jsp/link.jsp?value=408'/>
 </dataset>
 
 <dataset showValues="0" color="8BBA00" seriesName="1998">
  <set value="4500" />
  <set value="4483" />
  <set value="1872" />
  <set value="7755" />
  <set value="9263" />
 </dataset><trendlines>
<line startValue='4000' color='91C728' displayValue='Target' showOnTop='1'/>
</trendlines>
</chart>

link.jsp

     value:<%=request.getParameter("value") %>

热点中参数的传递

所以在上面当鼠标移至图片时就会变为手型,点击链接到index2.jsp中,在jsp中得到传过来的参数将显示图片某个元素的信息。要传多个参数时将参数追加为一个字符串用逗号分隔,在link.jsp中通过split 一一将参数取出。

也可以整个图片作为热点。

7. 动态XML生成的chart:在上面的例子中主要以静态的XML为主,那我们在应用当中一般是从数据库中得到一个集合。这需要我们通过程序将需要的数据装入XML中,此XMl将为一个字符串。在第四节中将第二个参数为空第三个参数为我们生成的strXML字符串chartHTMLCode=createChartHTML("/FusionCharts/Column3D.swf", "", "strXML", "myFirst", 600, 300, false) ;

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title> 图标数据来源于动态xml文本</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
	</head>
	<%@include file="FusionCharts.jsp"%>
	<body>
		<% 
String strXML="";  
strXML += "<chart caption='Monthly Unit Sales' xAxisName='Month' yAxisName='Units' decimalPrecision='0' formatNumberScale='0'>";
  strXML += "<set name='Jan' value='462' color='AFD8F8' />";
  strXML += "<set name='Feb' value='857' color='F6BD0F'/>";
  strXML += "<set name='Mar' value='671' color='8BBA00'/>";
  strXML += "<set name='Apr' value='494' color='FF8E46'/>";
  strXML += "<set name='May' value='761' color='008E8E'/>";
  strXML += "<set name='Jun' value='960' color='D64646'/>";
  strXML += "<set name='Jul' value='629' color='8E468E'/>";
  strXML += "<set name='Aug' value='622' color='588526'/>";
  strXML += "<set name='Sep' value='376' color='B3AA00'/>";
  strXML += "<set name='Oct' value='494' color='008ED6'/>";
  strXML += "<set name='Nov' value='761' color='9D080D'/>";
  strXML += "<set name='Dec' value='960' color='A186BE'/>";
  strXML += "</chart>";
  %>

		<%
			String chartHTMLCode = createChartHTML("FusionCharts/Column3D.swf",
					"", strXML, "myFirst", 600, 300, false);
		%>

		<%=chartHTMLCode%>

	</body>
</html>

FusionCharts的优缺点:
优点:基于XML数据格式。对代码稍稍加工一下,让数据以XML格式做为参数传递就可以得到FLASH图表呈现。有单一系列(Single series)呈现,也有多样系列(Multi-series)呈现。有3D或2D的栏状、饼形、块形或线形呈现。甚至可以线形与栏状综合呈现,而且使用不难。
缺点:试用版没有提供源码,使得有的功能不能实现,如导致现在中文乱码无法解决(在源码中提供了支持各种语言的功能),而且价格太贵

 

FusionChart 导出图片http://blog.csdn.net/ncepustrong/article/details/8054373   

 

 

posted on 2012-10-08 21:52  小-强-斋-太  阅读(197)  评论(0编辑  收藏  举报

导航