Расположение меток осей на гибкой диаграмме и способы позиционирования объектов относительно них

Я использую 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 ответов

Решение

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

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

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

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

J

Используя что-то похожее на приведенное выше предложение, я смог рассчитать желаемый 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);

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

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

Посмотрите на это, используя 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 -> Использование событий и эффектов в диаграммах -> Рисование элементов управления диаграммой

Посмотрите учебник Adobe по меткам данных:

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

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

Другие вопросы по тегам