环境:Python 2.7,matplotlib 1.3,IPython笔记本1.1,linux,chrome.代码在一个输入单元格中,使用--pylab=inline
我想使用IPython笔记本和pandas来消耗流并每5秒动态更新一次.
当我只使用print语句以文本格式打印数据时,它完全正常:输出单元格只保留打印数据并添加新行.但是当我尝试绘制数据(然后在循环中更新它)时,绘图永远不会出现在输出单元格中.但如果我删除循环,只需绘制一次.它工作正常.
然后我做了一些简单的测试:
i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
plot(pd.Series(data=np.random.randn(100), index=i))
#pd.Series(data=np.random.randn(100), index=i).plot() also tried this one
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
在手动中断进程(ctrl + m + i)之前,输出不会显示任何内容.在我打断它之后,该图正确显示为多个重叠的行.但我真正想要的是一个每5秒显示并更新一次的情节(或者每当plot()函数被调用时,就像我上面提到的print语句输出一样,效果很好).仅在单元格完成后才显示最终图表不是我想要的.
我甚至尝试在每个之后显式添加draw()函数plot()等.它们都不起作用.想知道如何通过IPython笔记本中一个单元格内的for/while循环动态更新绘图.
这里有问题:
究竟什么是封闭的背景?这是进一步复杂的,因为ES6允许{}成为块/范围/上下文.{}作为分隔符足以定义"封闭上下文",或者它必须在函数范围内.
一个具体的例子:
let EventEmitter = require('events').EventEmitter;
class Person extends EventEmitter {
constructor(name) {
super();
this.name = name;
}
}
let mary = new Person('mary');
mary.on('speak', (said) => {
console.log(${this.name}: ${said});
});
mary.emit('speak', 'you may delay, but time will not');
它只是设置自定义事件,并在触发自定义事件时添加回调函数.为什么这里的箭头功能不起作用?
"mary"是调用"on"函数的对象,该函数应将"on"中的"this"设置为"mary".最重要的是,箭头函数在其参数位置的"on"函数中定义(在词法上足够,对吧?),为什么箭头函数不能从其"封闭的上下文"中得到"this"值,也就是说,这里的"开"功能???
同样的例子,使用传统的函数定义:
let EventEmitter = require('events').EventEmitter;
class Person extends EventEmitter {
constructor(name) {
super();
this.name = name;
}
}
let mary = new Person('mary');
mary.on('speak', function(s) {
console.log(this);
});
mary.emit('speak', 'you may delay, but …