在CandlestickSeries上绘制LineSeries使蜡烛更窄

时间:2012-09-19 09:17:49

标签: actionscript-3 flex charts flex4.5 candlestick-chart

我是,使用Flex 4.5。 在我的应用程序中,我有一个带有基本CandlestickSeries的CandlestickChart。 我通过在CandleStickChart中添加LineSeries,让用户能够在candlesChart上添加线图,如adobe的文档中所述:here

我的问题是,当添加线条时,它会将蜡烛的形状更改为更窄。此外,添加的每一行都使蜡烛更窄。

我环顾四周,在adobe的论坛中找到了这个帖子:"CandlestickChart problem with LineSeries",它描述了完全相同的问题。

不幸的是,线程仍未得到解答。

有没有人知道这个问题的解决方案?

提前致谢, Ravid

2 个答案:

答案 0 :(得分:0)

嗯,我找到的解决方案并不好,更好的解决方案仍然受到赞赏,但对于那些有同样问题的人来说,这个解决方案对我有用:

出现问题是因为蜡烛的默认项呈示器使用项目的宽度来计算蜡烛的大小。 问题是,当你添加另一个系列时,会有一个错误,并且在更改蜡烛之前更改了项目的宽度。

我的解决方案是创建默认项目渲染器的副本,并根据图形的宽度和要放在那里的蜡烛数量绘制蜡烛(因此不要使用项目的宽度)。

它修复了问题,但是如果你使用工具提示功能,那么它会混淆它相对于蜡烛的位置。

答案 1 :(得分:0)

我知道这个答案有点晚了,但如果它对其他人有帮助,这就是我所做的。 (它没有经过彻底的测试)

创建一个扩展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;
    }