FusionCharts Free(3)

 

    来看一个使用dataURL方式指定图表数据源的例子:  

<div id="chartdiv" align="center"></div>
<script type="text/javascript">
    
var chart = new FusionCharts("../Charts/FCF_Column2D.swf""ChartId""600""350");
    chart.setDataURL(
"Data/Column2D.xml");
    chart.render(
"chartdiv");
</script>

 

     主要的代码是一段js脚本,首先声明并实例化一个对象FusionChaets,然后使用该对象的setDataURL方法为图表指定一个包含图表数据的xml文件作为数据源,最后使用该对象的render方法在id属性为chartdiv的div元素中生成图表。

    上述对象的构造函数以及两个方法都是在FusionCharts.js文件中进行实现的,所以在包含上述代码的页面中应该首先包含对FusionCharts.js文件的引用。

    当然,这里的Column2D.xml并不是一个随随便便的xml文件,它需要使用特定的标签、属性等,否则,相应的swf文件将不能正常解析并显示图表数据。

    来看一下Column2D.xml的内容:    

<graph caption='Monthly Unit Sales' xAxisName='Month' yAxisName='Units' decimalPrecision='0' formatNumberScale='0'>
    
<set name='Jan' value='462' color='AFD8F8' />
    
<set name='Feb' value='857' color='F6BD0F' />
    
<set name='Mar' value='671' color='8BBA00' />
    
<set name='Apr' value='494' color='FF8E46'/>
    
<set name='May' value='761' color='008E8E'/>
    
<set name='Jun' value='960' color='D64646'/>
    
<set name='Jul' value='629' color='8E468E'/>
    
<set name='Aug' value='622' color='588526'/>
    
<set name='Sep' value='376' color='B3AA00'/>
    
<set name='Oct' value='494' color='008ED6'/>
    
<set name='Nov' value='761' color='9D080D'/>
    
<set name='Dec' value='960' color='A186BE'/>
</graph>

 

     相对来说,这样的xml文件中的内容还是比较容易进行理解的,而且,FusionCharts的文档中提供了关于各种不同图表类型可以接受的xml文件标签、属性等的参考,参见文档中的“Chart XML Reference”部分。

    通过比较不同类型的图表的xml数据格式,可能会发现,除了漏斗图、K线图、甘特图等特殊图表之外,同一类别中常见图表(如单序列图表中的2D柱状图、3D柱状图、2D折线图、2D饼图、3D饼图、2D条形图、2D面积图、2D圆环图)的xml文件格式是类似的,这样在特定应用中,当需要更改图表类型时,我们只需要将js中的FusionCharts对象重新实例化即可,而不需要更改具体的xml数据源。如上述2D柱状图更改为2D条形图时,我们可以使用以下函数:  

<script type="text/javascript">
    
function changeChartTypeToBar()
    
{
        chart 
= new FusionCharts("../Charts/FCF_Bar2D.swf""ChartId""600""350");
        chart.setDataURL(
"Data/Column2D.xml");
        chart.render(
"chartdiv");
    }

</script>

 

     此时,整个页面不必整个刷新,只需要刷新图表区即可。而且,很显然,这是一个比较简单的操作,需要注意:

  • 不同类型的图表的xml数据源可能具有特定的xml标签或属性,所以在需要更改图表类型时,尽量使用在不同图表类型中通用的标签或属性
  • 还是要强调,不同类型图表具有不同的含义,虽然可以方便地在不同图表类型之间进行转换,但是如果图表类型选择错误,很可能带来的是画蛇添足之嫌。如上面的时序数据,如果使用饼图可能就不那么恰当了,虽然将该图表转换为饼图是非常简单的操作

    另外,使用dataURL方式对图表进行指定的数据源,并不要求是一个实际存在的物理xml文件,可以是任何一个返回XML文件或片断的HTTP请求,只有这样,我们才能根据特定的查询条件或过滤表达式方便地从数据库中检索图表所需数据先是在图表上。很显然,这种方式下只能通过POST传递HTTP请求需要的参数,此时,需要注意的是由于FusionCharts对于特殊字符的敏感性,在为FusionCharts对象使用setDataURL指定参数时,该参数字符串中最好不要包含除了英文字符、数字、?、&和-之外的字符,当然,最好使用Javascript中的escape函数对其进行编码。

 

 

 

