Расположение меток осей на гибкой диаграмме и способы позиционирования объектов относительно них - PullRequest
2 голосов
/ 10 июля 2009

Я использую AxisRenderer, который расположен справа от BarChart, и ищу способ расположить заголовок для значений в AxisRenderer над ними.

Как найти положение меток в устройстве визуализации осей? Похоже, AxisRenderer.width возвращает ширину диаграммы, а AxisRenderer.x возвращает край целых диаграмм.

Вот попытки по картинке:

                                Title
xxxxxxxxxxxxxxxxxxxxx   
xxxxxxxxxxxxxxxxxxxxx           axis value
xxxxxxxxxxxxxxxxxxxxx   

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  axis value
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  

xxxxxxxxx   
xxxxxxxxx                       axis value
xxxxxxxxx   

Я пытаюсь расположить заголовок над «значениями оси», расположенными AxisRenderer. В основном, для не совсем позиционированной оси, как вы определяете, где она находится?

Ответы [ 5 ]

3 голосов
/ 21 июля 2009

Я немного покопался в этой проблеме и, вероятно, пришел к тому же выводу, что и вы, - нет простого способа сделать это. По моему опыту, AxisRenderers довольно чертовски сложны под капотом (и не написаны особенно понятным способом).

Однако, чтобы достичь того, чего вы хотите достичь, вы можете создать свой собственный IAxisRenderer, чтобы создать именно то, что вы хотите (это кошмар ... я сделал это, и это было больно). Вы также можете попытаться расширить AxisRenderer и попытаться переопределить конкретный метод, который позиционирует его как встроенный titleRenderer (опять же, это не особенно просто и не чисто, поскольку, по моему мнению, AxisRenderer не был создан с учетом расширения).

Два простых решения, которые сэкономят вам огромное количество времени. Жесткий код позиции заголовка в месте, которое выглядит хорошо. Я бы сказал, что в большинстве случаев метки оси не будут меняться так часто, хотя, очевидно, я делаю там предположение. На мой взгляд, самое простое решение ... изменить дизайн. Возможно, вам понадобится немало времени, чтобы получить название именно так, как вы этого хотите. Вы должны спросить себя, стоит ли ценность, которую вы получаете от нее, тех усилий, которые вы вкладываете.

Извините, я больше не могу помочь.

J

2 голосов
/ 10 марта 2010

Используя что-то похожее на приведенное выше предложение, я смог вычислить желаемое значение x и ширину AxisRenderer, расположенного справа. В моем случае я использовал GridLines вместо CartesianDataCanvas, и у меня также был левый и правый вертикальный AxisRenderer.

Добавьте прослушиватель событий для события UPDATE_COMPLETE в вертикальные AxisRenderers. Рассчитайте ширину правого AxisRenderer:

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

Для позиции метки X в вашем случае вы можете сделать что-то похожее на:

var rightGutterX: Number = chart.x + gridLines.width + Math.abs(leftAxisRenderer.gutters.width);

1 голос
/ 05 февраля 2010

Посмотрите на это, используя CarthesianDataCanvas в вашу диаграмму.

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

см. Документацию Adobe: http://livedocs.adobe.com/flex/3/html/help.html?content=charts_types_06.html -> Использование событий и эффектов в диаграммах -> Рисование на элементах управления диаграммы

1 голос
/ 21 июля 2009

Лично у меня нет источника гибкой диаграммы . Вы, вероятно, уже сделали это, но, возможно, посмотрите в исходном коде Flex, чтобы увидеть, что вы можете выяснить?

В противном случае, может быть, поскольку вы знаете значения каждого столбца на графике и шкале оси ... вы можете теоретически рассчитать положение, в котором вы хотите разместить свой текст?

0 голосов
/ 17 июля 2009

Ознакомьтесь с руководством Adobe по меткам данных:

Добавление меток данных в диаграммы

Это то, что вы ищете, или я неправильно понял ваш вопрос?

...