Flex复杂倒柱状图


  flex 共X轴图使用拼接效果图:如下




代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   width="100%" height="100%" creationComplete="initDatas()"
			   xmlns:draw="draw.*">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import flash.external.ExternalInterface;
			
			import mx.charts.events.ChartItemEvent;
			import mx.charts.series.items.ColumnSeriesItem;
			import mx.charts.series.items.LineSeriesItem;
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.core.FlexGlobals;
			import mx.rpc.events.ResultEvent;
			
			[Bindable]
			private var c1_ytitle:String="A";
			
			[Bindable]
			private var c2_ytitle:String="B";
			
			[Bindable]
			private var lc_xtitle:String="X";
			[Bindable]
			private var lc_ytitle:String="C1";
			[Bindable]
			private var lc_y2title:String="C2";
			
			[Bindable]
			private var viewId:String;
			
			[Bindable]
			private var resultArr:ArrayCollection = new ArrayCollection;
			
			private var column1Data:ArrayCollection = new ArrayCollection;
			
			private var column2Data:ArrayCollection = new ArrayCollection;
			
			private var lineChartData:ArrayCollection = new ArrayCollection;
			
			
			
			private function init():void{
				
				ExternalInterface.addCallback("optStrokeClick",optStrokeClick);
				//获取数据
				var pattern:RegExp = /#@/g;
				
				var c1Data:XML =  new XML(FlexGlobals.topLevelApplication.parameters["c1XmlData"].toString().replace(pattern, "\""));
				
				var c2Data:XML =  new XML(FlexGlobals.topLevelApplication.parameters["c2XmlData"].toString().replace(pattern, "\""));
				
				var lcData:XML =  new XML(FlexGlobals.topLevelApplication.parameters["lcXmlData"].toString().replace(pattern, "\""));
				if(c1Data.toString().length>0){
				   xmlcheck(c1Data);
				}
				if(c2Data.toString().length>0){
				   xmlcheck(c2Data);
				} 
				if(lcData.toString().length>0){
				   xmlcheck(lcData);
				}
				
			}
			
			//测试
			private function initDatas():void{
				ExternalInterface.addCallback("optStrokeClick",optStrokeClick);
				
				getDatasRequest.url = "config/c2ahsyb.xml";
				
				getDatasRequest.send();	
				
				getDatasRequestcy.url = "config/c2ahsybcy.xml";
				
				getDatasRequestcy.send();
				
				getDatasRequestxy.url = "config/c2ahsybxy.xml";
				
				getDatasRequestxy.send();
			}
			
			
			protected function getDatasRequestResult(event:ResultEvent):void
			{
				var lcData:XML  = XML(event.message.body.toString());
				
				xmlcheck(lcData);	
			}
			
			
			function optStrokeClick(stroke:String,visible:String){
				
				//	Alert.show(stroke);
				var series:Array = linechart.series;
				var ls:LineSeries;
				for(var i:int = 0; i < series.length; i++) { 
					ls = series[i]; 
					if(stroke == ls.id){
						if("yes"==visible){
							ls.visible = true;
						}else{
							ls.visible = false;
						}
						break;
						return;
					}
				} 
				
			}
			
			private function xmlcheck(xml:XML):void{
				viewId = xml.attribute("viewId");
				var type:String = xml.attribute("chartType");
				if("flood" == type){
//					label.text = xml.attribute("label");
					
					xml2Array(xml,lineChartData,type);
				}else if("allRain" == type){
					xml2Array(xml,column1Data,type);
				}else if("netRain" == type){
					xml2Array(xml,column2Data,type);
				}
			}
			
			function xml2Array(xml:XML,array:ArrayCollection,type:String):void{
				array.removeAll();
				if("flood" == type){
					for each(var element:XML in xml.descendants("item")) {
						var o:Object = new Object();
						o.oid = element.@oid;
						o.type = xml.attribute("chartType");
						o.xfield = element.@xfield;
						o.yfield = element.@yfield;
						o.y2field = element.@y2field;
						o.y3field = element.@y3field;
						
						array.addItem(o);
					}
				}else{
					for each(var element:XML in xml.descendants("item")) {
						var o:Object = new Object();
						o.oid = element.@oid;
						o.type = xml.attribute("chartType");
						o.xfield = element.@xfield;
						o.yfield = element.@yfield;
						array.addItem(o);
					}
				}
			}
			
			
			
			protected function itemClickHandler(event:ChartItemEvent):void
			{
				var psi:LineSeriesItem= event.hitData.chartItem as LineSeriesItem;
				var lss:LineSeries = psi.element as LineSeries;
//				Alert.show(viewId+"---"+psi.item.xfield+"--"+psi.item.yfield+"-"+psi.item.y2field+"-"+psi.item.y3field);
				var xf:String = psi.item.xfield;
				ExternalInterface.call("pointClick",viewId,psi.item.yfield,psi.item.y2field,psi.item.y3field,xf.split("-"));	
//				optStrokeClick("hr5","yes");
//				damtophigh = 800;
				
			}
			
			private function dataTipFunc(item:Object):String { 
				var curObj:Object = item.item;
				var curSeries:Object = Object(item.chartItem.element); 
				var str:String = "";
				if(curSeries.displayName == "降雨"){
					var cSI1:ColumnSeriesItem = item.chartItem as ColumnSeriesItem;
					str =  "<font>"+lc_xtitle+":"+cSI1.xValue.toString()+ "<br>";
					str += curSeries.displayName+":"+(-Number(cSI1.yValue)).toString();
					str+="</font>";
				}else if(curSeries.displayName == "净雨"){
					var cSI1:ColumnSeriesItem = item.chartItem as ColumnSeriesItem;
					str =  "<font>"+lc_xtitle+":"+cSI1.xValue.toString()+ "<br>";
					str += curSeries.displayName+":"+cSI1.yValue.toString();
					str+="</font>";
				}else{
					var cSI:LineSeriesItem = item.chartItem as LineSeriesItem;
					str =  "<font>"+lc_xtitle+":"+cSI.xValue.toString()+ "<br>";
					str += curSeries.displayName+":"+cSI.yValue.toString();
					str+="</font>";
				}
				return str;
			}
			
			private function categoryAxisLabelFun(categoryValue:Object, previousCategoryValue:Object, axis:CategoryAxis, categoryItem:Object):String { 
 
				 var kk:Array = categoryValue.toString().split(" ");
		
//				  return  '<I>' + categoryValue  + '</I>';
				 
				 return  '<I>' + kk[1] + '</I>';
			} 
			
			private function parseToDate(s:String):Date{
				//s = "2007-10-15 20:15"
				var temp:Array = s.split(" ");
				var datepart:String = temp[0];
				var datearray:Array = datepart.split("-");
				var timepart:String = temp[1];
				var timearray:Array = timepart.split(":");
				var newDate:Date = new Date(datearray[0],datearray[1],datearray[2],timearray[0],timearray[1]);
				return newDate;
			}

		]]>
	</fx:Script>
	<fx:Declarations>
		<mx:HTTPService id="getDatasRequest" method="POST" result="getDatasRequestResult(event)"/>
		<mx:HTTPService id="getDatasRequestcy" method="POST" result="getDatasRequestResult(event)"/>
		<mx:HTTPService id="getDatasRequestxy" method="POST" result="getDatasRequestResult(event)"/>
		<mx:SolidColor id="sc1" color="0xCCFFF0" alpha=".8"/>
		<mx:SolidColor id="sc2" color="0xCC00CC" alpha=".6"/>
		<mx:SolidColor id="sc3" color="0xFFCC66" alpha=".6"/>
		
		<mx:Stroke id="s1" color="0xCCCC00" weight="1" />
		<mx:Stroke id="s2" color="0xCAAACC" weight="1"/>
		<mx:Stroke id="s3" color="0xFFCC66" weight="1"/>
		
		<mx:SolidColorStroke id="scs1" color="0x1CF000" weight="1" />
	</fx:Declarations>
	<mx:VBox width="100%" height="100%" verticalGap="0" verticalAlign="middle" horizontalAlign="center">
		<mx:HBox width="100%" height="30" backgroundColor="#ffffff" horizontalAlign="center" verticalAlign="middle">
			<mx:Label id="label" text="调度过程线" color="#f05caa" fontSize="20"/>
		</mx:HBox>
		<mx:HBox width="100%" height="20%" backgroundColor="#ffffff">
			<mx:ColumnChart id="column1" 
							height="100%" 
							width="92%" 
							fontSize="12"
							showDataTips="true" 
							seriesFilters="[]"
							dataTipFunction="dataTipFunc"
							dataProvider="{column1Data}" 
							>               
				<mx:backgroundElements>
					<mx:GridLines id="cgridLines1"
								  gridDirection="horizontal"
								  verticalTickAligned="false">
						<mx:verticalStroke>
							<mx:Stroke color="haloSilver"
									   weight="0"
									   alpha="1.0" />
						</mx:verticalStroke>
						<mx:horizontalStroke>
							<mx:Stroke color="white"
									   weight="0"
									   alpha="0.0" />
						</mx:horizontalStroke>
						<mx:horizontalFill>
							<mx:SolidColor color="haloSilver"
										   alpha="0.1" />
						</mx:horizontalFill>
					</mx:GridLines>
				</mx:backgroundElements>
				<mx:horizontalAxis>
					<mx:CategoryAxis id="chaxis1" categoryField="xfield" />
				</mx:horizontalAxis>
				<mx:horizontalAxisRenderers>
					<mx:AxisRenderer id="chorAxisRend1" 
									 axis="{chaxis1}" 
									 axisStroke="{s2}"
									 tickStroke="{s2}"
									 placement="top"
									 showLabels="false"
									 />
				</mx:horizontalAxisRenderers>
				<mx:verticalAxisRenderers>
					<mx:AxisRenderer id="cvertAxisRend1"
									 axis="{cvaxis1}"
									 axisStroke="{scs1}"
									 tickStroke="{scs1}"
									 placement="left" />
				</mx:verticalAxisRenderers>  
				<mx:series>
					<mx:ColumnSeries
						xField="xfield" 
						yField="yfield" 
						displayName="{c1_ytitle}"
						fill="{sc1}"
						stroke="{s1}"
						fontSize="12"
						>
						<mx:verticalAxis>
							<mx:LinearAxis id="cvaxis1" title="{c1_ytitle}" direction="inverted"/>
						</mx:verticalAxis>
					</mx:ColumnSeries>
				</mx:series>
			</mx:ColumnChart>

		</mx:HBox>
		<mx:HBox width="100%" height="20%" backgroundColor="#ffffff">
			<mx:ColumnChart id="column2" 
							height="100%" 
							width="92%" 
							fontSize="12"
							showDataTips="true" 
							seriesFilters="[]"
							dataTipFunction="dataTipFunc"
							dataProvider="{column2Data}"
							>               
				<mx:backgroundElements>
					<mx:GridLines id="cgridLines2"
								  gridDirection="horizontal"
								  verticalTickAligned="false">
						<mx:verticalStroke>
							<mx:Stroke color="haloSilver"
									   weight="0"
									   alpha="1.0" />
						</mx:verticalStroke>
						<mx:horizontalStroke>
							<mx:Stroke color="blue"
									   weight="1"
									   alpha="0.0" />
						</mx:horizontalStroke>
						<mx:horizontalFill>
							<mx:SolidColor color="haloSilver"
										   alpha="0.1" />
						</mx:horizontalFill>
					</mx:GridLines>
				</mx:backgroundElements>
				<mx:horizontalAxis>
					<mx:CategoryAxis id="chaxis2" categoryField="xfield" />
				</mx:horizontalAxis>
				<mx:horizontalAxisRenderers>
					<mx:AxisRenderer id="chorAxisRend2" 
									 axis="{chaxis2}" 
									 axisStroke="{s2}"
									 tickStroke="{s2}"
									 placement="bottom"
									 showLabels="false"
									 />
				</mx:horizontalAxisRenderers>
				<mx:verticalAxisRenderers>
					<mx:AxisRenderer id="cvertAxisRend2"
									 axis="{cvaxis2}" 
									 axisStroke="{scs1}"
									 tickStroke="{scs1}"
									 placement="left" />
				</mx:verticalAxisRenderers>  
				<mx:series>
					<mx:ColumnSeries
						xField="xfield" 
						yField="yfield" 
						displayName="{c2_ytitle}"
						fill="{sc1}"
						stroke="{s1}"
						fontSize="12"
						>
						<mx:verticalAxis>
							<mx:LinearAxis id="cvaxis2" title="{c2_ytitle}" direction="normal"/>
						</mx:verticalAxis>
					</mx:ColumnSeries>
				</mx:series>
			</mx:ColumnChart>
			
		</mx:HBox>
		<mx:VBox width="100%" height="60%" backgroundColor="#ffffff">
			<mx:CartesianChart id="linechart" 
							   width="{column1.width+60}"
							   height="100%"
							   fontSize="12"
							   showDataTips="true"
							   seriesFilters="[]"
							   dataTipFunction="dataTipFunc"
							   dataProvider="{lineChartData}" 
							   itemClick="itemClickHandler(event)"

                               >
				<mx:backgroundElements>
					<mx:GridLines id="gridLines"
								  gridDirection="horizontal"
								  verticalTickAligned="false">
						<mx:verticalStroke>
							<mx:Stroke color="haloSilver"
									   weight="1"
									   alpha="1.0" />
						</mx:verticalStroke>
						<mx:horizontalStroke>
							<mx:Stroke color="white"
									   weight="1"
									   alpha="0.0" />
						</mx:horizontalStroke>
						<mx:horizontalFill>
							<mx:SolidColor color="haloSilver"
										   alpha="0.1" />
						</mx:horizontalFill>
					</mx:GridLines>
				</mx:backgroundElements>
				<mx:horizontalAxis>
					<mx:CategoryAxis id="haxis"
									 dataProvider="{lineChartData}" 
									 categoryField="xfield"
									 labelFunction="categoryAxisLabelFun"
									 />
				</mx:horizontalAxis>
				<mx:horizontalAxisRenderers>
					<mx:AxisRenderer id="horAxisRend3" 
									 axis="{haxis}" 
									 axisStroke="{scs1}"
									 showLine="true" 
									 minWidth="1"
									 minorTickPlacement="cross"
									 tickLength="2"
									 tickStroke="{scs1}"
									 canDropLabels="true"
									 labelAlign="center"
									 placement="bottom"
									
									 />
				</mx:horizontalAxisRenderers>
				<mx:verticalAxisRenderers>
					<mx:AxisRenderer id="vertAxisRend"
									 axis="{vaxis1}" 
									 axisStroke="{scs1}"
									 tickStroke="{scs1}"
									 verticalAxisTitleAlignment="vertical"
									 placement="left" />
					<mx:AxisRenderer id="vertAxisRend2"
									 axis="{vaxis2}" 
									 axisStroke="{scs1}"
									 tickStroke="{scs1}"
									 placement="right"/>
				</mx:verticalAxisRenderers>  
				<mx:series>
					<mx:LineSeries id="yfield" yField="yfield" xField="xfield" radius="3"  form="curve" displayName="S1" lineStroke="{s1}">
						<mx:verticalAxis>
							<mx:LinearAxis id="vaxis1" title="{lc_ytitle}"/>
						</mx:verticalAxis>
					</mx:LineSeries>
					<mx:LineSeries id="y2field" yField="y2field" xField="xfield" radius="3"  form="curve" displayName="S2" lineStroke="{s2}">
						<mx:verticalAxis>
							<mx:LinearAxis id="vaxis2" title="{lc_y2title}"/>
						</mx:verticalAxis>
					</mx:LineSeries>
					<mx:LineSeries id="y3field" yField="y3field" xField="xfield"  form="curve" displayName="S3" lineStroke="{s3}">
						<mx:verticalAxis>
							<mx:LinearAxis id="vaxis3" title="{lc_y2title}"/>
						</mx:verticalAxis>
					</mx:LineSeries>
				</mx:series>
			</mx:CartesianChart>
			<mx:VBox id="legendbox3" width="100%" height="25" horizontalAlign="center">
				<mx:Legend dataProvider="{linechart}" id="legend" direction="horizontal" />
			</mx:VBox>
		</mx:VBox>
	</mx:VBox>
</s:Application>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值