SRo*_*mes 6 python real-time matplotlib jupyter-notebook
我有一个运行较长的Python循环(用于机器学习),该循环定期打印输出并显示图形(使用matplotlib)。在Jupyter Notebook中运行时,所有文本(stdout)都是实时显示的,但是所有数字都已排队,直到整个循环完成才显示。
我希望在循环的每次迭代中实时查看这些数字。在单元执行期间,而不是在整个单元执行完成时。
例如,如果我的代码是:
for i in range(10):
print(i)
show_figure(FIG_i)
do_a_10_second_calculation()
Run Code Online (Sandbox Code Playgroud)
我目前看到:
0
1
2
...
9
FIG_0
FIG_1
...
FIG_9
Run Code Online (Sandbox Code Playgroud)
我想要的是:
0
FIG_0
1
FIG_1
2
FIG_2
...
Run Code Online (Sandbox Code Playgroud)
最重要的是,我希望看到计算出来的数字,而不是等到整个循环完成之后才在屏幕上看到任何数字。
displayfrom 函数可IPython.display用于立即将图形刷新到单元格输出。假设FIG_i您的代码中是一个实际的 Matplotlib 图形对象,您只需替换show_figure(FIG_i)为display(FIG_i),图形就会实时输出。
这是一个完整的display实际示例:
from matplotlib import pyplot as plt
import numpy as np
from IPython.display import display
from time import sleep
for eps in range(0, 11, 5):
data = np.random.randint(eps, eps+10, size=(2,10))
fig = plt.figure()
ax = fig.gca()
ax.plot(*data)
print('eps %f' % eps)
display(fig)
plt.close() # .close prevents the normal figure display at end of cell execution
sleep(2)
print('slept 2 sec')
Run Code Online (Sandbox Code Playgroud)
这是输出的屏幕截图:
我想问题出在您未在此处显示的代码部分。因为它应该按预期工作。使其可运行,
%matplotlib inline
import matplotlib.pyplot as plt
def do_a_1_second_calculation():
plt.pause(1)
def show_figure(i):
plt.figure(i)
plt.plot([1,i,3])
plt.show()
for i in range(10):
print(i)
show_figure(i)
do_a_1_second_calculation()
Run Code Online (Sandbox Code Playgroud)
达到预期的结果
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |