D3 实时图仅在延迟后显示
d3 realtime graph appears only after a delay
我做了一个实时图来绘制一个简单的正弦波。基本上,代码仅从此链接中的路径转换 d3 示例略有修改:http://bost.ocks.org/mike/path/
我的代码在这里:http://jsfiddle.net/bgzsmqmw/2/
然而,有一些奇怪的行为我无法解释。
如果我使用 random() 函数生成的 y 值创建新的实时数据,那么当数据被添加并滚动到时域时,它会正确显示。
但是,如果我使用 Math.sin() 生成正弦波,则直到经过明显的延迟后,该行才会显示,然后突然出现整行。唯一的区别是生成新数据点的函数。
在我链接的 jsfiddle 中,尝试依次使用"//尝试这两行:"评论下方的两行中的每一行。这将产生我描述的两种行为情况。
知道发生了什么吗?
// TRY THESE TWO LINES:
//var sin = function(){return 0.2*Math.sin(theta);}; // Line only shows up after delay
var sin = function(){return random();}; // Line shows up immediately
这是因为
你在给theta和dtheta赋值之前调用函数newData。所以第一次调用这个函数时,theta 和 dtheta 是未定义的 (NaN),这使得 sin 函数返回 NaN。当 x 或 y 输入值为 NaN 时,D3 的行函数会创建无效的 SVG 路径。这种情况会继续发生,直到 NaN 值从数据数组中"向左移动",这就是为什么您最初看不到该行并且当它出现时,它会突然出现
。newData();
var theta = 0;
var dtheta = 1;
function newData()
{
theta += dtheta;
//var sin = function(){return 0.2*Math.sin(theta);};
var sin = function(){return random();};
data.push({x : new Date(), y : sin()});
};
要解决此问题,只需在调用 newData 之前将以下两行移动到顶部。请参阅此处的工作小提琴:http://jsfiddle.net/bgzsmqmw/4/
var theta = 0;
var dtheta = 1;
相关文章:
- 延迟高亮显示文本区域中的文本
- 如何利用多链接延迟检查并显示ping结果,然后使用JavaScript选择最快的URL
- 使用jQuery延迟表单输入,并在延迟后在同一页面上显示结果
- 在联系人表单中显示隐藏警告被延迟
- Unity 3d对象在场景中延迟后显示
- 如何将隐藏/显示事件延迟到提交后Iframe加载
- 延迟后触发ng显示
- jQuery/JavaScript 延迟和显示
- 您如何使其延迟并且直到 16 秒过去时才显示
- 将现有的jQuery从点击功能转换为延迟自动显示
- 如何自动隐藏和显示具有延迟的元素
- 在输入字段中显示文本,字母对字母有延迟
- 弹出框延迟显示在鼠标输入(Angularjs)上
- 通过 jquery 在 2 秒后延迟显示
- 使用Javascript在qualics中延迟显示文本
- 我可以延迟显示一个模态对话框在Bootstrap 3
- Javascript以一秒钟的延迟显示PHP值
- 延迟显示下拉菜单内容
- 反向列表和延迟显示
- 延迟显示电子邮件地址对电子邮件抓取者有用吗?