获取Jupyter笔记本以实时显示matplotlib图形

2024-04-27 00:10:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个长时间运行的Python循环(用于机器学习),它定期打印输出并显示图形(使用matplotlib)。在Jupyter笔记本中运行时,所有文本(stdout)都是实时显示的,但是数字都是排队的,直到整个循环完成后才会显示。在

我希望在循环的每次迭代中都能看到实时的图形。在单元执行期间,而不是在整个单元执行完成时。在

例如,如果我的代码是:

for i in range(10):
  print(i)
  show_figure(FIG_i)
  do_a_10_second_calculation()

我目前看到:

^{pr2}$

我想要的是:

0
FIG_0
1
FIG_1
2
FIG_2
...

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


Tags: 代码in文本机器图形formatplotlibstdout
2条回答

来自^{}display函数可用于立即刷新图形到单元格的输出。假设代码中的FIG_i是一个实际的Matplotlib figure对象,您只需将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

我想问题不在这里。因为它应该像预期的那样工作。使它可以运行

%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()

结果达到预期效果

{a1}

相关问题 更多 >