【问题标题】:Flex chart not displaying right values along x axis弹性图表未沿 x 轴显示正确的值
【发布时间】:2010-05-25 16:46:12
【问题描述】:

我不知道有什么更好的方法来问这个问题。

如果运行以下代码 (我知道 cData 部分在预览中不可见,某些原因会导致它被忽略)。

结果不能正确表示数据。 1. Flex 忽略 DECKER 的缺失日期 8 月 24 日。 2. 错误地将 42.77 关联到 23-Aug 而不是 24-AUG。

有没有办法在 flex 中, 其中 x 轴是所有可用点的并集?

以下代码完全来自: Adobe website link

我只评论了 2 个数据点。 //{date:"23-Aug-05", close:45.74}, 和 //{date:"24-Aug-05", close:150.71},

<?xml version="1.0"?>

 [Bindable]
  public var SMITH:ArrayCollection = new ArrayCollection([
    {date:"22-Aug-05", close:41.87},
    //{date:"23-Aug-05", close:45.74},
    {date:"24-Aug-05", close:42.77},
    {date:"25-Aug-05", close:48.06},
 ]);

 [Bindable]
  public var DECKER:ArrayCollection = new ArrayCollection([
    {date:"22-Aug-05", close:157.59},
    {date:"23-Aug-05", close:160.3},
    //{date:"24-Aug-05", close:150.71},
    {date:"25-Aug-05", close:156.88},
 ]);

[Bindable]
public var deckerColor:Number = 0x224488;

[Bindable]
public var smithColor:Number = 0x884422;

]]>

    <mx:horizontalAxisRenderers>
        <mx:AxisRenderer placement="bottom" axis="{h1}"/>
    </mx:horizontalAxisRenderers>

    <mx:verticalAxisRenderers>
        <mx:AxisRenderer placement="left" axis="{v1}">
            <mx:axisStroke>{h1Stroke}</mx:axisStroke>
        </mx:AxisRenderer>
        <mx:AxisRenderer placement="left" axis="{v2}">
            <mx:axisStroke>{h2Stroke}</mx:axisStroke>
        </mx:AxisRenderer>
    </mx:verticalAxisRenderers>

    <mx:series>
       <mx:ColumnSeries id="cs1" 
            horizontalAxis="{h1}" 
            dataProvider="{SMITH}" 
            yField="close" 
            displayName="SMITH"
        >
            <mx:fill>
                <mx:SolidColor color="{smithColor}"/>
            </mx:fill>

            <mx:verticalAxis>
               <mx:LinearAxis id="v1" minimum="40" maximum="50"/>
            </mx:verticalAxis>           
       </mx:ColumnSeries>           
       <mx:LineSeries id="cs2" 
            horizontalAxis="{h1}" 
            dataProvider="{DECKER}" 
            yField="close" 
            displayName="DECKER"
        >
            <mx:verticalAxis>
                <mx:LinearAxis id="v2" minimum="150" maximum="170"/>           
            </mx:verticalAxis>

            <mx:lineStroke>
                <mx:Stroke 
                    color="{deckerColor}" 
                    weight="4" 
                    alpha="1"
                />
            </mx:lineStroke>
       </mx:LineSeries>
    </mx:series>
 </mx:ColumnChart>
 <mx:Legend dataProvider="{myChart}"/>

【问题讨论】:

  • 看起来像在多图场景中,flex 忽略了集合中的值并通过数组集合中的索引。为了测试这一点:我将 smith 的日期重新排序为 ( 24 , 25, 22, 23 ),将 decker 的日期重新排序为 (22 , 23 , 24, 25) 。结果是:24 号的 Smiths 值与 22 号的 decker 值相关联。

标签: apache-flex charts bar-chart linechart


【解决方案1】:

如果您切换到 /* */style 引号而不是 // 是否可以解决问题?我认为编译器认为你的数组集合都是一行(不管换行符),所以你可能无法在其中使用 // 样式引号。

【讨论】:

  • 好的,我删除了整个数据点本身(已删除),所以,我有 22-Aug、24-Aug、25- Aug 的 SMITH,但图表将 42.77 与 23-Aug 相关联。
  • 您是否在任何地方覆盖数组集合?否则,我不知道 Aug-23 会如何进入 SMITH 数组集合。
  • 不,有 2 张图表,一张给 smith,一张给 decker。 decker 在 smith 之后初始化。因此,flex 将 decker 的坐标作为 x 轴并从 smith 分配 y 值。如果你看到 smith,它有三个日期,22 - 24 - 25。而 decker 有 22- 23 - 25。 flex 给出了一个 x 轴 22- 23 - 25 而不是两个的联合 =( 22- 23- 24- 25).
【解决方案2】:

经过大量搜索,

上述来源使用了 2 个不同的数据源和 2 个不同的系列。 每个数据源都与一个系列相关联。因此,数据源:系列之间存在 1:1。

然而,

接缝的公认方法是使用一个数据源和两个系列。 数据源有一个与每个系列相关联的字段。因此,dataField : series 之间存在 1:1。

我使用第二种方法解决了这个问题,但这意味着我们必须手动构建具有正确值的单个数据源。

【讨论】:

    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多