python - 获取 Jupyter notebook 以实时显示 matplotlib 图形
问题描述
我有一个长时间运行的 Python 循环(用于机器学习),它定期打印输出并显示数字(使用 matplotlib)。在 Jupyter Notebook 中运行时,所有文本(stdout)都会实时显示,但数字都是排队的,直到整个循环完成后才会显示。
我想在循环的每次迭代中实时查看这些数字。在单元执行期间,而不是在整个单元执行完成时。
例如,如果我的代码是:
for i in range(10):
print(i)
show_figure(FIG_i)
do_a_10_second_calculation()
我目前看到:
0
1
2
...
9
FIG_0
FIG_1
...
FIG_9
我想要的是:
0
FIG_0
1
FIG_1
2
FIG_2
...
最重要的是,我希望看到计算出来的数字,而不是在整个循环完成之前看不到屏幕上的任何数字。
解决方案
display
函数 fromIPython.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')
这是输出的屏幕截图:
推荐阅读
- json - 按值排序json数组jq bash
- java - 根据孩子的领域对抽象对象列表进行排序
- python - 如何降低计算成本
- java - 单个网格的自动滚动功能
- r - R 代码显示错误:在一台计算机上选择了未定义的列,但在另一台计算机上未选择
- angular - 未捕获的 ReferenceError:在初始化之前无法访问“GA”
- mysql - 使用 UNION ALL 时的 Mysql 查询优化?
- jenkins - 由于活动目录集成,DMZ Jenkins 出现缓慢问题
- python - 从列表中的某个点计算列表的平均值?
- spring - REST - Jersey - Spring - 文件下载