首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让木星笔记本实时显示物料库图形。

让木星笔记本实时显示物料库图形。
EN

Stack Overflow用户
提问于 2018-11-23 16:32:08
回答 2查看 4K关注 0票数 10

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

我想在循环的每一次迭代中看到实时的数字。在单元格执行期间,而不是在完成整个单元执行时。

例如,如果我的代码是:

代码语言:javascript
复制
for i in range(10):
  print(i)
  show_figure(FIG_i)
  do_a_10_second_calculation()

我目前看到:

代码语言:javascript
复制
0
1
2
...
9
FIG_0
FIG_1
...
FIG_9

我想要的是

代码语言:javascript
复制
0
FIG_0
1
FIG_1
2
FIG_2
...

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-23 17:30:57

我认为问题在于您没有在这里显示的代码的一部分。因为它应该能像预期的那样工作。使它可以运行,

代码语言:javascript
复制
%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()

预期结果

票数 3
EN

Stack Overflow用户

发布于 2018-11-23 16:46:04

可以使用来自IPython.displayIPython.display函数将图形立即刷新为单元格输出。假设代码中的FIG_i是一个实际的Matplotlib图形对象,您只需用display(FIG_i)替换show_figure(FIG_i),这些图形就会实时输出。

下面是display在实际中的一个完整示例:

代码语言:javascript
复制
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')

下面是输出的屏幕截图:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53450189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档