matplotlib plt.show从脚本运行www.example.com(),则会导致jupyter控制台冻结

ttisahbt  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(183)

我不确定这是一个bug还是我的一些误解。如果第一种情况适用,请让我知道,以便我使用适当的问题跟踪器。
考虑以下./myscript.py

import numpy as np
import matplotlib.pyplot as plt 

tf = 20
f0 = 1
fs = 4*np.pi*f0
t = np.arange(0, tf, 1/fs)
fig, ax = plt.subplots()
ax.plot(t, np.sin(2*np.pi*f0*t))
plt.show()

如果我通过jupyter console运行上面的脚本,请通过下面的命令:

In [1]: run -i ./myscript.py

然后控制台冻结,我必须<c-c>,然后重新启动内核才能继续工作。如果我通过删除最后一行来修改上面的脚本,然后运行以下命令:

In [1]: run -i ./myscript.py
In [2]: plt.show()

然后事情就可以完美地工作了,但是手动调用plt.show()是非常烦人的,如后一个例子所示。
如何解决这个问题?
EDIT:更多细节。在我用<c-c>停止内核并尝试从jupyter控制台运行任何命令后,我得到以下错误消息:

/opt/homebrew/Caskroom/miniconda/base/envs/manim_ce/lib/python3.11/site-packages/jupyter_console/ptshell.py:787: UserWarning: The kernel did
 not respond to an is_complete_request. Setting `use_kernel_is_complete` to False.
  warn('The kernel did not respond to an is_complete_request. '
o4tp2gmn

o4tp2gmn1#

[已解决]:我必须在绘图之前添加plt.pause()。以上脚本已修改为:

...
fig, ax = plt.subplots()
plt.pause(0.1) # <==== ADDED THIS!
ax.plot(t, np.sin(2*np.pi*f0*t))
plt.show()
...

相关问题