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:
L'mxml invece è tutto qui: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>
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.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>
Questo problema ci sta fondendo il cervello, se riusciste ad aiutarci vi saremmo immensamente grati!
![]()

Rispondi quotando