折线图缩放
我在放大以 dateTimeAxis 作为水平轴的折线图时遇到问题。我想通过使用滑块设置 dateTimeAxis 的最小值和最大值属性来放大和缩小。日期标签按预期更改,但当我设置最小值或最大值时,线条消失。
这是我的代码的一部分:
private function updateBoundariesFromSlider():void
{
leftBoundary = slider.values[0];
rightBoundary = slider.values[1];
updateMainData();
}
private function updateMainData():void
{
dateAxis.minimum = new Date(leftBoundary);
dateAxis.maximum = new Date(rightBoundary);
}
public function setChartData( data:XML, shown:Array, minDate:Date, maxDate:Date ):void
{
globalLeftBoundary = minDate.getTime();
globalRightBoundary = maxDate.getTime();
leftBoundary = minDate.getTime();
rightBoundary = maxDate.getTime();
for each( var s:String in shown )
{
var localXML:XMLList = data.track.(type == s);
// Create the new series and set its properties.
var localSeries:LineSeries = new LineSeries();
localSeries.dataProvider = localXML;
localSeries.yField = "value";
localSeries.xField = "time";
localSeries.displayName = s;
mySeries.push(localSeries);
}
hAxis = new DateTimeAxis();
hAxis.dataUnits = "minutes";
hAxis.dataInterval = 1;
hAxis.labelFunction = showLabel;
hAxis.alignLabelsToUnits = true;
hAxis.parseFunction = createDate;
//hAxis.minimum = new Date( leftBoundary );
//hAxis.maximum = new Date( rightBoundary );
Alert.show( (new Date( leftBoundary )).toString());
dateAxis = hAxis;
}
private function createDate(s:String):Date {
var dateTime:Array = s.split(" ");
var date:Array = dateTime[0].split("-");
var time:Array = dateTime[1].split(":");
var newDate:Date = new Date(date[0],date[1],date[2],time[0],time[1],time[2]);
return newDate;
}
<mx:LineChart id="lineChart" left="10" top="10" bottom="47" right="10" series="{mySeries}" horizontalAxis="{dateAxis}" />
<mx:Legend dataProvider="{lineChart}" height="23" bottom="16" left="10" id="legend" width="100"/>
<flexlib:HSlider id="slider" height="25"
allowTrackClick="true" allowThumbOverlap="false"
liveDragging="true" change="updateBoundariesFromSlider()"
showDataTip="false"
showTrackHighlight="true"
thumbCount="2" snapInterval="0"
values="{[leftBoundary, rightBoundary]}"
minimum="{globalLeftBoundary}" maximum="{globalRightBoundary}"
right="50" left="198" y="155"
/>
I have a problem zooming in on a line chart with a dateTimeAxis as horizontal axis. I want to zoom in and out, by setting the minimum and the maximum attribute of the dateTimeAxis with a slider. The date labels change as should, but the lines disappear as I set the minimum or the maximum.
Here's a part of the code I have:
private function updateBoundariesFromSlider():void
{
leftBoundary = slider.values[0];
rightBoundary = slider.values[1];
updateMainData();
}
private function updateMainData():void
{
dateAxis.minimum = new Date(leftBoundary);
dateAxis.maximum = new Date(rightBoundary);
}
public function setChartData( data:XML, shown:Array, minDate:Date, maxDate:Date ):void
{
globalLeftBoundary = minDate.getTime();
globalRightBoundary = maxDate.getTime();
leftBoundary = minDate.getTime();
rightBoundary = maxDate.getTime();
for each( var s:String in shown )
{
var localXML:XMLList = data.track.(type == s);
// Create the new series and set its properties.
var localSeries:LineSeries = new LineSeries();
localSeries.dataProvider = localXML;
localSeries.yField = "value";
localSeries.xField = "time";
localSeries.displayName = s;
mySeries.push(localSeries);
}
hAxis = new DateTimeAxis();
hAxis.dataUnits = "minutes";
hAxis.dataInterval = 1;
hAxis.labelFunction = showLabel;
hAxis.alignLabelsToUnits = true;
hAxis.parseFunction = createDate;
//hAxis.minimum = new Date( leftBoundary );
//hAxis.maximum = new Date( rightBoundary );
Alert.show( (new Date( leftBoundary )).toString());
dateAxis = hAxis;
}
private function createDate(s:String):Date {
var dateTime:Array = s.split(" ");
var date:Array = dateTime[0].split("-");
var time:Array = dateTime[1].split(":");
var newDate:Date = new Date(date[0],date[1],date[2],time[0],time[1],time[2]);
return newDate;
}
<mx:LineChart id="lineChart" left="10" top="10" bottom="47" right="10" series="{mySeries}" horizontalAxis="{dateAxis}" />
<mx:Legend dataProvider="{lineChart}" height="23" bottom="16" left="10" id="legend" width="100"/>
<flexlib:HSlider id="slider" height="25"
allowTrackClick="true" allowThumbOverlap="false"
liveDragging="true" change="updateBoundariesFromSlider()"
showDataTip="false"
showTrackHighlight="true"
thumbCount="2" snapInterval="0"
values="{[leftBoundary, rightBoundary]}"
minimum="{globalLeftBoundary}" maximum="{globalRightBoundary}"
right="50" left="198" y="155"
/>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我有一个具有类似图表缩放要求的应用程序,我发现根据上限和下限过滤图表数据提供程序看起来比修改图表水平轴上的最小值和最大值要好得多。这是一个简单的工作示例(Flex 3,更新 6-29-10:修改后的示例以使用 XMLListCollection):
I had an application with a similar chart zooming requirement, and I found that filtering the charts data provider based of the upper and lower bounds looks much better than modifying the minimum and maximum on the charts horizontal axis. Here is a simple, working example (Flex 3, UPDATE 6-29-10: Modified example to use XMLListCollection):
或者
or