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 里显示“&”,你需要用转义字符“&”来替换它。
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