我想模拟有连续传入的实时(动态)数据并馈送到图表的情况
因此,我尝试使用 d3 演示一个动画折线图,同时要求数据数组每 1 秒连续更新一次。
原作的灵感来自benjchristensen
这是我修改后的 html 源代码:我的源代码
我尝试通过调用函数来buffer[100]
填充random number for every 1 second
startGenerator()
function startGenerator()
{
//signalGenerator();
setInterval("signalGenerator()", 1000); //
}
function signalGenerator()
{
var buffer = new Array(100);
var i;
for (i = 0; i < buffer.length; i++)
{
buffer[i] = Math.random() * 10;
}
FeedDataToChart("#graph1", 300, 300, "basis", true, 100, 100, buffer, 0);
}
以下是FeedDataToChart()
参数名称:
function FeedDataToChart(id, width, height, interpolation, animate, updateDelay, transitionDelay, data, startIndex)
我用 acounter
检查重绘数据索引,每次重绘新数据时,counter
增加1
. 直到counter < data.length-1
,re-draw timer
应该停止并buffer[100]
再次从那里获取新数据。
function stopTimer()
{
clearInterval(myTimer);
alert("The redraw timer stop here, get new data from buffer");
}
function startTimer()
{
if (myTimer == null)
{
myTimer = setInterval(function() {
if (counter < data.length - 1)
{
var v = data.shift(); // remove the first element of the array
data.push(v); // add a new element to the array (we're just taking the number we just shifted off the front and appending to the end)
if(animate)
{
redrawWithAnimation();
}
else
{
redrawWithoutAnimation();
}
counter++;
}
else
{
alert("no more data in buffer");
stopTimer();
counter = startIndex;
}
}, updateDelay);
}
}
当我尝试重复该功能时出现我的问题startGenerator()
,结果显示如下:
我对javascript很陌生。谁能指出我如何从buffer
每个中提取数据1 second
并不断更新单个折线图?
谢谢!
编辑我更新了源和问题已最小化:我的新源
我在 处添加该.remove()
行stopTimer()
以删除 sgv 保存的数据并重置global buffer to null
并再次调用该startGenerator()
函数以在计时器停止时提取新数据。
现在我遇到的唯一问题是每次创建新图形时,它都会在前一个下方创建一个新的 sgv 路径。每次创建新图表时,它都会向下移动。检查我今天更新的新来源。运行代码后,您将看到我的描述。
每次更新时,如何将 sgv 路径固定在同一位置?