我创建了一个Flex LineChart,可以显示长时间的高潮和低潮预测。我正在使用具有form =“curve”的LineSeries,它产生一个很好的正弦波图,代表水位随时间的变化。 X轴表示时间,Y轴表示水位。我必须处理的唯一数据点是高潮和低潮值,但我想弄清楚如何确定沿线的任意x值的y值。
例如,假设我有以下数据点:
var highLowTidePredictions:ArrayCollection = new ArrayCollection( [
{ Date: new Date(2010, 1, 26, 7, 15), waterLevel: 20.3 },
{ Date: new Date(2010, 1, 26, 13, 15), waterLevel: -1.2 },
{ Date: new Date(2010, 1, 26, 19, 15), waterLevel: 19.0 },
{ Date: new Date(2010, 1, 27, 1, 15), waterLevel: -1.0 },
{ Date: new Date(2010, 1, 27, 7, 15), waterLevel: 18.7 },
{ Date: new Date(2010, 1, 27, 13, 15), waterLevel: 0.7 }
]);
这是我的折线图:
<mx:LineChart id="highLowLinePredictionsLineChart"
width="100%" height="100%"
dataProvider="{highLowTidePredictions}"
showDataTips="true">
<mx:horizontalAxis>
<mx:DateTimeAxis id="dta" />
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries id="lineSeries1"
xField="Date" yField="waterLevel"
form="curve" interpolateValues="true" sortOnXField="true"/>
</mx:series>
</mx:LineChart>
我想知道2010年2月26日09:00的waterLevel
。
如果能做的话会很酷
var date:Date = new Date(2010, 1, 26, 9, 0);
var waterLevel:Number = lineSeries1.getYValue(date);
但是,getYValue(xValue)
函数不存在。
答案 0 :(得分:1)
LineSeries的interpolate属性将填充第一个和最后一个值之间的间隙。然而,您的问题似乎是您正在寻求通过提前估算来扩展曲线。插值在这种情况下不起作用。
我建议找到一个合适的水位数据估算回归模型,并应用它来得出曲线上的更多点。根据我有限的经验,我可以推荐一个依赖加权数据点的模型,称为样条曲线模型。但是,我不是统计学家,估计模型建议可能是错误的。
答案 1 :(得分:0)
好的,我明白了。只需要回到11年级的数学课。
对于任何好奇的人来说,这就是我提出的功能:
如果w1
的高(或低)潮位为date1
,而w2
以下的低(或高)潮位为date2
单位,则以下函数给出w
处的水位date
。
private function getWaterLevel(date:Date, date1:Date, date2:Date, w1:Number, w2:Number):Number
{
var t:Number = date.getTime();
var t1:Number = date1.getTime();
var t2:Number = date2.getTime();
var A:Number = (w2 - w1) / 2;
var B:Number = 2 * (t2 - t1);
var C:Number = t1 + ((t2 - t1) / 2);
var D:Number = w1 + ((w2 - w1) / 2);
return A * Math.sin( ((2 * Math.PI)/B) * (t - C)) + D;
}