获取 Jupyter notebook 实时显示 matplotlib 图形
Get Jupyter notebook to display matplotlib figures in real-time
我有一个很长的 运行ning 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
中的 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')
这是输出的屏幕截图:
我想问题出在您未在此处显示的代码部分。因为它应该按预期工作。使其可运行,
%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()
得到了想要的结果
我有一个很长的 运行ning 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
中的 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')
这是输出的屏幕截图:
我想问题出在您未在此处显示的代码部分。因为它应该按预期工作。使其可运行,
%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()
得到了想要的结果