2009-07-10 6 views
2

Ich verwende einen AxisRenderer, der rechts von einem BarChart positioniert ist und suche nach einer Möglichkeit, einen Titel für die Werte im AxisRenderer zu positionieren über ihnen.Position von Achsenbeschriftungen auf einem Flex Chart und wie Objekte relativ dazu positioniert werden

Wie finden Sie die Position der Beschriftungen in einem Achsen-Renderer? Es scheint, als ob AxisRenderer.width die Breite des Diagramms zurückgibt und AxisRenderer.x die Kante der gesamten Diagramme zurückgibt.

Hier ist ein Versuch zu einem Bild:

       Title 
xxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxx   axis value 
xxxxxxxxxxxxxxxxxxxxx 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx axis value 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

xxxxxxxxx 
xxxxxxxxx      axis value 
xxxxxxxxx 

Ich versuche, den Titel über die „Achse Werte“ durch die AxisRenderer positioniert zu positionieren. Grundsätzlich, für eine nicht absolut positionierte Achse, wie bestimmen Sie, wo es ist?

Antwort

3

Ich habe ein wenig nach diesem Problem geforscht und ich bin wahrscheinlich zu der gleichen Schlussfolgerung gekommen, die Sie haben - es gibt keinen einfachen Weg, dies zu tun. Nach meiner Erfahrung sind AxisRenderer unter der Haube ziemlich kompliziert (und nicht besonders verständlich geschrieben).

Um jedoch das zu erreichen, was Sie erreichen möchten, können Sie Ihren eigenen IAxisRenderer erstellen, um genau das zu erstellen, was Sie wollen (dies ist ein Albtraum ... ich habe es getan und es war schmerzhaft). Sie könnten auch versuchen, AxisRenderer zu erweitern und versuchen, die bestimmte Methode zu überschreiben, die es in gebauten titleRenderer positioniert (wieder ist dies nicht besonders einfach oder sauber, da AxisRenderer meiner Meinung nach nicht mit Erweiterung erstellt wurde).

Zwei einfache Lösungen, die Ihnen eine Menge Zeit sparen. Hard-Code die Position des Titels an einem Ort, der in Ordnung aussieht. Ich würde sagen, in den meisten Fällen werden sich die Achsenbeschriftungen nicht so oft ändern, obwohl ich offensichtlich dort eine Annahme mache. Meiner Meinung nach die einfachste Lösung ... das Design ändern. Du wirst wahrscheinlich ziemlich viel Zeit brauchen, um den Titel genau so zu bekommen, wie du es willst. Sie müssen sich fragen, ob der Wert, den Sie daraus ziehen, die Mühe wert ist, die Sie investieren.

Entschuldigung, ich kann nicht mehr helfen.

J

+0

Die hartcodierte Lösung ist tatsächlich, was ich getan habe. Ich stimme zu, dass es wahrscheinlich der beste Weg ist - ich lese den Quellcode genug um zu denken, dass es einfach keinen anderen Weg gibt. – stevedbrown

0

Schauen Sie sich Adobe Tutorial auf Datenbeschriftungen:

Adding data labels to charts

Ist das, was Sie suchen, oder habe ich falsch verstehen Ihre Frage?

+0

Dies ist nicht das, was Ich suche. Ich möchte einen Titel über den Datenbeschriftungen positionieren, ohne absolute Größen zu verwenden. Es müsste relativ zum AxisRenderer positioniert sein. Ich verspreche es ist nicht im Tutorial. – stevedbrown

1

Persönlich, ich nicht have the source to flex-charting. Sie haben das wahrscheinlich schon getan, aber vielleicht werfen Sie einen Blick in die Flex-Quelle, um zu sehen, was Sie herausfinden können?

Andernfalls, vielleicht, da Sie die Werte jedes Balkens in der Grafik und Skala der Achse kennen ... könnten Sie theoretisch die Position berechnen, wo Sie Ihren Text platzieren möchten?

+0

Ja, den Quellcode zu lesen war eine traurige Zeit für mich. Die Berechnung der Position funktionierte jedoch. – stevedbrown

1

Blick in dem das CarthesianDataCanvas in Ihr Diagramm verwenden.

<Chart> 
    <mx:annotationElements> 
     <mx:CartesianDataCanvas id="canvas" includeInRanges="true"/> 
    </mx:annotationElements> 
</Chart> 

siehe Dokumentation Adobe: http://livedocs.adobe.com/flex/3/html/help.html?content=charts_types_06.html -> Veranstaltungen und Effekte in Charts verwenden -> auf Diagramm Zeichnung steuert

2

Mit etwas ähnlich dem obigen Vorschlag, den ich war in der Lage die gewünschten x und Breite eines AxisRenderer zu berechnen positioniert nach rechts. In meinem Fall habe ich GridLines anstelle von CartesianDataCanvas verwendet und ich hatte auch einen linken und rechten vertikalen AxisRenderer.

Fügen Sie den vertikalen AxisRenderers einen Ereignis-Listener für das Ereignis UPDATE_COMPLETE hinzu. Berechnen Sie die Breite des rechten AxisRenderer:

var rightGutterX:

var rightGutterWidth:Number = chart.width - gridLines.width - Math.abs(leftAxisRenderer.gutters.width);

Für die X Etikettenposition in Ihrem Fall könnten Sie etwas Ähnliches wie tun Number = chart.x + gridLines.width + Math.abs(leftAxisRenderer.gutters.width);