简单的时间线图表,包含Flex中的事件

时间:2009-09-22 14:31:44

标签: flex charts timeline

我正在寻找一个简单的时间表图表,我可以在不同的时间跨度上显示多个事件。我没有在Flex中找到任何特定的图表,是否有人在这些行中创建或使用过任何东西?我找到了这个,Create a timeline from date to date in Flex/AS3,但这只是我要找的部分内容。

1 个答案:

答案 0 :(得分:3)

我使用mx:PlotChart创建了一个时间轴。它看起来像这样:

alt text

我在底部使用了一个带有DateTimeAxis的PlotChart,并且使用了一个LinearAxis。我把它放到一个小的Flex应用程序中:

<mx:Script>
    <![CDATA[
        import mx.charts.chartClasses.IAxis;
        import mx.charts.HitData;
        import mx.collections.ArrayCollection;

        [Bindable]
        public var max:Date;

        [Bindable]
        public var min:Date;

        [Bindable]
        private var notifAC:ArrayCollection;

        public function init():void
        {
            var notif1:Date = new Date(2009, 9, 8, 11, 30, 0, 0);
            var notif2:Date = new Date(2009, 9, 8, 12, 40, 0, 0);
            var notif3:Date = new Date(2009, 9, 8, 13, 45, 0, 0);

            notifAC = new ArrayCollection( [
                { Date: notif1, Name: "Notif 1", Value: 1 },
                { Date: notif2, Name: "Notif 2", Value: 1 },
                { Date: notif3, Name: "Notif 3", Value: 1 } ]);

            //set min and max to outside most notifs
            min = new Date(notif1.getTime());
            max = new Date(notif3.getTime());

            //calculate the range between min and max
            var timelineRange:Number = max.getTime() - min.getTime();

            //if less than 2 hours switch to minutes
            if(timelineRange < 7200000)
            {
                timelineDateAxis.dataUnits = "minutes";
            }
            //if greater than 2 days switch to days
            else if(timelineRange > 172800000)
            {
                timelineDateAxis.dataUnits = "days";
            }

            //as long as the timeline has a range other than 0, add 10% to the min and max
            if(timelineRange != 0)
            {
                min = new Date(min.getTime() - (timelineRange * .1));
                max = new Date(max.getTime() + (timelineRange * .1));
            }
            //if the timeline does have a range of 0, add 1 minute to min and max
            else
            {
                min = new Date(min.getTime() - 60000);
                max = new Date(max.getTime() + 60000);
            }
            //set the min and max of the axis
            timelineDateAxis.minimum = min;
            timelineDateAxis.maximum = max;
        }

        public function timelineDataTips(e:HitData):String
        {
            return "<b>" + e.item.Name + "</b>\n" + dataTipsFormatter.format(e.item.Date);
        }
    ]]>
</mx:Script>

<mx:Style>
    .issueTimelineHolder
    {
        background-color:#787878;
    }
    .issueTimelineChart
    {
        padding-top:5px;
        padding-right:0;
        padding-bottom:0;
        padding-left:0;    
    }
    .timelineDateAxis
    {
        color:#ffffff;
    }

</mx:Style>

<mx:Stroke id="timelineDateAxisStroke" 
    color="#9B9B9B"
    weight="8" 
    alpha=".75"
    caps="none"
/>
<mx:Stroke id="timelineTickStroke"
    color="#ffffff"
/>

<mx:DateFormatter id="dataTipsFormatter" formatString="HH:NN:SS MM/DD/YYYY" />

 <mx:Canvas styleName="issueTimelineHolder" width="350" height="120">
     <mx:PlotChart id="issueTimelineChart" styleName="issueTimelineChart" width="100%" height="100%" 
        showDataTips="true" dataTipFunction="timelineDataTips" dataProvider="{notifAC}">
        <mx:backgroundElements>
            <mx:GridLines direction="horizontal" />
        </mx:backgroundElements>

        <mx:verticalAxis>
            <mx:LinearAxis id="timelineValueAxis" minimum="0" maximum="2" interval="1" />
        </mx:verticalAxis>
        <mx:verticalAxisRenderers>
            <mx:AxisRenderer axis="{timelineValueAxis}" showLabels="false" showLine="false"
                tickPlacement="none" minorTickPlacement="none" />
        </mx:verticalAxisRenderers>

        <mx:horizontalAxis>
            <mx:DateTimeAxis id="timelineDateAxis" dataUnits="hours"
                minimum="{min}" maximum="{max}" displayLocalTime="true"/>
        </mx:horizontalAxis>
        <mx:horizontalAxisRenderers>
            <mx:AxisRenderer axis="{timelineDateAxis}" styleName="timelineDateAxis" tickPlacement="outside">
                <mx:axisStroke>{timelineDateAxisStroke}</mx:axisStroke>
                <mx:tickStroke>{timelineTickStroke}</mx:tickStroke>
            </mx:AxisRenderer>
        </mx:horizontalAxisRenderers>

        <mx:series>
            <mx:PlotSeries xField="Date" yField="Value" />
        </mx:series>
    </mx:PlotChart>
</mx:Canvas>