使用WebChart3D绘制雷达图
雷达图, 展现特定数据的一种图形方式.
1 如何在ColdFusion中绘制雷达图
要想在ColdFusion中绘制雷达图, 我大致设想了下, 可以通过3种方式:
A 手工绘制图形;
(不过这种方式需要Coldfusion8支持)
B 通过调用Excel的COM组件绘制;
(不过这种方式需要服务器安装高版本的Excel)
C 通过调用WebChart Java类绘制;
(这个是最合适的,ColdFusion7提供WebChart)
2 使用WebChart绘制雷达图
cfChart标签就是通过调用第3方程序WebChart进行绘制图形的, 不过cfChart只是调用了WebChart库其中的一部分:
bar, line, pyramid, area, horizontalbar,
cone, curve, cylinder, step, scatter, pie
而WebChart库还包含其它的图形模型:
• radar, bubble, dial, combo, table
这些图形我们必须通过调用java类: com.gp.api.jsp.MxServerComponent来完成.
下面给出代码来展示如何在ColdFusion中调用WebChart绘制雷达图:
<cfchart chartwidth="1" chartheight="1"/>
<cfset baseURL = "http://"& CGI.HTTP_HOST &"/">
<!--- 获取雷达图的模板文件 --->
<cfset wcp = XMLParse( ExpandPath("./radar-b.wcp") )>
<cfset chartStyle = ToString(wcp.project.style.radarChart)>
<!--- 初始化图形参数 --->
<cfsavecontent variable="chartModel">
<?xml version="1.0" encoding="UTF-8"?>
<XML type="default">
<COL>100</COL><COL>200</COL><COL>300</COL><COL>350</COL><COL>400</COL>
<ROW col0="100.0" col1="200.0" col2="100.0" col3="180.0" col4="200.0">美国:</ROW>
<ROW col0="150.0" col1="300.0" col2="250.0" col3="230.0" col4="250.0">中国:</ROW>
<ROW col0="200.0" col1="400.0" col2="400.0" col3="280.0" col4="300.0">Sample 2:</ROW>
<ROW col0="250.0" col1="500.0" col2="550.0" col3="330.0" col4="350.0">Sample 3:</ROW>
</XML>
</cfsavecontent>
<cfscript>
oMyWebChart = createObject("Java","com.gp.api.jsp.MxServerComponent");
oMyApp = getPageContext().getServletContext();
oSvr = oMyWebChart.getDefaultInstance(oMyApp);
oMyChart2 = oSvr.newImageSpec();
oMyChart2.width = 400;
oMyChart2.height= 300;
oMyChart2.type = "png";
oMyChart2.style = "#chartStyle#";
oMyChart2.model = "#chartModel#";
</cfscript>
<!--- 创建html标签 --->
<cfsavecontent variable="chartImgTag">
<cfoutput>
#oSvr.getImageTag(oMyChart2, baseURL& "CFIDE/GraphData.cfm?graphCache=wc50&graphID=")#
</cfoutput>
</cfsavecontent>
<cfset chartImgTag = replace(chartImgTag, baseURL&"Images/", baseURL, "All")>
<h2>Radar Chart</h2>
<cfoutput>#chartimgtag#</cfoutput>
通过上面的代码我们可以总结出:
A 要展现的数据必须通过XML格式文本作为参数输入;
B 我们可以设置chart的宽度,高度,输出图形格式,类型;
3 扩展思维
3.1 将实现细节隐藏
我采用的是通过自定义标签来将细节进行隐藏,将细节代码保存在文件radar.cfm中.然后我们可以在要绘制雷达图的页面中利用<cf_radarchart>这个自定义标签来调用:
<cf_radarchart width="400" height="300" type="png">
<XML>
<COL>100</COL><COL>200</COL><COL>300</COL><COL>350</COL><COL>400</COL>
<ROW col0="100.0" col1="200.0" col2="100.0" col3="180.0" col4="200.0">美国:</ROW>
<ROW col0="150.0" col1="300.0" col2="250.0" col3="230.0" col4="250.0">中国:</ROW>
<ROW col0="200.0" col1="400.0" col2="400.0" col3="280.0" col4="300.0">Sample 2:</ROW>
<ROW col0="250.0" col1="500.0" col2="550.0" col3="330.0" col4="350.0">Sample 3:</ROW>
</XML>
</cf_radarchart>
可以看到, 我们在应用的时候只要设置好所需的属性, 并将数据内容XML包含在自定义标签之间就可以了.
而在radarchart.cfm中, 我们这样设计代码的:
<cfif thisTag.ExecutionMode is 'start'>
<cfelse>
<cfchart chartwidth="1" chartheight="1"/>
<cfset baseURL = "http://"& CGI.HTTP_HOST &"/">
<cfset wcp = XMLParse( ExpandPath("./radar-b.wcp") )>
<cfset chartStyle = ToString(wcp.project.style.radarChart)>
<cfscript>
oMyWebChart = createObject("Java","com.gp.api.jsp.MxServerComponent");
oMyApp = getPageContext().getServletContext();
oSvr = oMyWebChart.getDefaultInstance(oMyApp);
oMyChart2 = oSvr.newImageSpec();
oMyChart2.width = Attributes.width;
oMyChart2.height= Attributes.height;
oMyChart2.type = Attributes.type;
oMyChart2.style = "#chartStyle#";
oMyChart2.model = thisTag.GeneratedContent;
</cfscript>
<cfsavecontent variable="chartImgTag">
<cfoutput>
#oSvr.getImageTag(oMyChart2, baseURL& "CFIDE/GraphData.cfm?graphCache=wc50&graphID=")#
</cfoutput>
</cfsavecontent>
<cfset chartImgTag = replace(chartImgTag, baseURL &"Images/", baseURL, "All")>
<cfoutput>#chartimgtag#</cfoutput>
</cfif>
3.2 WebChart绘制图形的输出格式
目前WebChart支持的输出格式包括: PNG,SWF,SVG,PDF,EPS,JPG,GIF和TIF.
3.3 开发过程中遇到的问题
3.3.1 如何解决中文乱码
当要显示的东西包括中文内容时出现乱码, 我们可以通过修改图形的模板文件*.wcp来解决. 将文件中的英文字体更换为中文字体即可. 例如: 宋体,黑体,幼圆等.
3.3.2 出现""的错误
请将自定义标签中的"<?xml version="1.0" encoding="UTF-8"?>"删除.
要想在ColdFusion中绘制雷达图, 我大致设想了下, 可以通过3种方式:
A 手工绘制图形;
(不过这种方式需要Coldfusion8支持)
B 通过调用Excel的COM组件绘制;
(不过这种方式需要服务器安装高版本的Excel)
C 通过调用WebChart Java类绘制;
(这个是最合适的,ColdFusion7提供WebChart)
2 使用WebChart绘制雷达图
cfChart标签就是通过调用第3方程序WebChart进行绘制图形的, 不过cfChart只是调用了WebChart库其中的一部分:
bar, line, pyramid, area, horizontalbar,
cone, curve, cylinder, step, scatter, pie
而WebChart库还包含其它的图形模型:
• radar, bubble, dial, combo, table
这些图形我们必须通过调用java类: com.gp.api.jsp.MxServerComponent来完成.
下面给出代码来展示如何在ColdFusion中调用WebChart绘制雷达图:
<cfchart chartwidth="1" chartheight="1"/>
<cfset baseURL = "http://"& CGI.HTTP_HOST &"/">
<!--- 获取雷达图的模板文件 --->
<cfset wcp = XMLParse( ExpandPath("./radar-b.wcp") )>
<cfset chartStyle = ToString(wcp.project.style.radarChart)>
<!--- 初始化图形参数 --->
<cfsavecontent variable="chartModel">
<?xml version="1.0" encoding="UTF-8"?>
<XML type="default">
<COL>100</COL><COL>200</COL><COL>300</COL><COL>350</COL><COL>400</COL>
<ROW col0="100.0" col1="200.0" col2="100.0" col3="180.0" col4="200.0">美国:</ROW>
<ROW col0="150.0" col1="300.0" col2="250.0" col3="230.0" col4="250.0">中国:</ROW>
<ROW col0="200.0" col1="400.0" col2="400.0" col3="280.0" col4="300.0">Sample 2:</ROW>
<ROW col0="250.0" col1="500.0" col2="550.0" col3="330.0" col4="350.0">Sample 3:</ROW>
</XML>
</cfsavecontent>
<cfscript>
oMyWebChart = createObject("Java","com.gp.api.jsp.MxServerComponent");
oMyApp = getPageContext().getServletContext();
oSvr = oMyWebChart.getDefaultInstance(oMyApp);
oMyChart2 = oSvr.newImageSpec();
oMyChart2.width = 400;
oMyChart2.height= 300;
oMyChart2.type = "png";
oMyChart2.style = "#chartStyle#";
oMyChart2.model = "#chartModel#";
</cfscript>
<!--- 创建html标签 --->
<cfsavecontent variable="chartImgTag">
<cfoutput>
#oSvr.getImageTag(oMyChart2, baseURL& "CFIDE/GraphData.cfm?graphCache=wc50&graphID=")#
</cfoutput>
</cfsavecontent>
<cfset chartImgTag = replace(chartImgTag, baseURL&"Images/", baseURL, "All")>
<h2>Radar Chart</h2>
<cfoutput>#chartimgtag#</cfoutput>
通过上面的代码我们可以总结出:
A 要展现的数据必须通过XML格式文本作为参数输入;
B 我们可以设置chart的宽度,高度,输出图形格式,类型;
3 扩展思维
3.1 将实现细节隐藏
我采用的是通过自定义标签来将细节进行隐藏,将细节代码保存在文件radar.cfm中.然后我们可以在要绘制雷达图的页面中利用<cf_radarchart>这个自定义标签来调用:
<cf_radarchart width="400" height="300" type="png">
<XML>
<COL>100</COL><COL>200</COL><COL>300</COL><COL>350</COL><COL>400</COL>
<ROW col0="100.0" col1="200.0" col2="100.0" col3="180.0" col4="200.0">美国:</ROW>
<ROW col0="150.0" col1="300.0" col2="250.0" col3="230.0" col4="250.0">中国:</ROW>
<ROW col0="200.0" col1="400.0" col2="400.0" col3="280.0" col4="300.0">Sample 2:</ROW>
<ROW col0="250.0" col1="500.0" col2="550.0" col3="330.0" col4="350.0">Sample 3:</ROW>
</XML>
</cf_radarchart>
可以看到, 我们在应用的时候只要设置好所需的属性, 并将数据内容XML包含在自定义标签之间就可以了.
而在radarchart.cfm中, 我们这样设计代码的:
<cfif thisTag.ExecutionMode is 'start'>
<cfelse>
<cfchart chartwidth="1" chartheight="1"/>
<cfset baseURL = "http://"& CGI.HTTP_HOST &"/">
<cfset wcp = XMLParse( ExpandPath("./radar-b.wcp") )>
<cfset chartStyle = ToString(wcp.project.style.radarChart)>
<cfscript>
oMyWebChart = createObject("Java","com.gp.api.jsp.MxServerComponent");
oMyApp = getPageContext().getServletContext();
oSvr = oMyWebChart.getDefaultInstance(oMyApp);
oMyChart2 = oSvr.newImageSpec();
oMyChart2.width = Attributes.width;
oMyChart2.height= Attributes.height;
oMyChart2.type = Attributes.type;
oMyChart2.style = "#chartStyle#";
oMyChart2.model = thisTag.GeneratedContent;
</cfscript>
<cfsavecontent variable="chartImgTag">
<cfoutput>
#oSvr.getImageTag(oMyChart2, baseURL& "CFIDE/GraphData.cfm?graphCache=wc50&graphID=")#
</cfoutput>
</cfsavecontent>
<cfset chartImgTag = replace(chartImgTag, baseURL &"Images/", baseURL, "All")>
<cfoutput>#chartimgtag#</cfoutput>
</cfif>
3.2 WebChart绘制图形的输出格式
目前WebChart支持的输出格式包括: PNG,SWF,SVG,PDF,EPS,JPG,GIF和TIF.
3.3 开发过程中遇到的问题
3.3.1 如何解决中文乱码
当要显示的东西包括中文内容时出现乱码, 我们可以通过修改图形的模板文件*.wcp来解决. 将文件中的英文字体更换为中文字体即可. 例如: 宋体,黑体,幼圆等.
3.3.2 出现""的错误
请将自定义标签中的"<?xml version="1.0" encoding="UTF-8"?>"删除.
评论
发表评论