Life is like a boat, and I'm at sea.

posted @ 2008-07-07 22:41 蜡人张 阅读(6740) 评论(17) 编辑 收藏

 回复 引用   
#1楼 2008-07-24 09:23 Allanli[未注册用户]
我发现setDataURL方法不支持中文,但用setDataXML就可以。怎么设置编码格式都不行!尤其奇怪的是官方文档里居然说setDataURL方法可以支持多国语言,而setDataXML不行!!!我就奇了怪了。。。

要能有它flash文件的源码就好了,或者有什么工具能反编译一下flash。我想看看到底怎么回事。

 回复 引用 查看   
#2楼[楼主] 2008-07-25 16:09 蜡人张      
@Allanli

SetDataURL确是可以支持中文的,编码使用GB2312<(System.Text.Encoding.GetEncoding("GB2312")>就可以。

 回复 引用 查看   
#3楼 2008-08-08 10:33 otto      
确实可以,我大意了,呵呵
 回复 引用   
#4楼 2008-09-19 11:37 周军伟[未注册用户]
请您帮我看看,为什么以下代码中的link不能调用function啊?着急啊!!


<script type='text/javascript' >
var chart_SalesByYear = new FusionCharts('MSColumn3DLineDY.swf', 'SalesByYear', '450', '230', '0', '1');

chart_SalesByYear.setDataXML("<chart caption='会员年销售额' XAxisName='Year' palette='2' animation='1' subcaption='(在下面的图表中点击一列显示月销售情况)' formatNumberScale='0' numberPrefix='¥' showValues='0' seriesNameInToolTip='0'><categories><category label='1994'/><category label='1995'/><category label='1996'/></categories><dataset seriesname='Revenue'><set value='219702.0' link='javaScript:updateCharts(1994)'/><set value='682796.0' link='javaScript:updateCharts(1995)'/><set value='547248.0' link='javaScript:updateCharts(1996)'/></dataset><styles><definition><style type='font' color='666666' name='CaptionFont' size='15' /><style type='font' name='SubCaptionFont' bold='0' /></definition><application><apply toObject='caption' styles='CaptionFont' /><apply toObject='SubCaption' styles='SubCaptionFont' /></application></styles></chart>");
chart_SalesByYear.render("SalesByYearDiv");


</script>

 回复 引用   
#5楼 2008-09-19 11:38 周军伟[未注册用户]
请您帮我看看,为什么以下代码中的link不能调用function啊?着急啊!!
我是将以上代码写在一个html文件中的。

<script type='text/javascript' >
var chart_SalesByYear = new FusionCharts('MSColumn3DLineDY.swf', 'SalesByYear', '450', '230', '0', '1');

chart_SalesByYear.setDataXML("<chart caption='会员年销售额' XAxisName='Year' palette='2' animation='1' subcaption='(在下面的图表中点击一列显示月销售情况)' formatNumberScale='0' numberPrefix='¥' showValues='0' seriesNameInToolTip='0'><categories><category label='1994'/><category label='1995'/><category label='1996'/></categories><dataset seriesname='Revenue'><set value='219702.0' link='javaScript:updateCharts(1994)'/><set value='682796.0' link='javaScript:updateCharts(1995)'/><set value='547248.0' link='javaScript:updateCharts(1996)'/></dataset><styles><definition><style type='font' color='666666' name='CaptionFont' size='15' /><style type='font' name='SubCaptionFont' bold='0' /></definition><application><apply toObject='caption' styles='CaptionFont' /><apply toObject='SubCaption' styles='SubCaptionFont' /></application></styles></chart>");
chart_SalesByYear.render("SalesByYearDiv");


</script>

 回复 引用 查看   
#6楼[楼主] 2008-09-20 23:20 蜡人张      
@周军伟
xml数据应该没有问题,怀疑updateCharts函数有错误。

 回复 引用   
#7楼 2008-09-24 09:09 路人甲乙丙[未注册用户]
非常感谢能够看到LZ的这篇文章,我正好也在研究这款图表软件,现在我得到的需求是能够实时更新,就是XML是实时变化的,我现在要怎么样才能实时刷新FLASH中的内容呢?
是否有类似监听器的功能呢?
用JS也可,如何实现?
非常感谢

请问一下楼主,我现在乱码问题算是解决了。但是很不稳定。
就是我打开一个页面,没问题,FLASH里面的文字是正常的中文,但是我页面再刷新一次,很可能就变成是乱码了, 再刷新一次,可能又回来了,这个问题困扰了我好久。
我现在是 把 XML,html文件,用记事本打开,然后选择另存为,保存成ANSI 格式的(不是UTF-8),然后我在HTML 页面里,添加了
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
让页面没有缓存,并且是简体中文..

但是问题一直没太好的解决....

 回复 引用   
#9楼 2008-10-08 11:38 shinhwa[未注册用户]
使用SWFDecompiler可以看swf的代码
 回复 引用   
#10楼 2008-11-20 17:09 左[未注册用户]
请问一下楼主,怎样才能让生成的FLASH图表在网页上循环播放啊,谢谢!
 回复 引用   
#11楼 2008-12-02 14:33 coco_andy[未注册用户]
chart.setDataURL("data.php?id=1&date=2008");

为什么这里的参数不能传递过去?只能得到第一个参数,也就是id=2,而date确不能得到,如果把date放前面,就只能得到date,id得不到,请高手帮忙看看

 回复 引用   
#12楼 2008-12-17 14:40 ms-wang[未注册用户]
想请问一下各位大侠,FusionCharts Free和FusionCharts V3在功能上有什么区别啊?除了服务以外?
 回复 引用   
#13楼 2009-01-12 15:27 iceworld[未注册用户]
当需要更改图表类型时,我们只需要将js中的FusionCharts对象重新实例化即可,而不需要更改具体的xml数据源。如上述2D柱状图更改为2D条形图时,我们可以使用以下函数:

<script type="text/javascript">
function changeChartTypeToBar()
{
chart = new FusionCharts("../Charts/FCF_Bar2D.swf", "ChartId", "600", "350");
chart.setDataURL("Data/Column2D.xml");
chart.render("chartdiv");
}
</script>

 回复 引用   
#14楼 2009-01-13 12:24 iceworld[未注册用户]
请问
如何设置图表中 x轴 y轴旁边表示刻度的数字的字体大小?
如何设置柱状图上面那个表示数量的数字的大小?

 回复 引用   
#15楼 2009-01-15 14:37 iceworld[未注册用户]
DATALABELS x轴
DATAVALUES 图上的数字
YAXISVALUES y轴

<styles>
<definiton>
<style name='12FontStyle' type='font' size='12'/>
<style name='10FontStyle' type='font' size='10'/>
</definiton>
<application>
<apply toObject='DATALABELS' styles='12FontStyle' />
<apply toObject='YAXISVALUES' styles='12FontStyle' />
<apply toObject='DATAVALUES' styles='10FontStyle' />
</application>

另外我发现这个fusioncharts 似乎是 单引号 双引号 敏感的,想办法中。

 回复 引用   
#16楼 2009-03-04 09:19 jmxyqp[未注册用户]
@蜡人张

能具体说说怎么处理中文问题吗?

 回复 引用   
#17楼 2009-03-04 09:21 jmxyqp[未注册用户]
@蜡人张

SetDataURL确是可以支持中文的,编码使用GB2312<(System.Text.Encoding.GetEncoding("GB2312")>就可以。


具体说说怎么这吗,看不明白这点.麻烦大侠了.