Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Flex+XML] Grafico a bolle: prende solo il parametro del raggio

    Ciao a tutti.
    Vi presento un simpatico problema con un grafico a bolle (componente predefinito di Flex).

    L'xml da cui i dati vengono caricati è il seguente:
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <valori>
        <valore tipo="Tipo 1">
            <serie nome="x">5000</serie>
            <serie nome="y">200</serie>
            <serie nome="r">500</serie>
          </valore>
       
        <valore tipo="Tipo 2">
            <serie nome="x">3000</serie>
            <serie nome="y">2350</serie>
            <serie nome="r">550</serie>
          </valore>
         
          <valore tipo="Tipo 3">
            <serie nome="x">7000</serie>
            <serie nome="y">50</serie>
            <serie nome="r">600</serie>
          </valore>
          
          <valore tipo="Tipo 1">
            <serie nome="x">3000</serie>
            <serie nome="y">1250</serie>
            <serie nome="r">700</serie>
          </valore>
    </valori>
    L'mxml invece è tutto qui:
    codice:
    <?xml version="1.0"?>
    
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="loadXML()" borderColor="#0D87DD">
      <mx:Script><![CDATA[
         import mx.collections.ArrayCollection;
         import mx.charts.BubbleChart;
         import mx.charts.series.BubbleSeries;
         import mx.charts.CategoryAxis;
         import mx.charts.Legend;
         import flash.net.*;
         import mx.events.*;
         import mx.controls.*;
    
         public var temp:XML;
         public var datiArray:ArrayCollection = new ArrayCollection();
         private var xmlLoader:URLLoader = new URLLoader();
         private var pathFile:String = "xml/datiBolle.xml";
         
         private function loadXML():void {
           xmlLoader.addEventListener(Event.COMPLETE, parseXml);
           xmlLoader.load(new URLRequest(pathFile));
         }
       
         private function parseXml(e:Event):void {
           xmlLoader.removeEventListener(Event.COMPLETE, parseXml);
           temp = new XML(e.target.data);
           riempiDati();
         }
        
        
         //[Bindable]
         private function linka():void{
             //[...]
         }
        
         private function riempiDati():void{
         	 var myChart:BubbleChart = new BubbleChart();
         	 var mySeries:Array=new Array();
         	 var dati:ArrayCollection = new ArrayCollection();
         	 
    	     var temp:XML = new XML(xmlLoader.data); temp.ignoreWhitespace=true;
    	     var datiGrafico:XMLList=temp.children();
    	     var i:Number;
    	     var j:Number;
    	     var x:Number;
    	     var controllo:Boolean;
    	     var arTipi:Array=new Array();
    	     var diverso:Boolean=true;
    	     var tipo:String;
    	     riempiNomi(datiGrafico,arTipi);
    	         
    	     for(x=0;x<arTipi.length;x++){ 
    	     	var serie:BubbleSeries=initSerie();
    	     	var arColl:ArrayCollection = new ArrayCollection();
    			for(i=0;i<datiGrafico.length()-1;i++){ // Ciclo serie  
    		         tipo=datiGrafico[i].attribute("tipo");
    		         if(tipo==arTipi[x]){      
    		         	var arFigli:XMLList=datiGrafico[i].children();
    		         	for(j=0;j<arFigli.length();j++){ // Ciclo nome-valore
    						var oggettoArColl:Object=new Object();
    						var nome:String=arFigli[j].attribute("nome");
    						var valore:String=arFigli[j];
    		                oggettoArColl[nome]=valore;
    			        	arColl.addItem(oggettoArColl);
    		            }
    		         }
    	         }
    	         //Alert.show(arColl[0].x)
    	         serie.displayName=arTipi[x];
    	         serie.dataProvider=arColl;
    	         mySeries.push(serie);
    	     }
    	     initGrafico(myChart, mySeries);
        }
        public function initGrafico(myChart:BubbleChart, mySeries:Array):void {
    	    var legend1:Legend = new Legend();
    	    myChart.showDataTips = true;
    	    myChart.series = mySeries;
    	    legend1.dataProvider = myChart;
    	    p1.addChild(myChart);
    	    p1.addChild(legend1);
      	}
        private function initSerie():BubbleSeries{
        	var serie:BubbleSeries=new BubbleSeries();  
         	serie.xField="x";
         	serie.yField="y";
         	serie.radiusField="r";
            serie.minRadius=1;
            serie.maxRadius=10000;
            serie.alpha=0.5;
            return serie;
        }
        private function riempiNomi(datiGrafico:XMLList,arTipi:Array):void{
        	for(var i:Number=0;i<datiGrafico.length()-1;i++){
    	       var nome:String=datiGrafico[i].attribute("tipo");
    	       var diverso:Boolean=true;
    	       for(var j:Number=0;j<arTipi.length;j++){
    	         if(nome==arTipi[j]){
    	           diverso=false;
    	         }
    	       }
    	       if(diverso==true){
    	         arTipi.push(nome);
    	       }
    	     }
        }
      ]]></mx:Script>
      <mx:Panel id="p1" title="Bubble Chart" borderColor="#A3F5A1" cornerRadius="18" backgroundColor="#FFFFFF" click="linka()"/>
      <mx:Style>
         BubbleChart {
            chartSeriesStyles: PCCSeries1, PCCSeries2;
         }
         .PCCSeries1 {
            fill: #CCFF66;
         }
         .PCCSeries2 {
            fill: #FF0000;
         }
         .PCCSeries3 {
            fill: #333333;
         }
      </mx:Style>
    </mx:Application>
    Come vedete nell'allegato, il valore dei raggi viene caricato correttamente, così come le serie di dati, ma la y e la x vengono ignorati allegramente.
    Questo problema ci sta fondendo il cervello, se riusciste ad aiutarci vi saremmo immensamente grati!
    Immagini allegate Immagini allegate

  2. #2

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.