Javascript 更新在Invisible HighCharts系列问题上更改的数据点
我使用HighCharts来显示包含直线图和条形图的图形。默认情况下,在单击系列标题之前,条形图系列不可见。我有代码可以动态更新条形图,但我注意到,当图表不可见时,我无法获取现有信息 当我从服务器获取数据时,我会尝试更新任何现有点,如果我们有新点,则添加新点。如果序列可见,此代码非常有效,但如果序列不可见,则Javascript 更新在Invisible HighCharts系列问题上更改的数据点,javascript,jquery,highcharts,Javascript,Jquery,Highcharts,我使用HighCharts来显示包含直线图和条形图的图形。默认情况下,在单击系列标题之前,条形图系列不可见。我有代码可以动态更新条形图,但我注意到,当图表不可见时,我无法获取现有信息 当我从服务器获取数据时,我会尝试更新任何现有点,如果我们有新点,则添加新点。如果序列可见,此代码非常有效,但如果序列不可见,则chart.series[1].data[idx]返回undefined。单击该系列将显示图表,因此我知道数据在某个地方。我做错了什么 if (chart.series[1].data[id
chart.series[1].data[idx]
返回undefined
。单击该系列将显示图表,因此我知道数据在某个地方。我做错了什么
if (chart.series[1].data[idx] && chart.series[1].data[idx].y != inRate)
{
chart.series[1].data[idx].update(inRate);
redraw = true;
}
else if (!chart.series[1].data[idx])
{
var time = IntervalToTime(i, doorInterval);
chart.series[1].addPoint([time, inRate], false, false);
redraw = true;
}
经过一些调查,我取得了一些进展。显然,直到序列至少出现一次,数据数组才被填充,因此您无法检查数据是否存在。我发现一个已处理的数据队列,其中保存着数据,该队列似乎正常工作,但在尝试调用
chart.series[1].data[idx].update(inRate)
经过调查,我发现了这个问题。显然,
数据
数组在序列至少出现一次后才会填充,因此无法检查其中是否存在数据。我发现了一个处理过的数据队列,其中保存着数据,这似乎是可行的
if (chart.series[1].processedXData[idx] && chart.series[1].processedYData[idx] != inRate)
{
chart.series[1].data[idx].update(inRate);
redraw = true;
}
else if (!chart.series[1].processedXData[idx])
{
var time = IntervalToTime(i, doorInterval);
chart.series[1].addPoint([time, inRate], false, false);
redraw = true;
}
由于性能原因,仅更新可见点/序列,如果确实需要更新某些内容,请尝试直接在
series.options.data
中更新点(覆盖该数组中的值)。此外,任何类型的jsFiddle都是值得赞赏的。快速问题,如果您能重新思考,问题中的inRate
代表什么?此外,该代码是否放置在数据点的循环中?HiinRate
基本上是我的Y
值,图表测量的是流量或速率。是的,这是在一个for循环中。谢谢,在一个图表中有一些奇怪的问题,它呈现数据,然后你将数据集交换到一个空数据集,它什么也不呈现,这是我所期望的。但当我切换回原始数据集时,图表呈现为空。你的问题是我到目前为止研究过的众多问题中的一个。你称之为重画吗?(只是一个想法)
if (chart.series[1].processedXData[idx] && chart.series[1].processedYData[idx] != inRate)
{
chart.series[1].data[idx].update(inRate);
redraw = true;
}
else if (!chart.series[1].processedXData[idx])
{
var time = IntervalToTime(i, doorInterval);
chart.series[1].addPoint([time, inRate], false, false);
redraw = true;
}