使用 qt5 自动更新 jupyter 笔记本中的图形



如何在Jupyter Notebook中执行此操作:

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
m = 100
n = 100
matrix = np.random.normal(0,1,m*n).reshape(m,n)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.ion()
fig.show()
fig.canvas.draw()
for i in range(0,100):
   #ax.clear()
   plt.plot(matrix[i,:])
   fig.canvas.draw()

但是使用"%matplotlib qt5"而不是"notebook"?

当我尝试它时,它仅在循环结束后显示数字。我希望看到它更新每个情节。

原则上,您可以在交互模式下执行以下操作:

%matplotlib qt4
import numpy as np
import matplotlib.pyplot as plt
m = 100
n = 100
matrix = np.random.normal(0,1,m*n).reshape(m,n)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.ion()
plt.draw()

for i in range(0,30):
   #ax.clear()
   plt.plot(matrix[i,:])
   plt.draw()
   plt.pause(0.1)
plt.ioff()
plt.show()
但是,由于

使用了Qt,它可能会在完成循环后在jupyter中崩溃。但是,当使用 tk 后端时,它应该可以工作,%matplotlib tk .

您可能需要考虑使用FuncAnimation而不是交互模式。虽然这在Jupyter中会遇到与Qt相同的限制,但我发现使用函数更新绘图更直观,并且无需手动重新绘制画布。

%matplotlib tk
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation 
m = 100
n = 100
matrix = np.random.normal(0,1,m*n).reshape(m,n)
fig = plt.figure()
ax = fig.add_subplot(111)

def update(i):
    #ax.clear()
    plt.plot(matrix[i,:])
ani = matplotlib.animation.FuncAnimation(fig, update, frames=30, repeat=False)
plt.show()

我问了一个关于为什么这不适用于qt后端的新问题。

相关内容

  • 没有找到相关文章

最新更新