乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      flex的一些圖例

       gispdr 2011-09-06

      Flex按時(shí)間段畫動(dòng)態(tài)曲線圖,代碼如下:

       

      <?xml version="1.0"?>
      <!-- Simple example to demonstrate the DateTimeAxis class. -->
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">

      <mx:Script>
      <![CDATA[
      import mx.charts.chartClasses.AxisLabelSet;
      import mx.formatters.DateFormatter;
      import mx.charts.chartClasses.IAxis;
      import mx.collections.ArrayCollection;

      [Bindable]
      public var testDatas:ArrayCollection;

      [Bindable]
      private var maxDate:Date;
      [Bindable]
      private var minDate:Date;

      private var timer:Timer;
      private var dateFormat:DateFormatter = new DateFormatter();
      private var dateVar:Date;

      private function init():void {

      dateFormat.formatString = "HH:NN:SS";
      minDate = new Date();
      var dx:Date = new Date();
      dx.setMinutes(dx.getMinutes()+1, dx.getSeconds(), dx.getMilliseconds());
      maxDate = dx;

      dateVar = new Date();
      testDatas = new ArrayCollection([{date: dateVar, valueTest: 101.71} ]);

      timer = new Timer(1000);
      timer.addEventListener(TimerEvent.TIMER, getDatas)
      timer.start();

      }

      private function mylabel(labelValue:Object, previousValue:Object, d:IAxis):String {
      var str:String = dateFormat.format(labelValue);
      return str;
      }

      private function getDatas(et:Event):void {
      var valueTestValue:int = Math.random()*50;
      var dm:Date = new Date();
      dm.setTime(dateVar.getTime());
      dm.setSeconds(dm.getSeconds()+1, dm.getMilliseconds());
      dateVar = dm;

      if (dateVar.getTime()>maxDate.getTime()) {
      maxDate = dateVar;
      var dx:Date = new Date();
      dx.setMinutes(dx.getMinutes()-1, dx.getSeconds(), dx.getMilliseconds());
      minDate = dx;
      }
      testDatas.addItem({date: dateVar, valueTest: valueTestValue});

      }

      ]]>
      </mx:Script>

      <mx:Panel title="DateTimeAxis Example" height="100%" width="100%">
      <mx:LineChart id="mychart" height="100%" width="100%"
      paddingRight="5" paddingLeft="5"
      showDataTips="true" >

      <mx:horizontalAxis>
      <mx:DateTimeAxis dataUnits="seconds" interval="5" minimum="{minDate}" maximum="{maxDate}" labelFunction="mylabel" />
      </mx:horizontalAxis>

      <mx:verticalAxis>
      <mx:LinearAxis baseAtZero="true" />
      </mx:verticalAxis>

      <mx:series>
      <mx:LineSeries yField="valueTest" xField="date" displayName="TestData" dataProvider="{this.testDatas}"/>
      </mx:series>
      </mx:LineChart>
      </mx:Panel>
      </mx:Application>

       


      flex使用后臺(tái)返回xml生成餅狀圖

      <?xml version="1.0"?>
      <!-- Simple example to demonstrate the DateTimeAxis class. -->
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">

      <mx:Script>
      <![CDATA[
      import mx.controls.Alert;
      import mx.charts.chartClasses.AxisLabelSet;
      import mx.formatters.DateFormatter;
      import mx.charts.chartClasses.IAxis;
      import mx.collections.ArrayCollection;

      [Bindable]
      public var testDatas:ArrayCollection;

      [Bindable]
      private var maxDate:Date;
      [Bindable]
      private var minDate:Date;

      private var timer:Timer;
      private var dateFormat:DateFormatter = new DateFormatter();
      private var dateVar:Date;

      private function init():void {

      dateFormat.formatString = "HH:NN:SS";
      minDate = new Date();
      var dx:Date = new Date();
      dx.setMinutes(dx.getMinutes()+1, dx.getSeconds(), dx.getMilliseconds());
      maxDate = dx;

      dateVar = new Date();
      testDatas = new ArrayCollection([{date: dateVar, valueTest: 101.71} ]);

      timer = new Timer(1000);
      timer.addEventListener(TimerEvent.TIMER, getDatas);
      timer.start();

      }

      private function mylabel(labelValue:Object, previousValue:Object, d:IAxis):String {
      var str:String = dateFormat.format(labelValue);
      return str;
      }

      private function getDatas(et:Event):void {
      var valueTestValue:int = Math.random()*50;
      var dm:Date = new Date();

      dm.setTime(dateVar.getTime());
      dm.setSeconds(dm.getSeconds()+1, dm.getMilliseconds());
      dateVar = dm;

      if (dateVar.getTime()>maxDate.getTime()) {
      maxDate = dateVar;
      var dx:Date = new Date();
      dx.setMinutes(dx.getMinutes()-1, dx.getSeconds(), dx.getMilliseconds());
      minDate = dx;
      }
      testDatas.addItem({date: dateVar, valueTest: valueTestValue});
      //Alert.show("list長度為: "+testDatas.length);
      }

      ]]>
      </mx:Script>

      <mx:Panel title="DateTimeAxis Example" height="100%" width="100%">
      <mx:LineChart id="mychart" height="100%" width="100%"
      paddingRight="2" paddingLeft="3"
      showDataTips="true" >

      <mx:horizontalAxis>
      <mx:DateTimeAxis dataUnits="seconds" interval="3" minimum="{minDate}" maximum="{maxDate}" labelFunction="mylabel" />
      </mx:horizontalAxis>

      <mx:verticalAxis>
      <mx:LinearAxis baseAtZero="true" />
      </mx:verticalAxis>

      <mx:series>
      <mx:LineSeries yField="valueTest" xField="date" displayName="TestData" dataProvider="{this.testDatas}"/>
      </mx:series>
      </mx:LineChart>
      </mx:Panel>
      </mx:Application>

       

      <?xml version="1.0" encoding="utf-8"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:esri="http://www./2008/ags" creationComplete="init();">
      <!-- 從后臺(tái)獲取數(shù)據(jù) -->
      <mx:HTTPService url="http://localhost:8083/ashx/getdata.ashx" id="serviceid"
      result="serviceResult(event);" fault="serviceFault(event)" showBusyCursor="true"
      method="POST" resultFormat="e4x">//注意resultFormat
      </mx:HTTPService>
      <mx:Script>
      <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.effects.easing.*;
      import mx.rpc.events.FaultEvent;
      import mx.rpc.events.ResultEvent;
      import mx.controls.Alert;

      [Bindable]
      private var xmlResults:XML;
      [Bindable]
      private var arr:ArrayCollection;

      private function init():void{
      var params:Object={};
      params["handle"]="pie";
      serviceid.send(params);
      }


      //trace the result of the service out
      private function serviceResult(event:ResultEvent):void {//注意事件類型
      xmlResults = event.result as XML;
      arr = new ArrayCollection();
      // pieChartId.dataProvider=arr;
      // Alert.show(xmlResults.toXMLString()+xmlResults.length());
      // Alert.show(xmlResults.toXMLString()+xmlResults.children().length());
      for each(var arrxml:XML in xmlResults.children()){
      arr.addItem(arrxml);
      }
      // Alert.show(arr[0].TATOL);

      }

      // in the event that the service faults or times out
      private function serviceFault(event:Event):void {
      trace('broken service');
      }

      /* private function callService():void {

      serviceid.send();
      } */
      ]]>
      </mx:Script>
      <!-- -->
      <mx:Canvas>
      <mx:PieChart id="pieChartId" dataProvider="{arr}" showDataTips="true">
      <mx:series>
      <mx:PieSeries field="TATOL" nameField="AREANAME" labelPosition="callout" displayName="AREANAME">
      </mx:PieSeries>
      </mx:series>
      </mx:PieChart>
      <mx:Legend dataProvider="{pieChartId}"/>
      </mx:Canvas>

      </mx:Application>


      程序代碼 程序代碼

      <?xml version="1.0" encoding="UTF-8"?>
      <data>
      <result month="1 月">
      <apple>81768</apple>
      <orange>60310</orange>
      <banana>43357</banana>
      </result>
      <result month="2 月">
      <apple>81156</apple>
      <orange>58883</orange>
      <banana>59280</banana>
      </result>
      <result month="3 月">
      <apple>72768</apple>
      <orange>63031</orange>
      <banana>41357</banana>
      </result>
      <result month="4 月">
      <apple>85156</apple>
      <orange>54883</orange>
      <banana>47280</banana>
      </result>
      </data>


      方法一: 用Model和source獲取xml
      程序代碼 程序代碼

      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
      <mx:Model id="results" source="price.xml"/>
      <mx:Panel title=" 用Model和source獲取xml">
      <mx:LineChart id="myChart" dataProvider="{results.result}" showDataTips="true">
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField="month"/>
      </mx:horizontalAxis>
      <mx:series>
      <mx:LineSeries yField="banana" displayName="Banana"/>
      <mx:LineSeries yField="apple" displayName="Apple"/>
      <mx:LineSeries yField="orange" displayName="Orange"/>
      </mx:series>
      </mx:LineChart>
      <mx:Legend dataProvider="{myChart}"/>
      </mx:Panel>
      </mx:Application>


      方法二:
      將xml數(shù)據(jù)源轉(zhuǎn)換成Array再作為圖表的數(shù)據(jù)源
      程序代碼 程序代碼

      <?xml version="1.0"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
      width="100%" height="100%">
      <mx:Script>
      import mx.utils.ArrayUtil;
      </mx:Script>

      <mx:Model id="results" source="price.xml"/>
      <mx:ArrayCollection id="myAC"
      source="{ArrayUtil.toArray(results.result)}"
      />

      <mx:Panel title=" 將xml轉(zhuǎn)換成Array形式的數(shù)據(jù)源">
      <mx:LineChart id="myChart" dataProvider="{myAC}" showDataTips="true">
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField="month"/>
      </mx:horizontalAxis>
      <mx:series>
      <mx:LineSeries yField="banana" displayName="Banana"/>
      <mx:LineSeries yField="apple" displayName="Apple"/>
      <mx:LineSeries yField="orange" displayName="Orange"/>
      </mx:series>
      </mx:LineChart>
      <mx:Legend dataProvider="{myChart}"/>
      </mx:Panel>
      </mx:Application>


      方法三: 用HTTPService來獲取xml數(shù)據(jù)源
      程序代碼 程序代碼

      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
      width="100%" height="100%" creationComplete="srv.send()">
      <mx:HTTPService id="srv" url="price.xml"/>

      <mx:Panel title=" 用HTTPService來獲取xml數(shù)據(jù)源">
      <mx:LineChart id="myChart"
      dataProvider="{srv.lastResult.data.result}"
      showDataTips="true"
      >
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField="month"/>
      </mx:horizontalAxis>
      <mx:series>
      <mx:LineSeries yField="apple" displayName="Apple" name="Apple"/>
      <mx:LineSeries yField="orange" displayName="Orange" name="Orange"/>
      <mx:LineSeries yField="banana" displayName="Banana" name="Banana"/>
      </mx:series>
      </mx:LineChart>
      <mx:Legend dataProvider="{myChart}"/>
      </mx:Panel>
      </mx:Application>

      方法四:將HTTPService 獲取的數(shù)據(jù)源轉(zhuǎn)換成ArrayCollection

      注意: HTTPService需要 creationComplete="srv.send()"來獲取數(shù)據(jù)源

      <?xml version="1.0"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="srv.send()">
      <mx:Script><![CDATA[
      import mx.collections.ArrayCollection;
      [Bindable]
      public var myData:ArrayCollection;
      ]]></mx:Script>

      <mx:HTTPService
      id="srv"
      url="price.xml"
      useProxy="false"
      result="myData=ArrayCollection(srv.lastResult.data.result)" />
      <mx:Panel title="HttpService to ArrayCollection">
      <mx:LineChart id="myChart" dataProvider="{myData}" showDataTips="true">
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField="month"/>
      </mx:horizontalAxis>
      <mx:series>
      <mx:LineSeries yField="apple" displayName="Apple" name="Apple"/>
      <mx:LineSeries yField="orange" displayName="Orange" name="Orange"/>
      <mx:LineSeries yField="banana" displayName="Banana" name="Banana"/>
      </mx:series>
      </mx:LineChart>
      <mx:Legend dataProvider="{myChart}"/>
      </mx:Panel>
      </mx:Application>

       

      Flex: 實(shí)時(shí)曲線圖(定時(shí)獲取后臺(tái)數(shù)據(jù))

      <?xml version="1.0" encoding="utf-8"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
      <mx:Script>
      <![CDATA[
      import mx.collections.ArrayCollection;
      [Bindable]
      private var gprsAC:ArrayCollection = new ArrayCollection();


      private static const MINISECENDS:int=1000;
      private function initApp():void
      {
      setInterval(addArr,MINISECENDS);
      }

      private var i:Number = 1;
      private var tmp_obj:Object;
      private function addArr():void
      {
      tmp_obj = new Object();
      var temp_count:Number = Math.ceil(Math.random()*100);
      tmp_obj["time"]=i;
      tmp_obj["count"]=temp_count;
      gprsAC.addItem(tmp_obj);
      i++;
      if(i==24)
      {
      i = 1;
      }
      }
      ]]>
      </mx:Script>


      <mx:LineChart id="linchart" color="#333399" width="100%" height="100%" dataProvider="{gprsAC}"
      showDataTips="true" fontSize="12" y="77" x="10">
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField="time"/>
      </mx:horizontalAxis>
      <mx:backgroundElements>
      <mx:GridLines direction="horizontal">
      <mx:horizontalStroke>
      <mx:Stroke weight="1.5" color="#333399" alpha="0.2"/>
      </mx:horizontalStroke>
      </mx:GridLines>
      </mx:backgroundElements>
      <mx:series>
      <mx:LineSeries id="lineserie" width="160" yField="count" />
      </mx:series>
      </mx:LineChart>
      </mx:Application>

       

      這里主要是通過setInterval(addArr,MINISECENDS);來實(shí)現(xiàn)一秒跳動(dòng)一次的。當(dāng)然還有setTime來做 不過setTime做起來感覺很麻煩。
      如果想通過后臺(tái)交互的話 那就改改addArr這個(gè)方法就行啦 代碼如下:


      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" creationComplete="init();">
      <mx:Style>
      .font12{font-family:宋體;fontSize:15}
      </mx:Style>
      <mx:Script><![CDATA[
      import mx.collections.ArrayCollection;
      import mx.rpc.events.ResultEvent;
      import mx.controls.Alert;


      [Bindable]
      private var expenses:ArrayCollection = new ArrayCollection();
      private function init():void{
      setInterval(torequest,2000);
      }
      public function torequest():void{
      realtimeservice.send();
      realtimeservice.addEventListener(ResultEvent.RESULT,getResult);
      }

      private var tmpobj:Object;
      private function getResult(e:ResultEvent):void{
      tmpobj = new Object();
      tmpobj["Day"] =(String)(e.result.Day);
      tmpobj["alpha"] =(String)(e.result.alpha);
      tmpobj["beta"] =(String)(e.result.beta);
      tmpobj["gama"] =(String)(e.result.gama);
      if (expenses.length==20){
      var i:int ;
      for ( i= 1 ; i<20; i++){
      expenses.setItemAt(expenses.getItemAt(i),i-1);
      }
      expenses.setItemAt(tmpobj,expenses.length-1);

      }else{
      expenses.addItem(tmpobj);
      }

      }

      ]]></mx:Script>

      <mx:HTTPService id="realtimeservice" url="http://localhost:8080/flexcharttest/realtime.servlet" useProxy="false" method="POST">

      </mx:HTTPService>
      <mx:ApplicationControlBar dock="true" cornerRadius="14" fillAlphas="[1.0, 1.0]" fillColors="[#8BBED9, #FDFAFA]" themeColor="#74B2D9" >
      <mx:Spacer width="100%" />
      <mx:Legend dataProvider="{chart}"/>
      </mx:ApplicationControlBar>
      <mx:Panel title="曲線圖" fontSize="15" width="100%" borderColor="#F7F2F2" themeColor="#F8FAFB" backgroundColor="#F9F5F5" borderStyle="inset">


      <mx:LineChart dataProvider="{expenses}" showDataTips="true" width="100%" id="chart" fontFamily="宋體" fontSize="12">
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField="Day" displayName="day" title="隨機(jī)數(shù)" />
      </mx:horizontalAxis>
      <mx:series>


      <mx:LineSeries yField="alpha" displayName="alpha濃度" styleName="font12" />
      <mx:LineSeries yField="beta" displayName="beta" />
      <mx:LineSeries yField="gama" displayName="gama" />

      </mx:series>
      </mx:LineChart>


      </mx:Panel>

      </mx:Application>

       

      使用infoSymbol,用flex的餅圖柱狀圖進(jìn)行渲染

      <esri:InfoSymbol id="PointSym" infoPlacement="center" containerStyleName="InfoSymbol">
      <esri:infoRenderer>
      <mx:Component>
      <mx:VBox width="100%" height="100%" backgroundAlpha="0">
      <mx:ieChart id="pieChart" dataProvider="{data}" width="90" height="90" showDataTips="true">
      <mx:series>
      <mx:ieSeries field="num" labelField="name" labelPosition="inside">
      <mx:fills>
      <mx:Array>
      <mx:RadialGradient>
      <mx:entries>
      <mx:Array>
      <mx:GradientEntry color="#FF0000" ratio="0"/>
      </mx:Array>
      </mx:entries>
      </mx:RadialGradient>
      <mx:RadialGradient>
      <mx:entries>
      <mx:Array>
      <mx:GradientEntry color="#00ff00" ratio="0"/>
      </mx:Array>
      </mx:entries>
      </mx:RadialGradient>
      </mx:Array>
      </mx:fills>
      </mx:ieSeries>
      </mx:series>
      </mx:ieChart>
      </mx:VBox>
      </mx:Component>
      </esri:infoRenderer>
      </esri:InfoSymbol>

      注:chart里面的{data}就是渲染的graphic的attribute

       

      接下來的例子演示了Flex中如何將數(shù)據(jù)轉(zhuǎn)化為圖表的形式表示。

      <?xml version="1.0"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
      layout="vertical"
      verticalAlign="middle"
      backgroundColor="white">

      <mx:Script>
      <![CDATA[
      [Bindable]
      [Embed(source='assets/money.png')]
      private var MoneyIcon:Class;
      ]]>
      </mx:Script>

      <mx:XML id="quotesXML" source="adbe.xml" format="e4x" />
      <mx:XMLListCollection id="adbe" source="{quotesXML.quote}" />

      <mx:String id="ADBE_YAHOO">http://finance.yahoo.com/q?d=t&s=ADBE</mx:String>

      <mx:ApplicationControlBar dock="true">
      <mx:LinkButton icon="{MoneyIcon}"
      label="ADBE"
      click="navigateToURL(new URLRequest(ADBE_YAHOO))"
      fontSize="14"
      fontWeight="bold" />
      </mx:ApplicationControlBar>

      <mx:VBox backgroundColor="white" width="100%" height="100%">
      <mx:HLOCChart id="hlocChart"
      showDataTips="true"
      dataProvider="{adbe}"
      width="100%"
      height="100%">

      <!-- vertical axis -->
      <mx:verticalAxis>
      <mx:LinearAxis baseAtZero="false" />
      </mx:verticalAxis>

      <!-- horizontal axis -->
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField="@date" title="Date"/>
      </mx:horizontalAxis>

      <!-- series -->
      <mx:series>
      <mx:HLOCSeries id="series1"
      highField="@high"
      lowField="@low"
      openField="@open"
      closeField="@close"/>
      </mx:series>
      </mx:HLOCChart>
      </mx:VBox>

      </mx:Application>

       

      ]


      ++++++++++++++++++
      FLEX 解析XML的方式
      <?xml version="1.0" encoding="utf-8"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();loaderxml();" verticalScrollPolicy="off" horizontalScrollPolicy="off">
      <mx:HTTPService id="parseXml" showBusyCursor="true" url="brow.xml">

      </mx:HTTPService>
      <mx:Script>
      <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.rpc.events.FaultEvent;
      import mx.rpc.events.ResultEvent;
      private var arr:ArrayCollection
      private function init(){
      parseXml.send();
      parseXml.addEventListener(ResultEvent.RESULT,result);
      parseXml.addEventListener(FaultEvent.FAULT,fault);
      }

      private function fault(event:FaultEvent){
      trace(event.message)
      }
      private function result(event:ResultEvent){
      trace("result:"+event.result.brows.brow as ArrayCollection);//輸出null;單下邊
      arr=event.result.brows.brow //這可以轉(zhuǎn)成ArrayCollecation
      trace(arr.getItemAt(0).sp.toString());//輸出kang
      trace("label:"+arr.getItemAt(0).label.toString());//輸出""

      trace(parseXml.lastResult.brows.brow[0].sp);//輸出kang
      trace(parseXml.lastResult.brows.brow[1].icon)//輸出 img/Face/1.swf
      }
      private function loaderxml(){
      var url="brow.xml";
      var ul:URLLoader=new URLLoader();
      ul.load(new URLRequest(url));
      ul.addEventListener(Event.COMPLETE,areadyLoad);
      }
      private function areadyLoad(event:Event){
      var xml:XML=XML(event.target.data);
      trace(xml.brow[0].sp);//輸出kang
      trace(xml.brow[1].@data);//輸出1

      var obj1:Object="<sp>hello</sp>";
      var obj2:Object="<ss>sdfasf</ss>"
      xml.appendChild(obj1);
      trace(xml.toXMLString());//最后加了一句<sp>hello</sp>
      }
      ]]>
      </mx:Script>
      </mx:Application>
      一起的

      <?xml version="1.0" encoding="UTF-8"?>
      <brows>
      <brow data="0" tp="微笑" label="" icon="img/Face/0.swf">
      <sp>kang</sp>
      </brow>
      <brow data="1" tp="撇嘴" label="a" icon="img/Face/1.swf"/>
      <brow data="2" tp="撇嘴" label="b" icon="img/Face/2.swf"/>
      <brow data="3" tp="撇嘴" label="c" icon="img/Face/3.swf"/>
      <brow data="4" tp="撇嘴" label="d" icon="img/Face/4.swf"/>
      <brow data="5" tp="撇嘴" label="e" icon="img/Face/5.swf"/>
      <brows>

       

       

       


      ------------------------------

      去年年底的時(shí)候,所做的一個(gè)rails項(xiàng)目涉及到圖表功能,主要有顯示投票結(jié)果(柱狀圖)、網(wǎng)上辦事統(tǒng)計(jì)結(jié)果(餅狀圖)、已辦事件按月統(tǒng)計(jì)結(jié)果(線狀圖)……,當(dāng)時(shí)可真是一件很麻煩的事情,開始準(zhǔn)備搬flex來做,結(jié)果考慮到開發(fā)成本等等原因沒采用,后來是自己寫js,做了好一段時(shí)間,結(jié)果在跨平臺(tái)上效果卻不是很理想。當(dāng)時(shí)真是苦煞我也,心想要是請幾個(gè)專職的google專家來幫我做成和google一樣的效果多好啊,巧合的是Google于去年晚些時(shí)候悄然推出了新圖表API。Google圖表最初是作為視頻和財(cái)經(jīng)服務(wù)的一項(xiàng)中間項(xiàng)目,后來Google決定將其公諸于世。Google始終如一地向大家提供如此優(yōu)雅和高效的解決方案來處理通用問題,當(dāng)然Google圖表也不例外。

      那么是Google圖表是如何為我們服務(wù)的呢?主要通過簡單地發(fā)送一條URL來生成圖表,調(diào)用者的主要工作是構(gòu)建這些URL,該URL最主要有以下三個(gè)參數(shù):圖表的類型、圖表的大小和圖表的數(shù)據(jù)。圖表的類型由“cht”參數(shù)指定。圖表大小用chs指定,包括圖表的長和寬,用整數(shù)來表示。圖表數(shù)據(jù)用chd表示,Google提供了四種不同的數(shù)據(jù)編碼方式,最簡單的就是文本編碼。通過給數(shù)據(jù)添加“t:”前綴。比如 http://chart.apis.google.com/chart?cht=lc&chs=100x50&chd=t:25,75,50 就是一條完整的圖表服務(wù)路徑,更完整的圖表API可以參考 http://code.google.com/apis/chart/。

      那么接下來我們就是去構(gòu)建這些URL,這里仍存在2個(gè)問題:

      1 構(gòu)建這樣的URL需要大量的字符串拼接操作,較為繁瑣,對于比較數(shù)據(jù)量比較大的圖表,構(gòu)建這樣的URL就很麻煩。

      2 構(gòu)建這樣的URL其實(shí)很多地方是重復(fù)的,只是少數(shù)的參數(shù)不一樣,對于有大量圖表顯示的系統(tǒng)來說要做很多重復(fù)性的工作。

      幸運(yùn)的是,我們不必重復(fù)發(fā)明輪子了,DEEpak Jois已經(jīng)封裝了該API,他的gem叫做gchartrb,提供一個(gè)整潔簡明的方式來生成圖表URL。使用該gem的第一步是安裝它:gem install gchartrb。 使用起來超乎想象的簡單,效果也非常的炫,不信?看看我做的一些demo吧:)

       

      場景一 venn圖 例如:A有500個(gè)元素,B有400個(gè)元素,C有300個(gè)元素,AB交集為200,AC交集為100, BC交集為50通過以上的數(shù)據(jù)得到代表變量A,B,C的三個(gè)圓圈,圓圈的面積代表變量所含元素個(gè)數(shù),圓圈的交集代表變量之間的交集。

       

      Java代碼
      require 'rubygems'
      require 'google_chart'
      def venn_diagram
      GoogleChart::VennDiagram.new("400x400", 'Venn Diagram') do |vd|
      vd.data "Blue", 500,'0000ff'
      vd.data "Green", 400, '00ff00'
      vd.data "Red", 300, 'ff0000'
      vd.intersections 200, 100, 50
      @chart = vd.to_url
      end
      end

      require 'rubygems'
      require 'google_chart'
      def venn_diagram
      GoogleChart::VennDiagram.new("400x400", 'Venn Diagram') do |vd|
      vd.data "Blue", 500,'0000ff'
      vd.data "Green", 400, '00ff00'
      vd.data "Red", 300, 'ff0000'
      vd.intersections 200, 100, 50
      @chart = vd.to_url
      end
      endJava代碼
      <%= image_tag @chart %>

      <%= image_tag @chart %>

       

       

      場景二 柱狀圖 例如JE會(huì)員分布圖,beijing 20000人, shanghai 18000人,tianjin 10000人,nanjing 8000 ,guangzhou 14000,shenzhen 16000

       

      Ruby代碼
      def bar_chart
      GoogleChart::BarChart.new('800x200', "Bar Chart", :vertical, false) do |bc|
      bc.data "beijing", [20000], '0000ff'
      bc.data "shanghai", [18000], 'ff0000'
      bc.data "tianjin", [10000], '00ff00'
      bc.data "nanjing", [8000], '00aaff'
      bc.data "guangzhou", [16000], '0effee'
      bc.data "shenzhen", [14000], 'eeff00'
      @chart = bc.to_url
      end
      end

      def bar_chart
      GoogleChart::BarChart.new('800x200', "Bar Chart", :vertical, false) do |bc|
      bc.data "beijing", [20000], '0000ff'
      bc.data "shanghai", [18000], 'ff0000'
      bc.data "tianjin", [10000], '00ff00'
      bc.data "nanjing", [8000], '00aaff'
      bc.data "guangzhou", [16000], '0effee'
      bc.data "shenzhen", [14000], 'eeff00'
      @chart = bc.to_url
      end
      endRuby代碼
      <%= image_tag @chart %>

      <%= image_tag @chart %>

       

      場景三 餅狀圖 例如JE文章投票人數(shù)統(tǒng)計(jì),very good 200票, good 150票,just so so100票,bad 180票

       

      Ruby代碼
      def pie_chart
      GoogleChart::PieChart.new('320x200', "Pie Chart",false) do |pc|
      pc.data "very good", 300
      pc.data "good", 200
      pc.data "just so so", 100
      pc.data "bad", 180
      pc.show_labels = true
      @chart = pc.to_url
      end
      end

      def pie_chart
      GoogleChart::PieChart.new('320x200', "Pie Chart",false) do |pc|
      pc.data "very good", 300
      pc.data "good", 200
      pc.data "just so so", 100
      pc.data "bad", 180
      pc.show_labels = true
      @chart = pc.to_url
      end
      endRuby代碼
      <%= image_tag @chart %>

      <%= image_tag @chart %>

       

      場景四 折線圖 例如統(tǒng)計(jì)每周JE會(huì)員增加數(shù)量,一周的數(shù)量分別是 56 48 68 59 66 67 59

       

      Ruby代碼
      GoogleChart::LineChart.new('320x200', "Line XY Chart", true) do |lcxy|
      lcxy.data "amount", [[1,56], [2,48], [3,68], [4,59], [5,66], [6,67], [7,59]], '0000ff'
      @chart = lcxy.to_url
      end

      GoogleChart::LineChart.new('320x200', "Line XY Chart", true) do |lcxy|
      lcxy.data "amount", [[1,56], [2,48], [3,68], [4,59], [5,66], [6,67], [7,59]], '0000ff'
      @chart = lcxy.to_url
      endRuby代碼
      <%= image_tag @chart %>

      <%= image_tag @chart %>

       


      這里我分三步描述flash讀XML的基本方法,以及外延一個(gè)對帶命名空間的XML的讀取方法,如下目錄:

      1、加載XML文件;
      2、讀取XML的數(shù)據(jù);
      3、過濾數(shù)據(jù);
      4、讀取帶命名空間的XML數(shù)據(jù);
      5、處理gb2312編碼的XML;

      注:在這里的AS腳本都是在 Adobe Flash CS3 版本以上中進(jìn)行編寫,flex用戶請自行添加修改相應(yīng)的包引用。

      下面開始第一部分,如何加載XML文件!

      1、加載XML文件
      在腳本編輯器中寫入以下代碼:

      var xmlLoader:URLLoader = new URLLoader();
      var xmlData:XML = null;

      xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
      xmlLoader.load(new URLRequest("http://www./net/files/sampleXML.xml"));

      function LoadXML(e:Event):void {
      xmlData = new XML(e.target.data);
      trace(xmlData);
      }按Ctrl+Enter運(yùn)行它,你會(huì)在輸出窗口中看到整個(gè)XML的內(nèi)容:

      這里不進(jìn)行代碼解說,關(guān)于XML類,請查看:http://help.adobe.com/zh_TW/AS3LCR/Flash_10.0/XML.html

      下面進(jìn)入第2部分:如何讀取XML數(shù)據(jù)。

      2、讀取XML數(shù)據(jù)
      2.1直接讀取XML數(shù)據(jù)
      對XML數(shù)據(jù)的讀取是十分簡單的,不信請看:

      function LoadXML(e:Event):void {
      xmlData = new XML(e.target.data);
      ParseBooks(xmlData);
      }

      function ParseBooks(bookInput:XML):void {
      trace("XML Output");
      trace("------------------------");
      trace(bookInput.Book);
      }可得到如何結(jié)果:

      XML Output
      ------------------------

      Sir Arthur Conan Doyle

      F. Scott Fitzgerald

      Stephen E. Ambrose

      Stephen E. Ambrose

       

      2.2、XML和XMLList
      這里我們會(huì)用到另外一個(gè)類XMLList,這個(gè)類可以把XML對象作為數(shù)組的方式讀取,可以方便地進(jìn)行for each操作。

      function ParseBooks(bookInput:XML):void {
      trace("XML Output");
      trace("------------------------");
      var authorList:XMLList = bookInput.Book.author;
      for each (var authorElement:XML in authorList) {
      trace(authorElement);
      }
      } 2.3歷遍子元素
      function ParseBooks(bookInput:XML):void {
      trace("XML Output");
      trace("------------------------");
      var bookChildren:XMLList = bookInput.Book.children();
      for each (var bookInfo:XML in bookChildren) {
      trace(bookInfo);
      }
      }

       

      <?xml version="1.0" encoding="utf-8"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">

      <mx:VDividedBox x="0" y="0" height="100%" width="100%">
      <mx:Legend dataProvider="{linechart}" height="40%" width="100%"/>
      <mx:HDividedBox x="0" y="0" height="100%" width="100%">
      <mx:LineChart id="linechart" showDataTips="true" x="0" y="0" height="100%" width="80%" dataProvider="{capbility}" >
      <mx:horizontalAxis>
      <mx:CategoryAxis categoryField = "Time" labelFunction="showHour"/>
      </mx:horizontalAxis>
      <mx:series>
      <mx:LineSeries displayName="Series 1" yField=""/>
      </mx:series>
      </mx:LineChart>
      <mx:Canvas width="20%" height="100%" id = "can">
      </mx:Canvas>
      </mx:HDividedBox>
      </mx:VDividedBox>
      <mx:Script>
      <![CDATA[
      import mx.graphics.Stroke;
      import mx.events.DragEvent;
      import mx.controls.CheckBox;
      import mx.controls.Alert;
      import mx.collections.ArrayCollection;
      import mx.charts.chartClasses.Series;

      private var t:Timer = new Timer(2000);
      private var capItem:Array = new Array();
      private var theName:Array = ["股票1","股票2","股票3"];
      private var i:int=1;
      private var ii:int = 15;
      private var step:int = 10;
      [Bindable]
      private var capbility:ArrayCollection = new ArrayCollection( [
      { Time: "10:00", 股票1: 2000, 股票2: 1500, 股票3: 450},
      { Time: "10:15", 股票1: 1000, 股票2: 200, 股票3: 600},
      { Time: "10:30", 股票1: 1500, 股票2: 500, 股票3: 300},
      { Time: "10:45", 股票1: 1800, 股票2: 1200, 股票3: 900},
      { Time: "11:00", 股票1: 2400, 股票2: 575, 股票3: 500},
      { Time: "11:15", 股票1: 2000, 股票2: 1500, 股票3: 450},
      { Time: "11:30", 股票1: 1000, 股票2: 200, 股票3: 600},
      { Time: "11:45", 股票1: 1500, 股票2: 500, 股票3: 300},
      { Time: "12:00", 股票1: 1800, 股票2: 1200, 股票3: 900},
      { Time: "12:15", 股票1: 2400, 股票2: 575, 股票3: 500},
      { Time: "12:30", 股票1: 2000, 股票2: 1500, 股票3: 450},
      { Time: "12:45", 股票1: 1000, 股票2: 200, 股票3: 600},
      { Time: "13:00", 股票1: 1500, 股票2: 500, 股票3: 300},
      { Time: "13:15", 股票1: 1800, 股票2: 1200, 股票3: 900},
      { Time: "13:30", 股票1: 2400, 股票2: 575, 股票3: 500},
      { Time: "13:45", 股票1: 1000, 股票2: 200, 股票3: 600},
      { Time: "14:00", 股票1: 1500, 股票2: 500, 股票3: 300},
      { Time: "14:15", 股票1: 1800, 股票2: 1200, 股票3: 900},
      { Time: "14:30", 股票1: 2400, 股票2: 575, 股票3: 500},
      { Time: "14:45", 股票1: 1000, 股票2: 200, 股票3: 600},
      { Time: "15:00", 股票1: 1500, 股票2: 500, 股票3: 300}]);

      private function init():void{
      for(var i:int = 0;i<theName.length;i++){
      linechart.series = null;
      var cb:CheckBox = new CheckBox();
      var CBmodel:CheckboxModel = new CheckboxModel;
      cb.label = theName[i];
      cb.x = 10 ;
      cb.y = can.y + (i+1)*20;
      CBmodel.setName(theName[i]);
      CBmodel.setId(i);
      cb.data = CBmodel;
      cb.addEventListener(MouseEvent.CLICK,selectThis);
      can.addChild(cb);
      timeBegin();//開始定時(shí)
      }
      }
      private function selectThis(e:MouseEvent):void{
      var lineSeries:Array = linechart.series;
      var tempSeries:LineSeries = new LineSeries();
      if(e.target.data.getSelected()==0){
      e.target.data.setSelected(1);
      tempSeries.yField = e.target.data.getName();
      tempSeries.displayName = e.target.data.getName();
      tempSeries.setStyle("form", "curve");
      lineSeries.push(tempSeries);
      linechart.series = lineSeries;
      }else{
      for(var i:int=0;i<lineSeries.length;i++){
      if(e.target.data.getName() == lineSeries[i].yField){
      lineSeries.splice(i,1);
      }
      linechart.series = lineSeries;
      }
      e.target.data.setSelected(0);
      }
      }
      private function showHour(cat:Object,pcat:Object,ax:CategoryAxis,labelItem:Object):String{
      var re:String = "";
      var theTime:String = labelItem.Time;
      var x:Array = theTime.split(":");
      if(x[1] == "00"){
      re = x[0];
      }else re = "";
      return re;
      }
      public function timeBegin():void{
      t.start();
      t.addEventListener(TimerEvent.TIMER,doTime);
      }
      private function doTime(e:Event):void{
      var time1:String;
      var time2:String = new String((i%4)*15);
      var x1:int;
      var x2:int;
      var x3:int;
      i++;
      if(time2 == "0")time2 = "00";
      if(time2=="00"){
      ii = ii+1;
      time1 =new String(((ii)%24));
      }else time1 =new String( ii%24 );
      x1 = step*100/10;
      x2 = step*80/10;
      x3 = x1+x2;
      step++;
      var add:Array = [{Time:time1+":"+time2,股票1:x1,股票2:x2,股票3:x3}];
      this.capbility.removeItemAt(0);
      capbility.addItem(add[0]);
      }
      ]]>
      </mx:Script>
      </mx:Application>

       

       

       

       


      Flex 快捷鍵對一般開發(fā)者來說都非常有用,本文向大家簡單介紹一下Flex 快捷鍵有哪些,以及它們的具體作用,希望本文的介紹能讓你有所收獲。

      ◆常用Flex 快捷鍵如下:

      Ctrl-F11: 執(zhí)行(Run)
      F11: 除錯(cuò)(Debug)
      Ctrl-Alt-Down: 重復(fù)目前所在編輯列(Repeat current line )
      Alt-Up: 移動(dòng)本列,或選擇列往上移動(dòng)(Move line (or selection) up )
      Alt-Down: 移動(dòng)本列,或選擇列下往移動(dòng)(Move line (or selection) down )
      Ctrl-Click: 移至定義區(qū)(Go to definition (=F3) )

      F3 顯示當(dāng)前選中標(biāo)簽的類定義
      Ctrl-D: 刪除本行(Delete line )
      Alt-/: 文字自動(dòng)完成(Word completion (cycles through possible matches))
      Ctrl-Up: 捲軸向上(Scroll up )
      Ctrl-Down: 捲軸向下(Scroll Down )
      Shift+F2 彈出幫助窗體,顯示選中標(biāo)簽的上下文幫助
      F1 在IDE內(nèi)顯示上下文幫助
      CTRL+0 在代碼視窗顯示大綱
      CTRL+SHIFT+C 加注釋
      Ctrl+/:行注釋
      Ctrl+Shift+L: 所有快捷鍵提示

      ◆另外還有一些不怎么常用的Flex 快捷鍵。

      1.) 打開類型 (Ctrl-Shift-T)* - 瀏覽工程中所有類型(AS 類/接口, MXML文件) ,可快速打開它們。

      2.) 跳到定義處(F3/Ctrl-點(diǎn)擊目標(biāo))* - 快速跳轉(zhuǎn)到 (類型/變量/函數(shù))定義處。

      3.) 快速Outliner視圖 (Ctrl-O)* - 以彈出窗口方式打開outline視圖。

      4.) 內(nèi)容相關(guān)幫助 (在目標(biāo)上按F1) - 在MXML標(biāo)簽,函數(shù)或類/接口上按F1會(huì)在幫助面板上顯示相關(guān)幫助信息。

      5.) 打開內(nèi)容相關(guān)幫助 (Shift-F2) - 會(huì)彈出新窗口顯示相關(guān)幫助信息。

      6.) 跳到匹配的括號(Ctrl-Shift+P)* - 跳到相對應(yīng)得括號處。

      7.) 懸停在目標(biāo)上 - 當(dāng)你把鼠標(biāo)停留在變量上,會(huì)顯示變量類型,如果停留在函數(shù)上,則顯示返回類型。

      8.) 添加CDATA 塊(Ctrl-Shift-C) -

      9.) 事件類型提示(Ctrl-space) - addEventListener( 顯示所有相關(guān)聯(lián)的事件)

      10.) 組織導(dǎo)入(Ctrl + Shift + O)*

       


      <?xml version="1.0"?>
      <!-- Simple example to demonstrate the ColumnChart and BarChart controls. -->
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

      <mx:Script>
      <![CDATA[


      import mx.collections.ArrayCollection;

      [Bindable]
      private var expensesAC:ArrayCollection = new ArrayCollection( [
      { Month: "Jan", Profit: 2000, Expenses: 1500, Amount: 450 },
      { Month: "Feb", Profit: 1000, Expenses: 200, Amount: 600 },
      { Month: "Mar", Profit: 1500, Expenses: 500, Amount: 300 },
      { Month: "Apr", Profit: 1800, Expenses: 1200, Amount: 900 },
      { Month: "May", Profit: 2400, Expenses: 575, Amount: 500 } ]);
      //定義數(shù)據(jù)源:Month表示數(shù)據(jù)個(gè)數(shù),名字可以隨便定義
      ]]>
      </mx:Script>
      <mx:Style>
      BubbleChart { color:#000099; }、、定義氣泡的樣式
      </mx:Style>
      <mx:Panel title="ColumnChart and BarChart Controls Example"
      height="100%" width="100%" layout="horizontal">
      <mx:BubbleChart id="JBubber" showDataTips="true" dataProvider="{expensesAC}" width="635">

      //showDataTips表示是否顯示每一個(gè)氣泡的詳細(xì)信息
      <mx:series>
      <mx:BubbleSeries displayName="Profix/Expenses/Amount" yField="Expenses" radiusField="Amount" xField="Profit"/>

      //displayName表示顯示詳細(xì)信息的標(biāo)題,xField表示顯示的第一行數(shù)據(jù),yField表示顯示的第2行數(shù)據(jù),radiusField表示氣泡的大小
      </mx:series>
      </mx:BubbleChart>
      <mx:Legend dataProvider="{JBubber}"/>


      </mx:Panel>
      </mx:Application>


      <?xml version="1.0" encoding="utf-8"?>
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
      <mx:Script>
      <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.collections.XMLListCollection;
      import mx.controls.Alert;


      [Bindable]//綁定數(shù)據(jù)源
      private var linechartArray:ArrayCollection = new ArrayCollection([
      {name:"1",value:300},
      {name:"2",value:500},
      {name:"3",value:300},
      {name:"4",value:200},
      {name:"5",value:800},
      {name:"6",value:100},
      {name:"7",value:800},
      {name:"8",value:700},
      {name:"9",value:200}


      ]);

      public function init():void{
      //對數(shù)據(jù)源添加第一項(xiàng)和最后一項(xiàng)以達(dá)到不覆蓋的效果
      var foo:Object=new Object;
      this.linechartArray.addItemAt(foo,0);
      this.linechartArray.addItem(foo);
      }
      //隱藏豎軸label
      private function verticalHide(data:Object, field:String, index:Number):String {
      return "";
      }


      ]]>
      </mx:Script>

      <!--自定義線條的顏色 -->
      <mx:SolidColor id="sc1" color="blue" alpha=".3"/>
      <mx:SolidColor id="sc2" color="red" alpha=".3"/>
      <mx:SolidColor id="sc3" color="green" alpha=".3"/>

      <!--自定義筆觸效果外框顏色 -->
      <mx:Stroke id = "s1" color="blue" weight="2"/>
      <mx:Stroke id = "s2" color="red" weight="2"/>
      <mx:Stroke id = "s3" color="green" weight="2"/>
      <mx:Stroke id="axisStroke" color="#884422" weight="8" alpha=".88" caps="square"/>

      <!--=======================線型圖===========================-->
      <mx:LineChart id="linechart" height="312" width="889" paddingLeft="5" paddingRight="5"
      showDataTips="true" dataProvider="{linechartArray}">
      <!--背景線顯示樣式,此處采用豎直顯示-->
      <mx:backgroundElements>
      <mx:GridLines direction="vertical" horizontalChangeCount="2"
      verticalChangeCount="1"
      />
      </mx:backgroundElements>

      <!--水平軸的渲染-->
      <mx:horizontalAxisRenderers>
      <mx:AxisRenderer labelGap="3" textIndent="0" id="myAxisRenderer" placement="bottom" canDropLabels="true" axis="{a1}">
      <!--橫軸軸線樣式 cps是控制邊緣形狀的屬性-->
      <mx:axisStroke>
      <mx:Stroke color="red" weight="4" caps="round"/>
      </mx:axisStroke>
      <!--刻度樣式-->
      <!--<mx:tickStroke>
      <mx:Stroke color="blue" weight="3"/>
      </mx:tickStroke>-->
      </mx:AxisRenderer>
      </mx:horizontalAxisRenderers>

      <!--豎直軸的樣式渲染 placement是顯示位置的刻度線-->
      <mx:verticalAxisRenderers>
      <mx:AxisRenderer axis="{a2}" labelGap="3" alpha="0" placement="left"
      showLine="true">
      </mx:AxisRenderer>
      </mx:verticalAxisRenderers>

      <!--豎直軸的控制-->
      <mx:verticalAxis>
      <mx:LinearAxis id="a2" labelFunction="verticalHide"
      minimum="0" interval="10">
      </mx:LinearAxis>
      </mx:verticalAxis>

      <!--水平軸的控制及填充值-->
      <mx:horizontalAxis >
      <mx:CategoryAxis id="a1" categoryField="name" ticksBetweenLabels="false"/>
      </mx:horizontalAxis>

      <!--線型圖序列-->
      <!-- <mx:secondSeries>

      <mx:LineSeries form="curve" xField="name" yField="value"/>
      </mx:secondSeries>-->
      <mx:series>
      <mx:LineSeries yField="value" form="curve" displayName="value" lineStroke="{s3}"/>
      </mx:series>
      </mx:LineChart>
      </mx:Application>

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多