рисование на CandlestickSeries LineSeries сужает свечи

Я использую Flex 4.5. В моем приложении у меня есть CandlestickChart с базовой CandlestickSeries. Я даю пользователю возможность добавить линейную диаграмму поверх CandlesChart, добавив LineSeries в CandleStickChart, как описано в документации Adobe здесь: здесь

Моя проблема в том, что при добавлении линии форма свечи становится более узкой. Более того, каждая добавляемая линия делает свечу уже.

Я просмотрел и нашел эту ветку на форумах Adobe: «Проблема CandlestickChart с LineSeries», в которой описывается точно такая же проблема.

К сожалению, на эту ветку до сих пор не ответили.

Кто-нибудь знает решение этой проблемы?

Заранее спасибо, Равид


person ravidp    schedule 19.09.2012    source источник


Ответы (2)


Что ж, решение, которое я нашел, не очень хорошее, и лучшие решения все еще ценятся, но для тех из вас, у кого такая же проблема, это решение сработало для меня:

Проблема возникает из-за того, что средство визуализации элементов свечи по умолчанию использует ширину элемента для вычисления размера свечи, что имеет смысл. Проблема в том, что когда вы добавляете другую серию, возникает ошибка, и ширина элемента изменяется до смены свечи.

Мое решение - создать копию средства визуализации элементов по умолчанию и нарисовать свечи на основе ширины графика и количества свечей, которые вы хотите поместить туда (чтобы вы не использовали ширину элемента).

Это решает проблему, но если вы используете функцию всплывающих подсказок, это как бы беспорядочно размещает ее относительно свечи.

person ravidp    schedule 20.09.2012

Я знаю, что этот ответ немного запоздал, но если он кому-то поможет, вот что я сделал. (Это тоже не досконально проверено)

Создайте класс, расширяющий класс CandleStickChart, и просто переопределите функцию «applySeriesSet» следующим образом:

override protected function applySeriesSet(seriesSet:Array /* of Series */,
                                               transform:DataTransform):Array /* of Series */
    {
        // filter out the non-candlestick series
        var filteredSeriesSet:Array = new Array();
        for each(var series:Series in seriesSet){
            if(series is CandlestickSeries) filteredSeriesSet.push(series);
        }

        // call the CandlestickChart applySeriesSet function with the filtered set, ignore return value
        super.applySeriesSet(filteredSeriesSet, transform);

        // do the code that the CartesianChart applySeriesSet function would have done, but with the unfiltered seriesSet 
        // would have preferred to do something like super.super.applySeriesSet(seriesSet, transform);
        var n:int = seriesSet.length;
        for (var i:int = 0; i < n; i++)
        {
            var newSeries:IChartElement = seriesSet[i];
            if (newSeries is Series)
                customizeSeries(Series(seriesSet[i]), i);
        }
        return seriesSet;
    }
person William    schedule 01.04.2013