python - 获取 Jupyter notebook 实时显示 matplotlib 图形

标签 python matplotlib jupyter-notebook real-time

我有一个长时间运行的 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
...

最重要的是,我希望看到计算出来的数字,而不是在整个循环完成之前看不到屏幕上的任何数字。

最佳答案

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')

这是输出的屏幕截图:

enter image description here

关于python - 获取 Jupyter notebook 实时显示 matplotlib 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450189/

相关文章:

python - Jupyter Notebook 不记得我在上面的单元格中创建的变量

python - 使用变量查询时 UPDATE TABLE 返回空值

python - 类变量和线程 - 意外的行为

python - 来自 python 值表的箱线图

python - 如何使用 Jupyter Notebook 进行打印

jupyter-notebook - 将 Jupyter Notebook 转换为 pdf 的问题

python - 属性错误: 'ResultSet' object has no attribute 'encode'

python - 减少 ThreadPoolExecutor 创建的事件线程数?

python - 如何在 3D Matplotlib 散点图中为特定的网格线/刻度线着色?

python - 排列 numpy 数组以用二维彩色图表示物理排列